]> Kevux Git Server - fll/commitdiff
Update: Finish refactoring firewall from 0.6.x to 0.7.x/0.8.x.
authorKevin Day <kevin@kevux.org>
Sat, 17 Feb 2024 22:10:28 +0000 (16:10 -0600)
committerKevin Day <kevin@kevux.org>
Sat, 17 Feb 2024 23:35:50 +0000 (17:35 -0600)
I have tested this out and compared the show results between the 0.6.x version and the 0.7.x version to confirm consistent results.
From this point forward problems are to be up for consideration as possible regressions.

Separate out more of the functions into separate files.

I reviewed the header includes and removed the headers that do not have apparent direct use.

35 files changed:
build/stand_alone/firewall.config.h
build/stand_alone/firewall.settings
level_3/firewall/build/documentation/man/man1/firewall.1 [new file with mode: 0644]
level_3/firewall/build/settings/network/default-blacklist [new file with mode: 0644]
level_3/firewall/build/settings/network/default-whitelist [new file with mode: 0644]
level_3/firewall/build/settings/network/example-device-firewall [new file with mode: 0644]
level_3/firewall/build/settings/network/firewall-first [new file with mode: 0644]
level_3/firewall/build/settings/network/firewall-last [new file with mode: 0644]
level_3/firewall/build/settings/network/firewall-other [new file with mode: 0644]
level_3/firewall/build/stage/skeleton-settings.built [new file with mode: 0644]
level_3/firewall/build/stage/sources_documentation-settings.built [new file with mode: 0644]
level_3/firewall/build/stage/sources_headers-settings.built [new file with mode: 0644]
level_3/firewall/build/stage/sources_settings-settings.built [new file with mode: 0644]
level_3/firewall/c/main/firewall.h
level_3/firewall/c/main/operate.c
level_3/firewall/c/main/operate.h
level_3/firewall/c/main/operate/buffer.h
level_3/firewall/c/main/operate/chains.c [new file with mode: 0644]
level_3/firewall/c/main/operate/chains.h [new file with mode: 0644]
level_3/firewall/c/main/operate/create.c
level_3/firewall/c/main/operate/create.h
level_3/firewall/c/main/operate/default.c
level_3/firewall/c/main/operate/default.h
level_3/firewall/c/main/operate/delete.c
level_3/firewall/c/main/operate/delete.h
level_3/firewall/c/main/operate/process.c
level_3/firewall/c/main/operate/process.h
level_3/firewall/c/main/operate/rules.c [new file with mode: 0644]
level_3/firewall/c/main/operate/rules.h [new file with mode: 0644]
level_3/firewall/c/main/operate/show.c [new file with mode: 0644]
level_3/firewall/c/main/operate/show.h [new file with mode: 0644]
level_3/firewall/c/main/print/error.c
level_3/firewall/c/main/print/error.h
level_3/firewall/data/build/dependencies
level_3/firewall/data/build/settings

index b85aabbc144bc5474ec4cb4a5b17c719fcdcddfd..a400498a4ecacbc193d652cc9b6c0ca81f0fadde 100644 (file)
 //   sort /tmp/all.txt | uniq | sed -e 's|^_|#define &|g' > /tmp/sorted.txt
 //   echo "#define _di_private_inline_f_print_to_error_" >> /tmp/sorted.txt
 //   echo "#define _di_private_inline_private_f_print_to_error_" >> /tmp/sorted.txt
+
+#define _di_f_abstruse_e_
+#define _di_f_abstruse_maps_delete_callback_
+#define _di_f_abstruse_maps_destroy_callback_
+#define _di_f_abstruse_mapss_delete_callback_
+#define _di_f_abstruse_mapss_destroy_callback_
+#define _di_f_abstruse_mapss_t_
+#define _di_f_abstruse_maps_t_
+#define _di_f_abstruse_map_t_
+#define _di_f_abstruses_delete_callback_
+#define _di_f_abstruses_destroy_callback_
+#define _di_f_abstrusess_delete_callback_
+#define _di_f_abstrusess_destroy_callback_
+#define _di_f_abstrusess_t_
+#define _di_f_abstruses_t_
+#define _di_f_abstruse_t_
+#define _di_f_abstruse_type_t_
+#define _di_f_account_by_id_
+#define _di_f_account_by_name_
+#define _di_f_account_d_
+#define _di_f_account_delete_
+#define _di_f_account_destroy_
+#define _di_f_account_group_id_by_name_
+#define _di_f_account_group_name_by_id_
+#define _di_f_account_id_by_name_
+#define _di_f_account_name_by_id_
+#define _di_f_accounts_append_
+#define _di_f_accounts_append_all_
+#define _di_f_accounts_delete_callback_
+#define _di_f_accounts_destroy_callback_
+#define _di_f_accountss_append_all_
+#define _di_f_accountss_delete_callback_
+#define _di_f_accountss_destroy_callback_
+#define _di_f_accountss_t_
+#define _di_f_accounts_t_
+#define _di_f_account_t_
+#define _di_f_capability_ambient_get_
+#define _di_f_capability_ambient_reset_
+#define _di_f_capability_ambient_set_
+#define _di_f_capability_clear_
+#define _di_f_capability_clear_flag_
+#define _di_f_capability_compare_
+#define _di_f_capability_copy_
+#define _di_f_capability_copy_external_
+#define _di_f_capability_copy_internal_
+#define _di_f_capability_delete_
+#define _di_f_capability_file_descriptor_get_
+#define _di_f_capability_file_descriptor_set_
+#define _di_f_capability_file_get_
+#define _di_f_capability_file_set_
+#define _di_f_capability_flag_get
+#define _di_f_capability_flag_get_
+#define _di_f_capability_flag_set_
+#define _di_f_capability_from_name_
+#define _di_f_capability_from_text_
+#define _di_f_capability_groups_set_
+#define _di_f_capability_initialize_
+#define _di_f_capability_mode_get_
+#define _di_f_capability_mode_get_name_
+#define _di_f_capability_mode_set_
+#define _di_f_capability_owner_get_
+#define _di_f_capability_owner_set_
+#define _di_f_capability_process_bound_drop_
+#define _di_f_capability_process_bound_get_
+#define _di_f_capability_process_get_
+#define _di_f_capability_process_get_by_id_
+//#define _di_f_capability_process_set_
+#define _di_f_capability_security_bits_get_
+#define _di_f_capability_security_bits_set_
+#define _di_f_capability_size_
+#define _di_f_capability_supported_
+#define _di_f_capability_supported_ambient_
+#define _di_f_capability_supported_code_
+//#define _di_f_capability_t_
+#define _di_f_capability_to_name_
+#define _di_f_capability_to_text_
+#define _di_f_capability_user_set_
+#define _di_f_cellss_delete_callback_
+#define _di_f_cellss_destroy_callback_
+#define _di_f_cellss_t_
+#define _di_f_cells_t_
+#define _di_f_cell_t_
+//#define _di_f_char_t_
+//#define _di_f_color_begin_s_
+//#define _di_f_color_code_black_bg_s_
+//#define _di_f_color_code_black_s_
+//#define _di_f_color_code_blink_s_
+//#define _di_f_color_code_blue_bg_s_
+//#define _di_f_color_code_blue_s_
+//#define _di_f_color_code_bold_s_
+//#define _di_f_color_code_bright_black_bg_s_
+//#define _di_f_color_code_bright_black_s_
+//#define _di_f_color_code_bright_blue_bg_s_
+//#define _di_f_color_code_bright_blue_s_
+//#define _di_f_color_code_bright_green_bg_s_
+//#define _di_f_color_code_bright_green_s_
+//#define _di_f_color_code_bright_purple_bg_s_
+//#define _di_f_color_code_bright_purple_s_
+//#define _di_f_color_code_bright_red_bg_s_
+//#define _di_f_color_code_bright_red_s_
+//#define _di_f_color_code_bright_teal_bg_s_
+//#define _di_f_color_code_bright_teal_s_
+//#define _di_f_color_code_bright_white_bg_s_
+//#define _di_f_color_code_bright_white_s_
+//#define _di_f_color_code_bright_yellow_bg_s_
+//#define _di_f_color_code_bright_yellow_s_
+//#define _di_f_color_code_conceal_s_
+//#define _di_f_color_code_e_
+//#define _di_f_color_code_green_bg_s_
+//#define _di_f_color_code_green_s_
+//#define _di_f_color_code_purple_bg_s_
+//#define _di_f_color_code_purple_s_
+//#define _di_f_color_code_red_bg_s_
+//#define _di_f_color_code_red_s_
+//#define _di_f_color_code_reset_s_
+//#define _di_f_color_code_reverse_s_
+//#define _di_f_color_code_t_
+//#define _di_f_color_code_teal_bg_s_
+//#define _di_f_color_code_teal_s_
+//#define _di_f_color_code_underline_s_
+//#define _di_f_color_code_white_bg_s_
+//#define _di_f_color_code_white_s_
+//#define _di_f_color_code_yellow_bg_s_
+//#define _di_f_color_code_yellow_s_
+//#define _di_f_color_context_delete_
+#define _di_f_color_context_destroy_
+//#define _di_f_color_context_t_
+//#define _di_f_color_end_s_
+//#define _di_f_color_format_t_
+//#define _di_f_color_load_context_
+//#define _di_f_color_max_size_d_
+//#define _di_f_color_medium_s_
+//#define _di_f_color_mode_e_
+//#define _di_f_color_reset_s_
+//#define _di_f_color_s_
+#define _di_f_color_save_1_
+#define _di_f_color_save_2_
+#define _di_f_color_save_3_
+#define _di_f_color_save_4_
+#define _di_f_color_save_5_
+//#define _di_f_color_set_context_t_
+//#define _di_f_color_set_string_empty_s_
+//#define _di_f_color_set_t_
+//#define _di_f_color_t_
+//#define _di_f_color_terminal_name_s_
+//#define _di_f_color_terminal_s_
+//#define _di_f_color_terminal_value_linux_s_
+#define _di_f_compare_
+//#define _di_f_compare_dynamic_
+#define _di_f_compare_dynamic_except_
+#define _di_f_compare_dynamic_except_string_
+#define _di_f_compare_dynamic_except_trim_
+#define _di_f_compare_dynamic_except_trim_string_
+#define _di_f_compare_dynamic_partial_
+#define _di_f_compare_dynamic_partial_dynamic_
+#define _di_f_compare_dynamic_partial_except_
+#define _di_f_compare_dynamic_partial_except_dynamic_
+#define _di_f_compare_dynamic_partial_except_string_
+#define _di_f_compare_dynamic_partial_except_trim_
+#define _di_f_compare_dynamic_partial_except_trim_dynamic_
+#define _di_f_compare_dynamic_partial_except_trim_string_
+//#define _di_f_compare_dynamic_partial_string_
+#define _di_f_compare_dynamic_partial_trim_
+#define _di_f_compare_dynamic_partial_trim_dynamic_
+#define _di_f_compare_dynamic_partial_trim_string_
+#define _di_f_compare_dynamic_string_
+#define _di_f_compare_dynamic_trim_
+#define _di_f_compare_dynamic_trim_string_
+#define _di_f_compare_except_
+#define _di_f_compare_except_trim_
+#define _di_f_compare_trim_
+#define _di_f_compare_utf_
+#define _di_f_compare_utf_dynamic_
+#define _di_f_compare_utf_dynamic_except_
+#define _di_f_compare_utf_dynamic_except_string_
+#define _di_f_compare_utf_dynamic_except_trim_
+#define _di_f_compare_utf_dynamic_except_trim_string_
+#define _di_f_compare_utf_dynamic_partial_
+#define _di_f_compare_utf_dynamic_partial_dynamic_
+#define _di_f_compare_utf_dynamic_partial_except_
+#define _di_f_compare_utf_dynamic_partial_except_dynamic_
+#define _di_f_compare_utf_dynamic_partial_except_string_
+#define _di_f_compare_utf_dynamic_partial_except_trim_
+#define _di_f_compare_utf_dynamic_partial_except_trim_dynamic_
+#define _di_f_compare_utf_dynamic_partial_except_trim_string_
+#define _di_f_compare_utf_dynamic_partial_string_
+#define _di_f_compare_utf_dynamic_partial_trim_
+#define _di_f_compare_utf_dynamic_partial_trim_dynamic_
+#define _di_f_compare_utf_dynamic_partial_trim_string_
+#define _di_f_compare_utf_dynamic_string_
+#define _di_f_compare_utf_dynamic_trim_
+#define _di_f_compare_utf_dynamic_trim_string_
+#define _di_f_compare_utf_except_
+#define _di_f_compare_utf_except_trim_
+#define _di_f_compare_utf_trim_
+#define _di_f_compare_utf_utf_string_dynamic_partial_trim_
+//#define _di_f_console_arguments_t_
+#define _di_f_console_environment_process_
+//#define _di_f_console_flag_e_
+//#define _di_f_console_flag_t_
+#define _di_f_console_identify_
+//#define _di_f_console_length_size_d_
+//#define _di_f_console_parameter_prioritize_left_
+//#define _di_f_console_parameter_prioritize_right_
+//#define _di_f_console_parameter_process_
+#define _di_f_console_parameter_reset_
+//#define _di_f_console_parameters_delete_
+#define _di_f_console_parameters_destroy_
+//#define _di_f_console_parameters_t_
+#define _di_f_console_parameter_state_delete_
+#define _di_f_console_parameter_state_destroy_
+//#define _di_f_console_parameter_state_t_
+//#define _di_f_console_parameter_state_type_e_
+//#define _di_f_console_parameter_t_
+//#define _di_f_console_result_e_
+//#define _di_f_console_result_t_
+//#define _di_f_console_standard_long_copyright_s_
+//#define _di_f_console_standard_long_dark_s_
+//#define _di_f_console_standard_long_debug_s_
+//#define _di_f_console_standard_long_error_s_
+//#define _di_f_console_standard_long_help_s_
+//#define _di_f_console_standard_long_light_s_
+//#define _di_f_console_standard_long_line_first_no_s_
+//#define _di_f_console_standard_long_line_last_no_s_
+//#define _di_f_console_standard_long_no_color_s_
+//#define _di_f_console_standard_long_normal_s_
+//#define _di_f_console_standard_long_quiet_s_
+//#define _di_f_console_standard_long_status_in_s_
+//#define _di_f_console_standard_long_status_out_s_
+//#define _di_f_console_standard_long_verbose_s_
+//#define _di_f_console_standard_long_version_s_
+//#define _di_f_console_standard_parameter_e_
+//#define _di_f_console_standard_s_
+//#define _di_f_console_standard_short_copyright_s_
+//#define _di_f_console_standard_short_dark_s_
+//#define _di_f_console_standard_short_debug_s_
+//#define _di_f_console_standard_short_error_s_
+//#define _di_f_console_standard_short_help_s_
+//#define _di_f_console_standard_short_light_s_
+//#define _di_f_console_standard_short_line_first_no_s_
+//#define _di_f_console_standard_short_line_last_no_s_
+//#define _di_f_console_standard_short_no_color_s_
+//#define _di_f_console_standard_short_normal_s_
+//#define _di_f_console_standard_short_quiet_s_
+//#define _di_f_console_standard_short_status_in_s_
+//#define _di_f_console_standard_short_status_out_s_
+//#define _di_f_console_standard_short_verbose_s_
+//#define _di_f_console_standard_short_version_s_
+//#define _di_f_console_symbol_long_inverse_s_
+//#define _di_f_console_symbol_long_normal_s_
+//#define _di_f_console_symbol_s_
+//#define _di_f_console_symbol_short_inverse_s_
+//#define _di_f_console_symbol_short_normal_s_
+//#define _di_f_console_verbosity_e_
+#define _di_f_control_group_copy_
+#define _di_f_control_group_d_
+#define _di_f_control_group_path_system_default_s_
+#define _di_f_control_group_path_system_prefix_s_
+//#define _di_f_control_group_path_system_suffix_s_
+//#define _di_f_control_group_s_
+//#define _di_f_control_group_t_
+//#define _di_f_conversion_character_is_binary_
+//#define _di_f_conversion_character_is_decimal_
+//#define _di_f_conversion_character_is_duodecimal_
+//#define _di_f_conversion_character_is_hexidecimal_
+//#define _di_f_conversion_character_is_octal_
+//#define _di_f_conversion_character_to_binary_
+//#define _di_f_conversion_character_to_decimal_
+//#define _di_f_conversion_character_to_duodecimal_
+//#define _di_f_conversion_character_to_hexidecimal_
+//#define _di_f_conversion_character_to_octal_
+//#define _di_f_conversion_d_
+//#define _di_f_conversion_data_base_10_c_
+#define _di_f_conversion_data_base_12_c_
+#define _di_f_conversion_data_base_16_c_
+#define _di_f_conversion_data_base_2_c_
+#define _di_f_conversion_data_base_8_c_
+//#define _di_f_conversion_data_c_
+//#define _di_f_conversion_data_flag_d_
+//#define _di_f_conversion_data_t_
+//#define _di_f_conversion_number_signed_print_
+//#define _di_f_conversion_number_signed_to_string_
+//#define _di_f_conversion_number_unsigned_print_
+//#define _di_f_conversion_number_unsigned_to_string_
+#define _di_f_date_spec_t_
+#define _di_f_date_t_
+#define _di_f_directory_at_d_
+//#define _di_f_directory_back_s_
+#define _di_f_directory_create_
+#define _di_f_directory_create_at_
+//#define _di_f_directory_current_s_
+#define _di_f_directory_exists_
+#define _di_f_directory_exists_at_
+//#define _di_f_directory_flag_d_
+#define _di_f_directory_is_
+#define _di_f_directory_is_at_
+//#define _di_f_directory_list_
+#define _di_f_directory_listing_delete_
+#define _di_f_directory_listing_destroy_
+#define _di_f_directory_listings_delete_callback_
+#define _di_f_directory_listings_destroy_callback_
+#define _di_f_directory_listingss_delete_callback_
+#define _di_f_directory_listingss_destroy_callback_
+#define _di_f_directory_listingss_t_
+#define _di_f_directory_listings_t_
+//#define _di_f_directory_listing_t_
+//#define _di_f_directory_max_d_
+#define _di_f_directory_open_
+#define _di_f_directory_open_at_
+#define _di_f_directory_recurse_do_delete_
+#define _di_f_directory_recurse_do_destroy_
+#define _di_f_directory_recurse_do_flag_e_
+#define _di_f_directory_recurse_dos_delete_callback_
+#define _di_f_directory_recurse_dos_destroy_callback_
+#define _di_f_directory_recurse_doss_delete_callback_
+#define _di_f_directory_recurse_doss_destroy_callback_
+#define _di_f_directory_recurse_doss_t_
+#define _di_f_directory_recurse_dos_t_
+#define _di_f_directory_recurse_do_t_
+#define _di_f_directory_remove_
+#define _di_f_directory_remove_custom_
+//#define _di_f_directory_s_
+#define _di_f_directory_status_delete_
+#define _di_f_directory_status_destroy_
+#define _di_f_directory_statuss_delete_callback_
+#define _di_f_directory_statuss_destroy_callback_
+#define _di_f_directory_statusss_delete_callback_
+#define _di_f_directory_statusss_destroy_callback_
+#define _di_f_directory_statusss_t_
+#define _di_f_directory_statuss_t_
+#define _di_f_directory_status_t_
+#define _di_f_directory_touch_
+#define _di_f_directory_touch_at_
+#define _di_f_environment_clear_
+//#define _di_f_environment_d_
+#define _di_f_environment_exists_
+//#define _di_f_environment_get_
+#define _di_f_environment_get_all_
+#define _di_f_environment_secure_is_
+//#define _di_f_environment_set_
+#define _di_f_environment_unset_
+//#define _di_f_execute_e_
+#define _di_f_execute_result_t_
+//#define _di_f_execute_scheduler_t_
+#define _di_f_execute_status_from_status_
+#define _di_f_execute_status_to_status_
+#define _di_f_file_access_
+#define _di_f_file_access_at_
+#define _di_f_file_access_mode_d_
+#define _di_f_file_at_d_
+#define _di_f_file_clone_
+//#define _di_f_file_close_
+#define _di_f_file_close_id_
+#define _di_f_file_copy_
+#define _di_f_file_create_
+#define _di_f_file_create_at_
+#define _di_f_file_create_device_
+#define _di_f_file_create_device_at_
+#define _di_f_file_create_fifo_
+#define _di_f_file_create_fifo_at_
+#define _di_f_file_create_node_
+#define _di_f_file_create_node_at_
+#define _di_f_file_descriptor_
+//#define _di_f_file_exists_
+#define _di_f_file_exists_at_
+//#define _di_f_file_flush_
+#define _di_f_file_group_read_
+#define _di_f_file_is_
+#define _di_f_file_is_at_
+#define _di_f_file_is_stat_
+#define _di_f_file_link_
+#define _di_f_file_link_at_
+#define _di_f_file_link_hard_
+#define _di_f_file_link_hard_at_
+#define _di_f_file_link_read_
+#define _di_f_file_link_read_at_
+#define _di_f_file_manipulate_
+#define _di_f_file_mode_determine_
+#define _di_f_file_mode_from_string_
+#define _di_f_file_mode_read_
+#define _di_f_file_mode_read_at_
+#define _di_f_file_mode_set_
+#define _di_f_file_mode_set_at_
+#define _di_f_file_mode_t_
+#define _di_f_file_mode_to_mode_
+#define _di_f_file_name_base_
+#define _di_f_file_name_directory_
+//#define _di_f_file_open_
+#define _di_f_file_open_at_
+//#define _di_f_file_open_mode_read_append_s_
+//#define _di_f_file_open_mode_read_s_
+//#define _di_f_file_open_mode_read_truncate_s_
+//#define _di_f_file_open_mode_read_write_s_
+//#define _di_f_file_open_mode_s_
+//#define _di_f_file_open_mode_write_append_s_
+//#define _di_f_file_open_mode_write_truncate_s_
+#define _di_f_file_operation_access_s_
+#define _di_f_file_operation_analyze_s_
+#define _di_f_file_operation_append_s_
+#define _di_f_file_operation_change_group_s_
+#define _di_f_file_operation_change_mode_s_
+#define _di_f_file_operation_change_owner_s_
+#define _di_f_file_operation_change_type_s_
+#define _di_f_file_operation_clone_s_
+#define _di_f_file_operation_close_s_
+#define _di_f_file_operation_concatenate_s_
+#define _di_f_file_operation_connect_s_
+#define _di_f_file_operation_copy_s_
+#define _di_f_file_operation_create_s_
+#define _di_f_file_operation_decrypt_s_
+#define _di_f_file_operation_delete_s_
+#define _di_f_file_operation_disconnect_s_
+#define _di_f_file_operation_encrypt_s_
+#define _di_f_file_operation_find_s_
+#define _di_f_file_operation_flush_s_
+#define _di_f_file_operation_from_s_
+#define _di_f_file_operation_get_group_s_
+#define _di_f_file_operation_get_mode_s_
+#define _di_f_file_operation_get_owner_s_
+#define _di_f_file_operation_get_type_s_
+#define _di_f_file_operation_identify_s_
+#define _di_f_file_operation_link_s_
+#define _di_f_file_operation_list_s_
+#define _di_f_file_operation_move_s_
+//#define _di_f_file_operation_open_s_
+#define _di_f_file_operation_pipe_s_
+//#define _di_f_file_operation_process_s_
+//#define _di_f_file_operation_read_s_
+#define _di_f_file_operation_receive_s_
+#define _di_f_file_operation_rename_s_
+//#define _di_f_file_operation_s_
+#define _di_f_file_operation_send_s_
+#define _di_f_file_operation_shred_s_
+#define _di_f_file_operation_stat_s_
+#define _di_f_file_operation_to_s_
+#define _di_f_file_operation_touch_s_
+#define _di_f_file_operation_truncate_s_
+#define _di_f_file_operation_unlink_s_
+#define _di_f_file_operation_verify_s_
+#define _di_f_file_operation_wipe_s_
+#define _di_f_file_operation_write_s_
+#define _di_f_file_owner_read_
+#define _di_f_file_poll_
+//#define _di_f_file_read_
+//#define _di_f_file_read_block_
+#define _di_f_file_read_until_
+#define _di_f_file_remove_
+#define _di_f_file_remove_at_
+#define _di_f_file_rename_
+#define _di_f_file_rename_at_
+#define _di_f_file_role_change_
+#define _di_f_file_role_change_at_
+#define _di_f_file_seek_
+#define _di_f_file_seeks_d_
+#define _di_f_file_select_
+#define _di_f_file_select_signal_
+#define _di_f_file_size_
+#define _di_f_file_size_at_
+#define _di_f_file_size_by_id_
+#define _di_f_filess_delete_callback_
+#define _di_f_filess_destroy_callback_
+#define _di_f_filess_t_
+#define _di_f_files_t_
+#define _di_f_file_stat_
+#define _di_f_file_stat_at_
+#define _di_f_file_stat_by_id_
+#define _di_f_file_stat_flags_e_
+//#define _di_f_file_stream_close_
+//#define _di_f_file_stream_flush_
+//#define _di_f_file_stream_lock_
+#define _di_f_file_stream_lock_try_
+//#define _di_f_file_stream_open_
+#define _di_f_file_stream_open_descriptor_
+#define _di_f_file_stream_read_
+#define _di_f_file_stream_read_block_
+#define _di_f_file_stream_read_until_
+#define _di_f_file_stream_reopen_
+//#define _di_f_file_stream_unlock_
+#define _di_f_file_stream_write_
+#define _di_f_file_stream_write_block_
+#define _di_f_file_stream_write_range
+#define _di_f_file_stream_write_range_
+#define _di_f_file_stream_write_until
+#define _di_f_file_stream_write_until_
+//#define _di_f_file_t_
+#define _di_f_file_touch_
+#define _di_f_file_touch_at_
+#define _di_f_file_type_
+#define _di_f_file_type_at_
+//#define _di_f_file_type_d_
+#define _di_f_file_type_name_block_s_
+#define _di_f_file_type_name_character_s_
+#define _di_f_file_type_name_directory_s_
+#define _di_f_file_type_name_fifo_s_
+#define _di_f_file_type_name_file_s_
+#define _di_f_file_type_name_link_s_
+#define _di_f_file_type_name_regular_s_
+#define _di_f_file_type_name_socket_s_
+//#define _di_f_file_type_s_
+//#define _di_f_file_umask_get_
+#define _di_f_file_umask_set_
+//#define _di_f_file_write_
+#define _di_f_file_write_block_
+#define _di_f_file_write_range
+#define _di_f_file_write_range_
+#define _di_f_file_write_until
+#define _di_f_file_write_until_
+#define _di_f_fll_ids_delete_callback_
+#define _di_f_fll_ids_destroy_callback_
+#define _di_f_fll_idss_delete_callback_
+#define _di_f_fll_idss_destroy_callback_
+#define _di_f_fll_idss_t_
+#define _di_f_fll_ids_t_
+#define _di_f_fll_id_t_
+//#define _di_f_fss_apply_delimit_
+#define _di_f_fss_apply_delimit_range_
+#define _di_f_fss_complete_e_
+#define _di_f_fss_count_lines_
+#define _di_f_fss_count_lines_range_
+#define _di_f_fss_default_d_
+#define _di_f_fss_e_
+//#define _di_f_fss_fail_utf_
+//#define _di_f_fss_fail_utf_to_false_
+#define _di_f_fss_header_s_
+#define _di_f_fss_is_combining_
+//#define _di_f_fss_is_graph_
+//#define _di_f_fss_is_space_
+//#define _di_f_fss_is_zero_width_
+#define _di_f_fss_item_delete_
+#define _di_f_fss_item_destroy_
+#define _di_f_fss_items_delete_callback_
+#define _di_f_fss_items_destroy_callback_
+#define _di_f_fss_itemss_delete_callback_
+#define _di_f_fss_itemss_destroy_callback_
+#define _di_f_fss_itemss_t_
+#define _di_f_fss_items_t_
+#define _di_f_fss_item_t_
+#define _di_f_fss_named_delete_
+#define _di_f_fss_named_destroy_
+#define _di_f_fss_nameds_delete_callback_
+#define _di_f_fss_nameds_destroy_callback_
+#define _di_f_fss_namedss_delete_callback_
+#define _di_f_fss_namedss_destroy_callback_
+#define _di_f_fss_namedss_t_
+#define _di_f_fss_nameds_t_
+#define _di_f_fss_named_t_
+#define _di_f_fss_nest_delete_
+#define _di_f_fss_nest_destroy_
+#define _di_f_fss_nests_delete_callback_
+#define _di_f_fss_nests_destroy_callback_
+#define _di_f_fss_nestss_delete_callback_
+#define _di_f_fss_nestss_destroy_callback_
+#define _di_f_fss_nestss_t_
+#define _di_f_fss_nests_t_
+#define _di_f_fss_nest_t_
+#define _di_f_fss_payload_comment_header_begin_s_
+#define _di_f_fss_payload_comment_header_end_s_
+#define _di_f_fss_payload_comment_header_s_
+#define _di_f_fss_payload_header_map_flag_e_
+#define _di_f_fss_payload_object_end_s_
+#define _di_f_fss_payload_object_header_s_
+#define _di_f_fss_payload_object_id_s_
+#define _di_f_fss_payload_object_length_s_
+#define _di_f_fss_payload_object_name_s_
+#define _di_f_fss_payload_object_part_s_
+#define _di_f_fss_payload_object_payload_s_
+#define _di_f_fss_payload_object_signature_s_
+#define _di_f_fss_payload_object_size_s_
+#define _di_f_fss_payload_object_status_s_
+#define _di_f_fss_payload_object_total_s_
+#define _di_f_fss_payload_object_type_s_
+#define _di_f_fss_payload_s_
+//#define _di_f_fss_placeholder_s_
+#define _di_f_fss_quote_double_null_s_
+#define _di_f_fss_quote_grave_null_s_
+#define _di_f_fss_quote_single_null_s_
+//#define _di_f_fss_quote_type_e_
+//#define _di_f_fss_s_
+//#define _di_f_fss_seek_to_eol_
+#define _di_f_fss_set_delete_
+#define _di_f_fss_set_destroy_
+#define _di_f_fss_set_quote_delete_
+#define _di_f_fss_set_quote_destroy_
+#define _di_f_fss_set_quotes_delete_callback_
+#define _di_f_fss_set_quotes_destroy_callback_
+#define _di_f_fss_set_quotess_delete_callback_
+#define _di_f_fss_set_quotess_destroy_callback_
+#define _di_f_fss_set_quotess_t_
+#define _di_f_fss_set_quotes_t_
+#define _di_f_fss_set_quote_t_
+#define _di_f_fss_sets_delete_callback_
+#define _di_f_fss_sets_destroy_callback_
+#define _di_f_fss_setss_delete_callback_
+#define _di_f_fss_setss_destroy_callback_
+#define _di_f_fss_setss_t_
+#define _di_f_fss_sets_t_
+#define _di_f_fss_set_t_
+#define _di_f_fss_simple_packet_d_
+#define _di_f_fss_simple_packet_decode_
+#define _di_f_fss_simple_packet_decode_range_
+#define _di_f_fss_simple_packet_delete_
+#define _di_f_fss_simple_packet_destroy_
+#define _di_f_fss_simple_packet_encode_
+#define _di_f_fss_simple_packet_rangess_t_
+#define _di_f_fss_simple_packet_ranges_t_
+#define _di_f_fss_simple_packet_range_t_
+#define _di_f_fss_simple_packets_delete_callback_
+#define _di_f_fss_simple_packets_destroy_callback_
+#define _di_f_fss_simple_packetss_delete_callback_
+#define _di_f_fss_simple_packetss_destroy_callback_
+#define _di_f_fss_simple_packetss_t_
+#define _di_f_fss_simple_packets_t_
+#define _di_f_fss_simple_packet_t_
+//#define _di_f_fss_skip_past_delimit_
+//#define _di_f_fss_skip_past_space_
+//#define _di_f_fss_state_flag_e_
+//#define _di_f_fss_type_s_
+#define _di_f_f_utf_space_em_per_four_s_
+#define _di_f_f_utf_space_em_per_six_s_
+#define _di_f_f_utf_space_em_per_three_s_
+#define _di_f_f_utf_space_em_quad_s_
+#define _di_f_f_utf_space_em_s_
+#define _di_f_f_utf_space_en_quad_s_
+#define _di_f_f_utf_space_en_s_
+#define _di_f_f_utf_space_figure_s_
+#define _di_f_f_utf_space_hair_s_
+#define _di_f_f_utf_space_ideographic_s_
+#define _di_f_f_utf_space_line_feed_reverse_s_
+#define _di_f_f_utf_space_line_next_s_
+#define _di_f_f_utf_space_medium_mathematical_s_
+#define _di_f_f_utf_space_no_break_narrow_s_
+#define _di_f_f_utf_space_no_break_s_
+#define _di_f_f_utf_space_ogham_s_
+#define _di_f_f_utf_space_punctuation_s_
+#define _di_f_f_utf_space_separator_line_s_
+#define _di_f_f_utf_space_separator_paragraph_s_
+#define _di_f_f_utf_space_thin_s_
+#define _di_f_f_utf_substitute_middle_dot_s_
+#define _di_f_f_utf_substitute_open_box_s_
+#define _di_f_f_utf_substitute_open_box_shouldered_s_
+#define _di_f_f_utf_substitute_symbol_blank_s_
+#define _di_f_f_utf_substitute_symbol_space_s_
+#define _di_f_iki_content_is_
+#define _di_f_iki_content_partial_is_
+#define _di_f_iki_data_delete_
+#define _di_f_iki_data_destroy_
+#define _di_f_iki_datas_append_
+#define _di_f_iki_datas_append_all_
+#define _di_f_iki_datas_delete_callback_
+#define _di_f_iki_datas_destroy_callback_
+#define _di_f_iki_datass_append_
+#define _di_f_iki_datass_append_all_
+#define _di_f_iki_datass_delete_callback_
+#define _di_f_iki_datass_destroy_callback_
+#define _di_f_iki_datass_t_
+#define _di_f_iki_datas_t_
+#define _di_f_iki_data_t_
+#define _di_f_iki_default_d_
+#define _di_f_iki_object_is_
+#define _di_f_iki_object_partial_is_
+#define _di_f_iki_read_
+#define _di_f_iki_state_flag_e_
+#define _di_f_iki_syntax_placeholder_s_
+#define _di_f_iki_syntax_quote_double_s_
+#define _di_f_iki_syntax_quote_grave_s_
+#define _di_f_iki_syntax_quote_single_s_
+#define _di_f_iki_syntax_s_
+#define _di_f_iki_syntax_separator_s_
+#define _di_f_iki_syntax_slash_s_
+#define _di_f_iki_syntax_wrap_close_s_
+#define _di_f_iki_syntax_wrap_open_s_
+#define _di_f_iki_vocabulary_0001_address_s_
+#define _di_f_iki_vocabulary_0001_code_s_
+#define _di_f_iki_vocabulary_0001_email_s_
+#define _di_f_iki_vocabulary_0001_name_s_
+#define _di_f_iki_vocabulary_0001_phone_s_
+#define _di_f_iki_vocabulary_0001_quote_s_
+#define _di_f_iki_vocabulary_0001_s_
+#define _di_f_iki_vocabulary_0001_uri_s_
+#define _di_f_iki_vocabulary_0001_url_s_
+#define _di_f_iki_vocabulary_0001_urn_s_
+#define _di_f_iki_vocabulary_0001_variable_s_
+#define _di_f_iki_vocabulary_0002_context_s_
+#define _di_f_iki_vocabulary_0002_define_s_
+#define _di_f_iki_vocabulary_0002_parameter_s_
+#define _di_f_iki_vocabulary_0002_s_
+#define _di_f_int128ss_delete_callback_
+#define _di_f_int128ss_destroy_callback_
+#define _di_f_int128ss_t_
+#define _di_f_int128s_t_
+//#define _di_f_int128_t_
+#define _di_f_int16ss_delete_callback_
+#define _di_f_int16ss_destroy_callback_
+#define _di_f_int16ss_t_
+#define _di_f_int16s_t_
+#define _di_f_int32ss_delete_callback_
+#define _di_f_int32ss_destroy_callback_
+#define _di_f_int32ss_t_
+//#define _di_f_int32s_t_
+#define _di_f_int64ss_delete_callback_
+#define _di_f_int64ss_destroy_callback_
+#define _di_f_int64ss_t_
+#define _di_f_int64s_t_
+#define _di_f_int8ss_delete_callback_
+#define _di_f_int8ss_destroy_callback_
+#define _di_f_int8ss_t_
+#define _di_f_int8s_t_
+//#define _di_fl_control_group_apply_
+#define _di_fl_conversion_data_base_10_c_
+#define _di_fl_conversion_data_base_12_c_
+#define _di_fl_conversion_data_base_16_c_
+#define _di_fl_conversion_data_base_2_c_
+#define _di_fl_conversion_data_base_8_c_
+#define _di_fl_conversion_data_c_
+#define _di_fl_conversion_data_endian_big_c_
+#define _di_fl_conversion_data_endian_little_c_
+#define _di_fl_conversion_data_flag_e_
+#define _di_fl_conversion_data_t_
+#define _di_fl_conversion_dynamic_partial_to_binary_signed_
+#define _di_fl_conversion_dynamic_partial_to_binary_unsigned_
+#define _di_fl_conversion_dynamic_partial_to_decimal_signed_
+#define _di_fl_conversion_dynamic_partial_to_decimal_unsigned_
+#define _di_fl_conversion_dynamic_partial_to_signed_
+#define _di_fl_conversion_dynamic_partial_to_signed_detect_
+#define _di_fl_conversion_dynamic_partial_to_unsigned_
+#define _di_fl_conversion_dynamic_partial_to_unsigned_detect_
+#define _di_fl_conversion_dynamic_to_binary_signed_
+#define _di_fl_conversion_dynamic_to_binary_unsigned_
+#define _di_fl_conversion_dynamic_to_decimal_signed_
+#define _di_fl_conversion_dynamic_to_decimal_unsigned_
+#define _di_fl_conversion_dynamic_to_signed_
+#define _di_fl_conversion_dynamic_to_signed_detect_
+#define _di_fl_conversion_dynamic_to_unsigned_
+#define _di_fl_conversion_dynamic_to_unsigned_detect_
+#define _di_fl_directory_create_
+#define _di_fl_directory_do_
+#define _di_fl_directory_list_
+#define _di_fl_directory_path_pop_
+#define _di_fl_directory_path_push_
+#define _di_fl_directory_path_push_dynamic_
+#define _di_fl_environment_load_name_
+#define _di_fl_environment_load_names_
+//#define _di_fl_environment_path_explode_
+#define _di_fl_environment_path_explode_reverse_
+//#define _di_fl_execute_as_t_
+//#define _di_fl_execute_parameter_option_d_
+//#define _di_fl_execute_parameter_t_
+//#define _di_fl_fss_basic_content_read_
+#define _di_fl_fss_basic_content_write_
+//#define _di_fl_fss_basic_list_content_read_
+#define _di_fl_fss_basic_list_content_write_
+//#define _di_fl_fss_basic_list_object_read_
+#define _di_fl_fss_basic_list_object_write_
+//#define _di_fl_fss_basic_object_read_
+#define _di_fl_fss_basic_object_write_
+#define _di_fl_fss_embedded_list_content_read_
+#define _di_fl_fss_embedded_list_content_write_
+#define _di_fl_fss_embedded_list_object_read_
+#define _di_fl_fss_embedded_list_object_write_
+//#define _di_fl_fss_extended_content_read_
+#define _di_fl_fss_extended_content_write_
+#define _di_fl_fss_extended_list_content_read_
+#define _di_fl_fss_extended_list_content_write_
+#define _di_fl_fss_extended_list_object_read_
+#define _di_fl_fss_extended_list_object_write_
+//#define _di_fl_fss_extended_object_read_
+#define _di_fl_fss_extended_object_write_
+#define _di_fl_fss_payload_d_
+#define _di_fl_fss_payload_header_map_
+#define _di_fl_fss_payload_header_maps_
+#define _di_fl_iki_read_
+//#define _di_f_limit_process_
+#define _di_f_limit_setss_delete_callback_
+#define _di_f_limit_setss_destroy_callback_
+#define _di_f_limit_setss_t_
+//#define _di_f_limit_sets_t_
+//#define _di_f_limit_set_t_
+#define _di_f_limit_valuess_delete_callback_
+#define _di_f_limit_valuess_destroy_callback_
+#define _di_f_limit_valuess_t_
+#define _di_f_limit_values_t_
+//#define _di_f_limit_value_t_
+#define _di_fll_control_group_prepare_
+//#define _di_fll_error_file_flag_e_
+//#define _di_fll_error_file_print_
+//#define _di_fll_error_file_type_directory_s_
+//#define _di_fll_error_file_type_e_
+//#define _di_fll_error_file_type_file_s_
+//#define _di_fll_error_file_type_link_s_
+//#define _di_fll_error_file_type_path_s_
+//#define _di_fll_error_file_type_pipe_s_
+//#define _di_fll_error_file_type_s_
+//#define _di_fll_error_file_type_socket_s_
+#define _di_fll_error_parameter_integer_print_
+//#define _di_fll_error_print_
+#define _di_fll_execute_arguments_add_
+#define _di_fll_execute_arguments_add_parameter_
+#define _di_fll_execute_arguments_add_parameter_set_
+#define _di_fll_execute_arguments_add_set_
+#define _di_fll_execute_into_
+//#define _di_fll_execute_program_
+#define _di_fll_file_mode_set_all_
+#define _di_fll_file_role_change_all_
+//#define _di_fll_fss_basic_list_read_
+#define _di_fll_fss_basic_list_write_
+//#define _di_fll_fss_basic_read_
+#define _di_fll_fss_basic_write_
+#define _di_fll_fss_embedded_list_read_
+#define _di_fll_fss_embedded_list_write_
+#define _di_fll_fss_extended_list_read_
+#define _di_fll_fss_extended_list_write_
+//#define _di_fll_fss_extended_read_
+#define _di_fll_fss_extended_write_
+#define _di_fll_fss_identify_
+#define _di_fll_fss_payload_read_
+#define _di_fll_fss_payload_write_
+#define _di_fll_fss_snatch_
+#define _di_fll_fss_snatch_apart_
+#define _di_fll_fss_snatch_map_
+#define _di_fll_fss_snatch_map_apart_
+#define _di_fll_fss_snatch_map_mash_
+#define _di_fll_fss_snatch_map_mash_apart_
+#define _di_fll_fss_snatch_map_together_
+#define _di_fll_fss_snatch_mash_
+#define _di_fll_fss_snatch_mash_apart_
+#define _di_fll_fss_snatch_together_
+#define _di_fll_fss_status_codes_
+#define _di_fll_fss_status_error_
+#define _di_fll_fss_status_string_
+#define _di_fll_fss_status_string_from_
+#define _di_fll_fss_status_string_to_
+#define _di_fll_fss_status_success_
+#define _di_fll_fss_status_warning_
+#define _di_fll_iki_content_escape_
+#define _di_fll_iki_content_partial_escape_
+#define _di_fll_iki_content_partial_unescape_
+#define _di_fll_iki_content_unescape_
+#define _di_fll_print_
+#define _di_fll_print_character_
+#define _di_fll_print_character_safely_
+#define _di_fll_print_dynamic_
+#define _di_fll_print_dynamic_partial_
+#define _di_fll_print_dynamic_partial_raw_
+#define _di_fll_print_dynamic_partial_raw_safely_
+#define _di_fll_print_dynamic_partial_safely_
+//#define _di_fll_print_dynamic_raw_
+#define _di_fll_print_dynamic_raw_safely_
+#define _di_fll_print_dynamic_safely_
+#define _di_fll_print_except_
+#define _di_fll_print_except_dynamic_
+#define _di_fll_print_except_dynamic_partial_
+#define _di_fll_print_except_dynamic_partial_raw_
+#define _di_fll_print_except_dynamic_partial_raw_safely_
+#define _di_fll_print_except_dynamic_partial_safely_
+#define _di_fll_print_except_dynamic_raw_
+#define _di_fll_print_except_dynamic_raw_safely_
+#define _di_fll_print_except_dynamic_safely_
+#define _di_fll_print_except_in_
+#define _di_fll_print_except_in_dynamic_
+#define _di_fll_print_except_in_dynamic_partial_
+#define _di_fll_print_except_in_dynamic_partial_raw_
+#define _di_fll_print_except_in_dynamic_partial_raw_safely_
+#define _di_fll_print_except_in_dynamic_partial_safely_
+#define _di_fll_print_except_in_dynamic_raw_
+#define _di_fll_print_except_in_dynamic_raw_safely_
+#define _di_fll_print_except_in_dynamic_safely_
+#define _di_fll_print_except_in_raw_
+#define _di_fll_print_except_in_raw_safely_
+#define _di_fll_print_except_in_safely_
+#define _di_fll_print_except_raw_
+#define _di_fll_print_except_raw_safely_
+#define _di_fll_print_except_safely_
+//#define _di_fll_print_format_
+#define _di_fll_print_format_convert_
+#define _di_fll_print_raw_
+#define _di_fll_print_raw_safely_
+#define _di_fll_print_raw_terminated_
+#define _di_fll_print_safely_
+#define _di_fll_print_safely_terminated_
+#define _di_fll_print_string_va_
+#define _di_fll_print_terminated_
+#define _di_fll_print_trim_
+#define _di_fll_print_trim_dynamic_
+#define _di_fll_print_trim_dynamic_partial_
+#define _di_fll_print_trim_dynamic_partial_raw_
+#define _di_fll_print_trim_dynamic_partial_raw_safely_
+#define _di_fll_print_trim_dynamic_partial_safely_
+#define _di_fll_print_trim_dynamic_raw_
+#define _di_fll_print_trim_dynamic_raw_safely_
+#define _di_fll_print_trim_dynamic_safely_
+#define _di_fll_print_trim_except_
+#define _di_fll_print_trim_except_dynamic_
+#define _di_fll_print_trim_except_dynamic_partial_
+#define _di_fll_print_trim_except_dynamic_partial_raw_
+#define _di_fll_print_trim_except_dynamic_partial_raw_safely_
+#define _di_fll_print_trim_except_dynamic_partial_safely_
+#define _di_fll_print_trim_except_dynamic_raw_
+#define _di_fll_print_trim_except_dynamic_raw_safely_
+#define _di_fll_print_trim_except_dynamic_safely_
+#define _di_fll_print_trim_except_in_
+#define _di_fll_print_trim_except_in_dynamic_
+#define _di_fll_print_trim_except_in_dynamic_partial_
+#define _di_fll_print_trim_except_in_dynamic_partial_raw_
+#define _di_fll_print_trim_except_in_dynamic_partial_raw_safely_
+#define _di_fll_print_trim_except_in_dynamic_partial_safely_
+#define _di_fll_print_trim_except_in_dynamic_raw_
+#define _di_fll_print_trim_except_in_dynamic_raw_safely_
+#define _di_fll_print_trim_except_in_dynamic_safely_
+#define _di_fll_print_trim_except_in_raw_
+#define _di_fll_print_trim_except_in_raw_safely_
+#define _di_fll_print_trim_except_in_safely_
+#define _di_fll_print_trim_except_raw_
+#define _di_fll_print_trim_except_raw_safely_
+#define _di_fll_print_trim_except_safely_
+#define _di_fll_print_trim_raw_
+#define _di_fll_print_trim_raw_safely_
+#define _di_fll_print_trim_safely_
+//#define _di_fll_program_data_delete_
+#define _di_fll_program_data_destroy_
+//#define _di_fll_program_data_pipe_e_
+//#define _di_fll_program_data_t_
+#define _di_fll_program_parameter_additional_append_
+#define _di_fll_program_parameter_additional_mash_
+#define _di_fll_program_parameter_additional_rip_
+#define _di_fll_program_parameter_additional_rip_mash_
+#define _di_fll_program_parameter_filename_s_
+#define _di_fll_program_parameter_filenames_s_
+#define _di_fll_program_parameter_process_context_
+//#define _di_fll_program_parameter_process_context_standard_
+#define _di_fll_program_parameter_process_empty_
+#define _di_fll_program_parameter_process_verbosity_
+//#define _di_fll_program_parameter_process_verbosity_standard_
+#define _di_fll_program_parameter_s_
+//#define _di_fll_program_print_copyright_
+#define _di_fll_program_print_error_missing_file_
+#define _di_fll_program_print_error_missing_variable_not_zero_
+#define _di_fll_program_print_error_parameter_allows_either_xor_
+#define _di_fll_program_print_error_parameter_both_specified_same_amount_
+#define _di_fll_program_print_error_parameter_both_specified_same_amount_without_
+#define _di_fll_program_print_error_parameter_cannot_use_with_
+#define _di_fll_program_print_error_parameter_cannot_use_with_pipe_
+#define _di_fll_program_print_error_parameter_cannot_use_with_without_
+#define _di_fll_program_print_error_parameter_cannot_use_with_xor_
+#define _di_fll_program_print_error_parameter_empty_value_
+#define _di_fll_program_print_error_parameter_integer_less_than_
+#define _di_fll_program_print_error_parameter_integer_more_than_
+#define _di_fll_program_print_error_parameter_integer_not_
+#define _di_fll_program_print_error_parameter_integer_not_negative_
+#define _di_fll_program_print_error_parameter_integer_not_positive_
+#define _di_fll_program_print_error_parameter_missing_value_
+#define _di_fll_program_print_error_parameter_missing_value_requires_amount_
+#define _di_fll_program_print_error_parameter_must_specify_once_
+#define _di_fll_program_print_error_parameter_must_specify_once_value_
+#define _di_fll_program_print_error_parameter_process_
+#define _di_fll_program_print_error_parameter_range_start_before_stop_
+#define _di_fll_program_print_error_parameter_value_too_long_
+#define _di_fll_program_print_error_pipe_invalid_form_feed_
+#define _di_fll_program_print_error_pipe_missing_content_
+#define _di_fll_program_print_error_pipe_object_without_content_
+//#define _di_fll_program_print_help_header_
+//#define _di_fll_program_print_help_operations_
+//#define _di_fll_program_print_help_option_
+//#define _di_fll_program_print_help_option_long_
+//#define _di_fll_program_print_help_option_other_
+//#define _di_fll_program_print_help_option_standard_
+//#define _di_fll_program_print_help_special_options_
+//#define _di_fll_program_print_help_usage_
+//#define _di_fll_program_print_signal_received_
+//#define _di_fll_program_print_version_
+//#define _di_fll_program_standard_set_down_
+//#define _di_fll_program_standard_set_up_
+#define _di_fll_program_standard_signal_handle_
+//#define _di_fll_program_standard_signal_received_
+#define _di_fl_path_canonical_
+//#define _di_fl_print_debug_s_
+//#define _di_fl_print_error_s_
+//#define _di_fl_print_format_
+#define _di_fl_print_format_convert_
+//#define _di_fl_print_s_
+//#define _di_fl_print_string_va_
+//#define _di_fl_print_t_
+#define _di_fl_print_trim_
+#define _di_fl_print_trim_dynamic_
+#define _di_fl_print_trim_dynamic_partial_
+#define _di_fl_print_trim_dynamic_partial_raw_
+#define _di_fl_print_trim_dynamic_partial_raw_safely_
+#define _di_fl_print_trim_dynamic_partial_safely_
+#define _di_fl_print_trim_dynamic_raw_
+#define _di_fl_print_trim_dynamic_raw_safely_
+#define _di_fl_print_trim_dynamic_safely_
+#define _di_fl_print_trim_except_
+#define _di_fl_print_trim_except_dynamic_
+#define _di_fl_print_trim_except_dynamic_partial_
+#define _di_fl_print_trim_except_dynamic_partial_raw_
+#define _di_fl_print_trim_except_dynamic_partial_raw_safely_
+#define _di_fl_print_trim_except_dynamic_partial_safely_
+#define _di_fl_print_trim_except_dynamic_raw_
+#define _di_fl_print_trim_except_dynamic_raw_safely_
+#define _di_fl_print_trim_except_dynamic_safely_
+#define _di_fl_print_trim_except_in_
+#define _di_fl_print_trim_except_in_dynamic_
+#define _di_fl_print_trim_except_in_dynamic_partial_
+#define _di_fl_print_trim_except_in_dynamic_partial_raw_
+#define _di_fl_print_trim_except_in_dynamic_partial_raw_safely_
+#define _di_fl_print_trim_except_in_dynamic_partial_safely_
+#define _di_fl_print_trim_except_in_dynamic_raw_
+#define _di_fl_print_trim_except_in_dynamic_raw_safely_
+#define _di_fl_print_trim_except_in_dynamic_safely_
+#define _di_fl_print_trim_except_in_raw_
+#define _di_fl_print_trim_except_in_raw_safely_
+#define _di_fl_print_trim_except_in_safely_
+#define _di_fl_print_trim_except_raw_
+#define _di_fl_print_trim_except_raw_safely_
+#define _di_fl_print_trim_except_safely_
+#define _di_fl_print_trim_raw_
+#define _di_fl_print_trim_raw_safely_
+#define _di_fl_print_trim_safely_
+//#define _di_fl_print_warning_s_
+#define _di_fl_status_string_from_
+#define _di_fl_utf_file_read_
+#define _di_fl_utf_file_read_block_
+#define _di_fl_utf_file_read_range_
+#define _di_fl_utf_file_read_until_
+#define _di_fl_utf_file_write_
+#define _di_fl_utf_file_write_block_
+#define _di_fl_utf_file_write_range_
+#define _di_fl_utf_file_write_until_
+#define _di_f_memory_adjust_
+#define _di_f_memory_array_adjust_
+#define _di_f_memory_array_append_
+#define _di_f_memory_array_append_all_
+#define _di_f_memory_array_decimate_by_
+#define _di_f_memory_array_decrease_by_
+//#define _di_f_memory_array_increase_
+//#define _di_f_memory_array_increase_by_
+//#define _di_f_memory_array_resize_
+#define _di_f_memory_arrays_adjust_
+//#define _di_f_memory_arrays_resize_
+//#define _di_f_memory_default_d_
+//#define _di_f_memory_delete_
+#define _di_f_memory_destroy_
+#define _di_f_memory_new_
+#define _di_f_memory_new_aligned_
+//#define _di_f_memory_resize_
+//#define _di_f_mode_t_
+#define _di_f_network_family_e_
+#define _di_f_network_family_ip_4_or_6_t_
+#define _di_f_network_family_ip_t_
+#define _di_f_network_from_host_long_
+#define _di_f_network_from_host_short_
+#define _di_f_network_from_ip_address_
+#define _di_f_network_from_ip_name_
+#define _di_f_network_from_ip_string_
+#define _di_f_network_is_ip_address_
+#define _di_f_network_to_host_long_
+#define _di_f_network_to_host_short_
+#define _di_f_network_to_ip_string_
+#define _di_f_number_signedss_delete_callback_
+#define _di_f_number_signedss_destroy_callback_
+#define _di_f_number_signedss_t_
+#define _di_f_number_signeds_t_
+#define _di_f_number_unsignedss_delete_callback_
+#define _di_f_number_unsignedss_destroy_callback_
+#define _di_f_number_unsignedss_t_
+//#define _di_f_number_unsigneds_t_
+#define _di_f_parse_dynamic_partial_fll_identify_
+#define _di_f_parse_dynamic_seek_line_to_utf_character_
+#define _di_f_parse_dynamic_seek_line_until_graph_
+#define _di_f_parse_dynamic_seek_line_until_graph_non_
+#define _di_f_parse_dynamic_seek_to_utf_character_
+#define _di_f_parse_seek_line_to_utf_character_
+#define _di_f_parse_seek_line_until_graph_
+#define _di_f_parse_seek_line_until_graph_non_
+#define _di_f_parse_seek_to_utf_character_
+#define _di_f_parse_utf_dynamic_seek_line_to_char_
+#define _di_f_parse_utf_dynamic_seek_line_until_graph_
+#define _di_f_parse_utf_dynamic_seek_line_until_graph_non_
+#define _di_f_parse_utf_dynamic_seek_to_char_
+#define _di_f_parse_utf_seek_line_to_char_
+#define _di_f_parse_utf_seek_line_until_graph_
+#define _di_f_parse_utf_seek_line_until_graph_non_
+#define _di_f_parse_utf_seek_to_char_
+#define _di_f_parse_utf_seek_to_character_
+#define _di_f_path_change_
+#define _di_f_path_change_at_
+#define _di_f_path_current_
+//#define _di_f_path_d_
+//#define _di_f_path_environment_s_
+#define _di_f_path_extension_separator_s_
+#define _di_f_path_home_s_
+#define _di_f_path_home_wildcard_s_
+#define _di_f_path_is_
+#define _di_f_path_is_absolute_
+#define _di_f_path_is_relative_
+#define _di_f_path_is_relative_current_
+#define _di_f_path_present_working_old_s_
+#define _di_f_path_present_working_s_
+#define _di_f_path_real_
+//#define _di_f_path_s_
+#define _di_f_path_separator_current_s_
+//#define _di_f_path_separator_s_
+//#define _di_f_path_separator_variable_s_
+#define _di_f_path_tree_binary_s_
+#define _di_f_path_tree_boot_s_
+#define _di_f_path_tree_devices_s_
+#define _di_f_path_tree_external_s_
+#define _di_f_path_tree_hardware_s_
+#define _di_f_path_tree_hierarchy_standard_d_
+#define _di_f_path_tree_home_s_
+#define _di_f_path_tree_home_services_s_
+#define _di_f_path_tree_home_share_s_
+#define _di_f_path_tree_home_users_s_
+#define _di_f_path_tree_home_websites_s_
+#define _di_f_path_tree_kevux_standard_d_
+#define _di_f_path_tree_libraries_boot_s_
+#define _di_f_path_tree_libraries_public_s_
+#define _di_f_path_tree_libraries_remote_s_
+#define _di_f_path_tree_libraries_s_
+#define _di_f_path_tree_libraries_services_s_
+#define _di_f_path_tree_libraries_system_s_
+#define _di_f_path_tree_libraries_toolchain_s_
+#define _di_f_path_tree_libraries_users_s_
+#define _di_f_path_tree_processes_s_
+#define _di_f_path_tree_programs_boot_s_
+#define _di_f_path_tree_programs_public_s_
+#define _di_f_path_tree_programs_remote_s_
+#define _di_f_path_tree_programs_s_
+#define _di_f_path_tree_programs_sboot_s_
+#define _di_f_path_tree_programs_services_s_
+#define _di_f_path_tree_programs_susers_s_
+#define _di_f_path_tree_programs_system_s_
+#define _di_f_path_tree_programs_toolchain_s_
+#define _di_f_path_tree_programs_users_s_
+#define _di_f_path_tree_run_s_
+#define _di_f_path_tree_s_
+#define _di_f_path_tree_system_data_s_
+#define _di_f_path_tree_system_logs_s_
+#define _di_f_path_tree_system_s_
+#define _di_f_path_tree_system_settings_s_
+#define _di_f_path_tree_system_variables_s_
+#define _di_f_path_tree_temporary_public_s_
+#define _di_f_path_tree_temporary_s_
+#define _di_f_path_tree_temporary_services_s_
+#define _di_f_path_tree_temporary_users_s_
+#define _di_f_path_tree_temporary_variables_s_
+#define _di_f_path_user_data_s_
+#define _di_f_path_user_desktop_s_
+#define _di_f_path_user_downloads_s_
+#define _di_f_path_user_private_s_
+#define _di_f_path_user_settings_s_
+#define _di_f_path_user_shared_s_
+#define _di_f_path_user_temporary_s_
+#define _di_f_pipe_error_exists_
+//#define _di_f_pipe_input_exists_
+#define _di_f_pipe_output_exists_
+#define _di_f_poll_e_
+#define _di_f_pollss_delete_callback_
+#define _di_f_pollss_destroy_callback_
+#define _di_f_pollss_t_
+#define _di_f_polls_t_
+//#define _di_f_poll_t_
+//#define _di_f_print_
+#define _di_f_print_character_
+#define _di_f_print_character_safely_
+#define _di_f_print_character_safely_get_
+//#define _di_f_print_dynamic_
+#define _di_f_print_dynamic_partial_
+#define _di_f_print_dynamic_partial_raw_
+#define _di_f_print_dynamic_partial_raw_safely_
+#define _di_f_print_dynamic_partial_safely_
+#define _di_f_print_dynamic_partial_to_
+#define _di_f_print_dynamic_partial_to_raw_
+#define _di_f_print_dynamic_partial_to_raw_safely_
+#define _di_f_print_dynamic_partial_to_safely_
+//#define _di_f_print_dynamic_raw_
+//#define _di_f_print_dynamic_raw_safely_
+//#define _di_f_print_dynamic_safely_
+#define _di_f_print_dynamic_to_
+#define _di_f_print_dynamic_to_raw_
+#define _di_f_print_except_
+#define _di_f_print_except_dynamic_
+#define _di_f_print_except_dynamic_partial_
+#define _di_f_print_except_dynamic_partial_raw_
+#define _di_f_print_except_dynamic_partial_raw_safely_
+#define _di_f_print_except_dynamic_partial_safely_
+#define _di_f_print_except_dynamic_raw_
+#define _di_f_print_except_dynamic_raw_safely_
+#define _di_f_print_except_dynamic_safely_
+//#define _di_f_print_except_in_
+//#define _di_f_print_except_in_dynamic_
+#define _di_f_print_except_in_dynamic_partial_
+#define _di_f_print_except_in_dynamic_partial_raw_
+#define _di_f_print_except_in_dynamic_partial_raw_safely_
+#define _di_f_print_except_in_dynamic_partial_safely_
+//#define _di_f_print_except_in_dynamic_raw_
+//#define _di_f_print_except_in_dynamic_raw_safely_
+//#define _di_f_print_except_in_dynamic_safely_
+//#define _di_f_print_except_in_raw_
+//#define _di_f_print_except_in_raw_safely_
+//#define _di_f_print_except_in_safely_
+#define _di_f_print_except_raw_
+#define _di_f_print_except_raw_safely_
+#define _di_f_print_except_safely_
+//#define _di_f_print_format_flag_d_
+//#define _di_f_print_format_type_e_
+//#define _di_f_print_raw_
+//#define _di_f_print_raw_safely_
+#define _di_f_print_raw_terminated_
+//#define _di_f_print_safely_
+#define _di_f_print_safely_get_
+//#define _di_f_print_safely_terminated_
+//#define _di_f_print_sequence_acknowledge_negative_s_
+//#define _di_f_print_sequence_acknowledge_s_
+//#define _di_f_print_sequence_backspace_s_
+//#define _di_f_print_sequence_bell_s_
+//#define _di_f_print_sequence_cancel_s_
+//#define _di_f_print_sequence_carriage_return_s_
+//#define _di_f_print_sequence_data_link_escape_s_
+//#define _di_f_print_sequence_delete_s_
+//#define _di_f_print_sequence_device_control_1_s_
+//#define _di_f_print_sequence_device_control_2_s_
+//#define _di_f_print_sequence_device_control_3_s_
+//#define _di_f_print_sequence_device_control_4_s_
+//#define _di_f_print_sequence_end_of_medium_s_
+//#define _di_f_print_sequence_end_of_text_s_
+//#define _di_f_print_sequence_end_of_transmission_block_s_
+//#define _di_f_print_sequence_end_of_transmission_s_
+//#define _di_f_print_sequence_enquiry_s_
+//#define _di_f_print_sequence_escape_s_
+//#define _di_f_print_sequence_form_feed_s_
+//#define _di_f_print_sequence_line_feed_s_
+//#define _di_f_print_sequence_line_new_s_
+//#define _di_f_print_sequence_null_s_
+//#define _di_f_print_sequence_s_
+//#define _di_f_print_sequence_separator_file_s_
+//#define _di_f_print_sequence_separator_group_s_
+//#define _di_f_print_sequence_separator_record_s_
+//#define _di_f_print_sequence_separator_unit_s_
+//#define _di_f_print_sequence_shift_in_s_
+//#define _di_f_print_sequence_shift_out_s_
+//#define _di_f_print_sequence_space_s_
+//#define _di_f_print_sequences_set_control_s_
+//#define _di_f_print_sequence_start_of_header_s_
+//#define _di_f_print_sequence_start_of_text_s_
+//#define _di_f_print_sequence_substitute_s_
+//#define _di_f_print_sequence_synchronous_idle_s_
+//#define _di_f_print_sequence_tab_s_
+//#define _di_f_print_sequence_tab_vertical_s_
+//#define _di_f_print_sequence_unknown_s_
+//#define _di_f_print_terminated_
+#define _di_f_print_to_
+#define _di_f_print_to_character_
+#define _di_f_print_to_character_safely_
+#define _di_f_print_to_dynamic_
+#define _di_f_print_to_dynamic_partial_
+#define _di_f_print_to_dynamic_partial_raw_
+#define _di_f_print_to_dynamic_partial_raw_safely_
+#define _di_f_print_to_dynamic_partial_safely_
+#define _di_f_print_to_dynamic_raw_
+#define _di_f_print_to_dynamic_raw_safely_
+#define _di_f_print_to_dynamic_safely_
+#define _di_f_print_to_except_
+#define _di_f_print_to_except_dynamic_
+#define _di_f_print_to_except_dynamic_in_
+#define _di_f_print_to_except_dynamic_in_raw_
+#define _di_f_print_to_except_dynamic_in_raw_safely_
+#define _di_f_print_to_except_dynamic_in_safely_
+#define _di_f_print_to_except_dynamic_partial_
+#define _di_f_print_to_except_dynamic_partial_raw_
+#define _di_f_print_to_except_dynamic_partial_raw_safely_
+#define _di_f_print_to_except_dynamic_partial_safely_
+#define _di_f_print_to_except_dynamic_raw_
+#define _di_f_print_to_except_dynamic_raw_safely_
+#define _di_f_print_to_except_dynamic_safely_
+#define _di_f_print_to_except_in_
+#define _di_f_print_to_except_in_dynamic_
+#define _di_f_print_to_except_in_dynamic_partial_
+#define _di_f_print_to_except_in_dynamic_partial_raw_
+#define _di_f_print_to_except_in_dynamic_partial_raw_safely_
+#define _di_f_print_to_except_in_dynamic_partial_safely_
+#define _di_f_print_to_except_in_dynamic_raw_
+#define _di_f_print_to_except_in_dynamic_raw_safely_
+#define _di_f_print_to_except_in_dynamic_safely_
+#define _di_f_print_to_except_in_raw_
+#define _di_f_print_to_except_in_raw_safely_
+#define _di_f_print_to_except_in_safely_
+#define _di_f_print_to_except_raw_
+#define _di_f_print_to_except_raw_safely_
+#define _di_f_print_to_except_safely_
+#define _di_f_print_to_raw_
+#define _di_f_print_to_raw_safely_
+#define _di_f_print_to_raw_terminated_
+#define _di_f_print_to_safely_
+#define _di_f_print_to_safely_dynamic_
+#define _di_f_print_to_safely_dynamic_partial_
+#define _di_f_print_to_safely_terminated_
+#define _di_f_print_to_terminated_
+//#define _di_f_print_write_max_d_
+#define _di_f_quantity_empty_c_
+#define _di_f_quantitys_append_
+#define _di_f_quantitys_append_all_
+#define _di_f_quantityss_append_
+#define _di_f_quantityss_append_all_
+#define _di_f_quantityss_delete_callback_
+#define _di_f_quantityss_destroy_callback_
+#define _di_f_quantityss_t_
+#define _di_f_quantitys_t_
+#define _di_f_quantity_t_
+#define _di_f_random_get_
+#define _di_f_random_read_
+#define _di_f_random_seed_
+#define _di_f_random_seed_flag_d_
+#define _di_f_random_seed_set_
+#define _di_f_range_double_empty_c_
+#define _di_f_range_doubles_append_
+#define _di_f_range_doubles_append_all_
+#define _di_f_range_doubless_append_
+#define _di_f_range_doubless_append_all_
+#define _di_f_range_doubless_delete_callback_
+#define _di_f_range_doubless_destroy_callback_
+#define _di_f_range_doubless_t_
+#define _di_f_range_doubles_t_
+#define _di_f_range_double_t_
+#define _di_f_range_empty_c_
+#define _di_f_ranges_append_
+#define _di_f_ranges_append_all_
+#define _di_f_rangess_append_
+#define _di_f_rangess_append_all_
+//#define _di_f_rangess_delete_callback_
+#define _di_f_rangess_destroy_callback_
+//#define _di_f_rangess_t_
+//#define _di_f_ranges_t_
+//#define _di_f_range_t_
+#define _di_f_rip_
+#define _di_f_rip_dynamic_
+#define _di_f_rip_dynamic_nulless_
+#define _di_f_rip_dynamic_partial_
+#define _di_f_rip_dynamic_partial_nulless_
+#define _di_f_rip_nulless_
+#define _di_f_rip_utf_
+#define _di_f_rip_utf_dynamic_
+#define _di_f_rip_utf_dynamic_nulless_
+#define _di_f_rip_utf_nulless_
+#define _di_f_serialize_delimited_delimiter_s_
+#define _di_f_serialize_delimited_splitter_s_
+#define _di_f_serialize_from_simple_
+#define _di_f_serialize_from_simple_get_
+#define _di_f_serialize_from_simple_range_
+#define _di_f_serialize_from_simple_select_
+#define _di_f_serialize_splitter_s_
+#define _di_f_serialize_to_simple_
+#define _di_f_serialize_to_simple_splitter_s_
+#define _di_f_signal_action_
+//#define _di_f_signal_close_
+//#define _di_f_signal_how_t_
+//#define _di_f_signal_mask_
+//#define _di_f_signal_open_
+#define _di_f_signal_pause_
+#define _di_f_signal_queue_
+//#define _di_f_signal_read_
+#define _di_f_signal_send_
+//#define _di_f_signal_set_add_
+//#define _di_f_signal_set_delete_
+//#define _di_f_signal_set_empty_
+//#define _di_f_signal_set_fill_
+#define _di_f_signal_set_has_
+#define _di_f_signal_suspend_
+//#define _di_f_signal_t_
+//#define _di_f_signal_wait_
+#define _di_f_signal_wait_until_
+#define _di_f_socket_accept_
+#define _di_f_socket_address_family_e_
+#define _di_f_socket_address_form_e_
+#define _di_f_socket_addressss_delete_callback_
+#define _di_f_socket_addressss_destroy_callback_
+#define _di_f_socket_addressss_t_
+#define _di_f_socket_addresss_t_
+#define _di_f_socket_address_t_
+#define _di_f_socket_bind_
+#define _di_f_socket_close_e_
+#define _di_f_socket_connect_
+#define _di_f_socket_create_
+#define _di_f_socket_create_pair_
+#define _di_f_socket_default_d_
+#define _di_f_socket_disconnect_
+#define _di_f_socket_flag_e_
+#define _di_f_socket_host_name_
+#define _di_f_socket_level_e_
+#define _di_f_socket_listen_
+#define _di_f_socket_message_flag_e_
+#define _di_f_socket_name_host_
+#define _di_f_socket_name_peer_
+#define _di_f_socket_option_e_
+#define _di_f_socket_option_get_
+#define _di_f_socket_option_set_
+#define _di_f_socket_protocol_e_
+#define _di_f_socket_protocol_family_e_
+#define _di_f_socket_read_
+#define _di_f_socket_read_message_
+#define _di_f_socket_read_stream_
+#define _di_f_socketss_delete_callback_
+#define _di_f_socketss_destroy_callback_
+#define _di_f_socketss_t_
+#define _di_f_sockets_t_
+#define _di_f_socket_t_
+#define _di_f_socket_type_e_
+#define _di_f_socket_write_
+#define _di_f_socket_write_message_
+#define _di_f_socket_write_stream_
+#define _di_f_statess_delete_callback_
+#define _di_f_statess_destroy_callback_
+#define _di_f_statess_t_
+#define _di_f_states_t_
+//#define _di_f_state_t_
+#define _di_f_status_directory_s_
+//#define _di_f_status_e_
+//#define _di_f_status_mask_d_
+#define _di_f_statusss_delete_callback_
+#define _di_f_statusss_destroy_callback_
+#define _di_f_statusss_t_
+#define _di_f_statuss_t_
+#define _di_f_status_string_s_
+#define _di_f_status_string_to_
+//#define _di_f_status_t_
+#define _di_f_string_append_
+#define _di_f_string_append_assure_
+#define _di_f_string_append_assure_nulless_
+#define _di_f_string_append_nulless_
+//#define _di_f_string_ascii_s_
+#define _di_f_string_constant_t_
+//#define _di_f_string_dynamic_append_
+//#define _di_f_string_dynamic_append_assure_
+#define _di_f_string_dynamic_append_assure_nulless_
+#define _di_f_string_dynamic_append_nulless_
+#define _di_f_string_dynamic_mash_
+#define _di_f_string_dynamic_mash_nulless_
+#define _di_f_string_dynamic_mish_
+#define _di_f_string_dynamic_mish_nulless_
+//#define _di_f_string_dynamic_partial_append_
+#define _di_f_string_dynamic_partial_append_assure_
+#define _di_f_string_dynamic_partial_append_assure_nulless_
+//#define _di_f_string_dynamic_partial_append_nulless_
+#define _di_f_string_dynamic_partial_mash_
+#define _di_f_string_dynamic_partial_mash_nulless_
+#define _di_f_string_dynamic_partial_mish_
+#define _di_f_string_dynamic_partial_mish_nulless_
+#define _di_f_string_dynamic_partial_prepend_
+#define _di_f_string_dynamic_partial_prepend_assure_
+#define _di_f_string_dynamic_partial_prepend_assure_nulless
+#define _di_f_string_dynamic_partial_prepend_assure_nulless_
+#define _di_f_string_dynamic_partial_prepend_nulless
+#define _di_f_string_dynamic_partial_prepend_nulless_
+#define _di_f_string_dynamic_prepend_
+#define _di_f_string_dynamic_prepend_assure_
+#define _di_f_string_dynamic_prepend_assure_nulless_
+#define _di_f_string_dynamic_prepend_nulless_
+#define _di_f_string_dynamics_append_
+#define _di_f_string_dynamics_append_all_
+//#define _di_f_string_dynamics_delete_callback_
+#define _di_f_string_dynamics_destroy_callback_
+#define _di_f_string_dynamic_seek_line_
+#define _di_f_string_dynamic_seek_line_to_
+#define _di_f_string_dynamic_seek_to_
+#define _di_f_string_dynamicss_append_
+#define _di_f_string_dynamicss_append_all_
+#define _di_f_string_dynamicss_delete_callback_
+#define _di_f_string_dynamicss_destroy_callback_
+#define _di_f_string_dynamicss_t_
+//#define _di_f_string_dynamics_t_
+#define _di_f_string_dynamic_strip_null_
+#define _di_f_string_dynamic_strip_null_range_
+//#define _di_f_string_dynamic_t_
+#define _di_f_string_dynamic_terminate_
+//#define _di_f_string_dynamic_terminate_after_
+//#define _di_f_string_empty_s_
+//#define _di_f_string_eol_s_
+//#define _di_f_string_format_s_
+#define _di_f_string_map_multis_append_
+#define _di_f_string_map_multis_append_all_
+#define _di_f_string_map_multis_delete_callback_
+#define _di_f_string_map_multis_destroy_callback_
+#define _di_f_string_map_multiss_append_
+#define _di_f_string_map_multiss_append_all_
+#define _di_f_string_map_multiss_delete_callback_
+#define _di_f_string_map_multiss_destroy_callback_
+#define _di_f_string_map_multiss_t_
+#define _di_f_string_map_multis_t_
+#define _di_f_string_map_multi_t_
+#define _di_f_string_maps_append_
+#define _di_f_string_maps_append_all_
+#define _di_f_string_maps_delete_callback_
+#define _di_f_string_maps_destroy_callback_
+#define _di_f_string_mapss_append_
+#define _di_f_string_mapss_append_all_
+#define _di_f_string_mapss_delete_callback_
+#define _di_f_string_mapss_destroy_callback_
+#define _di_f_string_mapss_t_
+//#define _di_f_string_maps_t_
+//#define _di_f_string_map_t_
+#define _di_f_string_mash_
+#define _di_f_string_mash_nulless_
+#define _di_f_string_mish_
+#define _di_f_string_mish_nulless_
+//#define _di_f_string_null_s_
+//#define _di_f_string_placeholder_s_
+#define _di_f_string_prepend_
+#define _di_f_string_prepend_assure_
+#define _di_f_string_prepend_assure_nulless_
+#define _di_f_string_prepend_nulless_
+#define _di_f_string_seek_line_
+#define _di_f_string_seek_line_to_
+#define _di_f_string_seek_to_
+#define _di_f_string_space_s_
+#define _di_f_string_staticss_t_
+//#define _di_f_string_statics_t_
+//#define _di_f_string_static_t_
+//#define _di_f_string_t_
+#define _di_f_string_triples_append_
+#define _di_f_string_triples_append_all_
+#define _di_f_string_triples_delete_callback_
+#define _di_f_string_triples_destroy_callback_
+#define _di_f_string_tripless_append_
+#define _di_f_string_tripless_append_all_
+#define _di_f_string_tripless_delete_callback_
+#define _di_f_string_tripless_destroy_callback_
+#define _di_f_string_tripless_t_
+#define _di_f_string_triples_t_
+#define _di_f_string_triple_t_
+#define _di_f_thread_at_fork_
+#define _di_f_thread_attribute_affinity_get_
+#define _di_f_thread_attribute_affinity_set_
+#define _di_f_thread_attribute_concurrency_get_
+#define _di_f_thread_attribute_concurrency_set_
+#define _di_f_thread_attribute_create_
+#define _di_f_thread_attribute_default_get_
+#define _di_f_thread_attribute_default_set_
+#define _di_f_thread_attribute_delete_
+#define _di_f_thread_attribute_detach_get_
+#define _di_f_thread_attribute_detach_set_
+#define _di_f_thread_attribute_guard_get_
+#define _di_f_thread_attribute_guard_set_
+#define _di_f_thread_attribute_scheduler_inherit_get_
+#define _di_f_thread_attribute_scheduler_inherit_set_
+#define _di_f_thread_attribute_scheduler_parameter_get_
+#define _di_f_thread_attribute_scheduler_parameter_set_
+#define _di_f_thread_attribute_scheduler_policy_get_
+#define _di_f_thread_attribute_scheduler_policy_set_
+#define _di_f_thread_attribute_scope_get_
+#define _di_f_thread_attribute_scope_set_
+#define _di_f_thread_attributes_delete_callback_
+#define _di_f_thread_attributes_destroy_callback_
+#define _di_f_thread_attributess_delete_callback_
+#define _di_f_thread_attributess_destroy_callback_
+#define _di_f_thread_attributes_t_
+#define _di_f_thread_attribute_stack_get_
+#define _di_f_thread_attribute_stack_set_
+#define _di_f_thread_attribute_stack_size_get_
+#define _di_f_thread_attribute_stack_size_set_
+//#define _di_f_thread_attribute_t_
+#define _di_f_thread_barrier_attribute_create_
+#define _di_f_thread_barrier_attribute_delete_
+#define _di_f_thread_barrier_attributes_delete_callback_
+#define _di_f_thread_barrier_attributes_destroy_callback_
+#define _di_f_thread_barrier_attribute_shared_get_
+#define _di_f_thread_barrier_attribute_shared_set_
+#define _di_f_thread_barrier_attributess_delete_callback_
+#define _di_f_thread_barrier_attributess_destroy_callback_
+#define _di_f_thread_barrier_attributes_t_
+#define _di_f_thread_barrier_attribute_t_
+#define _di_f_thread_barrier_create_
+#define _di_f_thread_barrier_delete_
+#define _di_f_thread_barriers_delete_callback_
+#define _di_f_thread_barriers_destroy_callback_
+#define _di_f_thread_barrierss_delete_callback_
+#define _di_f_thread_barrierss_destroy_callback_
+#define _di_f_thread_barriers_t_
+#define _di_f_thread_barrier_t_
+#define _di_f_thread_barrier_wait_
+#define _di_f_thread_caller_
+//#define _di_f_thread_cancel_
+//#define _di_f_thread_cancel_state_set_
+#define _di_f_thread_cancel_test_
+#define _di_f_thread_cancel_type_set_
+#define _di_f_thread_clock_get_id_
+#define _di_f_thread_compare_
+#define _di_f_thread_condition_attribute_clock_get_
+#define _di_f_thread_condition_attribute_clock_set_
+#define _di_f_thread_condition_attribute_create_
+#define _di_f_thread_condition_attribute_delete_
+#define _di_f_thread_condition_attributes_delete_callback_
+#define _di_f_thread_condition_attributes_destroy_callback_
+#define _di_f_thread_condition_attribute_shared_get_
+#define _di_f_thread_condition_attribute_shared_set_
+#define _di_f_thread_condition_attributess_delete_callback_
+#define _di_f_thread_condition_attributess_destroy_callback_
+#define _di_f_thread_condition_attributes_t_
+#define _di_f_thread_condition_attribute_t_
+#define _di_f_thread_condition_create_
+#define _di_f_thread_condition_delete_
+#define _di_f_thread_conditions_delete_callback_
+#define _di_f_thread_conditions_destroy_callback_
+#define _di_f_thread_condition_signal_
+#define _di_f_thread_condition_signal_all_
+#define _di_f_thread_conditionss_delete_callback_
+#define _di_f_thread_conditionss_destroy_callback_
+#define _di_f_thread_conditions_t_
+#define _di_f_thread_condition_t_
+#define _di_f_thread_condition_wait_
+#define _di_f_thread_condition_wait_timed_
+//#define _di_f_thread_create_
+#define _di_f_thread_detach_
+#define _di_f_thread_exit_
+#define _di_f_thread_ids_t_
+//#define _di_f_thread_id_t_
+//#define _di_f_thread_join_
+#define _di_f_thread_join_timed_
+#define _di_f_thread_join_try_
+#define _di_f_thread_key_create_
+#define _di_f_thread_key_delete_
+#define _di_f_thread_key_get_
+#define _di_f_thread_keys_delete_callback_
+#define _di_f_thread_keys_destroy_callback_
+#define _di_f_thread_key_set_
+#define _di_f_thread_keyss_delete_callback_
+#define _di_f_thread_keyss_destroy_callback_
+#define _di_f_thread_keys_t_
+#define _di_f_thread_key_t_
+#define _di_f_thread_lock_attribute_create_
+#define _di_f_thread_lock_attribute_delete_
+#define _di_f_thread_lock_attributes_delete_callback_
+#define _di_f_thread_lock_attributes_destroy_callback_
+#define _di_f_thread_lock_attribute_shared_get_
+#define _di_f_thread_lock_attribute_shared_set_
+#define _di_f_thread_lock_attributess_delete_callback_
+#define _di_f_thread_lock_attributess_destroy_callback_
+#define _di_f_thread_lock_attributes_t_
+#define _di_f_thread_lock_attribute_t_
+#define _di_f_thread_lock_create_
+#define _di_f_thread_lock_delete_
+#define _di_f_thread_lock_read_
+#define _di_f_thread_lock_read_timed_
+#define _di_f_thread_lock_read_try_
+#define _di_f_thread_locks_delete_callback_
+#define _di_f_thread_locks_destroy_callback_
+#define _di_f_thread_lockss_delete_callback_
+#define _di_f_thread_lockss_destroy_callback_
+#define _di_f_thread_locks_t_
+#define _di_f_thread_lock_t_
+#define _di_f_thread_lock_write_
+#define _di_f_thread_lock_write_timed_
+#define _di_f_thread_lock_write_try_
+#define _di_f_thread_mutex_attribute_create_
+#define _di_f_thread_mutex_attribute_delete_
+#define _di_f_thread_mutex_attribute_priority_ceiling_get_
+#define _di_f_thread_mutex_attribute_priority_ceiling_set_
+#define _di_f_thread_mutex_attribute_protocol_get_
+#define _di_f_thread_mutex_attribute_protocol_set_
+#define _di_f_thread_mutex_attributes_delete_callback_
+#define _di_f_thread_mutex_attributes_destroy_callback_
+#define _di_f_thread_mutex_attribute_shared_get_
+#define _di_f_thread_mutex_attribute_shared_set_
+#define _di_f_thread_mutex_attributess_delete_callback_
+#define _di_f_thread_mutex_attributess_destroy_callback_
+#define _di_f_thread_mutex_attributes_t_
+#define _di_f_thread_mutex_attribute_t_
+#define _di_f_thread_mutex_attribute_type_get_
+#define _di_f_thread_mutex_attribute_type_set_
+#define _di_f_thread_mutex_create_
+#define _di_f_thread_mutex_delete_
+#define _di_f_thread_mutex_lock_
+#define _di_f_thread_mutex_lock_timed_
+#define _di_f_thread_mutex_lock_try_
+#define _di_f_thread_mutex_priority_ceiling_get_
+#define _di_f_thread_mutex_priority_ceiling_set_
+#define _di_f_thread_mutexs_delete_callback_
+#define _di_f_thread_mutexs_destroy_callback_
+#define _di_f_thread_mutexss_delete_callback_
+#define _di_f_thread_mutexss_destroy_callback_
+#define _di_f_thread_mutexs_t_
+#define _di_f_thread_mutex_t_
+#define _di_f_thread_mutex_unlock_
+#define _di_f_thread_once_
+#define _di_f_thread_onces_t_
+#define _di_f_thread_once_t_
+#define _di_f_thread_scheduler_parameter_get_
+#define _di_f_thread_scheduler_parameter_set_
+#define _di_f_thread_scheduler_priority_set_
+#define _di_f_thread_semaphore_create_
+#define _di_f_thread_semaphore_delete_
+#define _di_f_thread_semaphore_file_close_
+#define _di_f_thread_semaphore_file_delete_
+#define _di_f_thread_semaphore_file_open_
+#define _di_f_thread_semaphore_lock_
+#define _di_f_thread_semaphore_lock_timed_
+#define _di_f_thread_semaphore_lock_try_
+#define _di_f_thread_semaphores_delete_callback_
+#define _di_f_thread_semaphores_destroy_callback_
+#define _di_f_thread_semaphoress_delete_callback_
+#define _di_f_thread_semaphoress_destroy_callback_
+#define _di_f_thread_semaphores_t_
+#define _di_f_thread_semaphore_t_
+#define _di_f_thread_semaphore_unlock_
+#define _di_f_thread_semaphore_value_get_
+#define _di_f_thread_sets_delete_callback_
+#define _di_f_thread_sets_destroy_callback_
+#define _di_f_thread_setss_delete_callback_
+#define _di_f_thread_setss_destroy_callback_
+#define _di_f_thread_sets_t_
+#define _di_f_thread_set_t_
+//#define _di_f_thread_signal_mask_
+#define _di_f_thread_signal_queue_
+#define _di_f_thread_signal_write_
+#define _di_f_thread_spin_create_
+#define _di_f_thread_spin_delete_
+#define _di_f_thread_spin_lock_
+#define _di_f_thread_spin_lock_try_
+#define _di_f_thread_spins_delete_callback_
+#define _di_f_thread_spins_destroy_callback_
+#define _di_f_thread_spinss_delete_callback_
+#define _di_f_thread_spinss_destroy_callback_
+#define _di_f_thread_spins_t_
+#define _di_f_thread_spin_t_
+#define _di_f_thread_spin_unlock_
+#define _di_f_thread_unlock_
+#define _di_f_time_spec_millisecond_
+#define _di_f_time_spec_nanosecond_
+#define _di_f_time_spec_t_
+#define _di_f_time_t_
+//#define _di_f_type_d_
+//#define _di_f_type_file_defaults_d_
+//#define _di_f_type_file_flag_d_
+//#define _di_f_type_number_64_t_
+//#define _di_f_type_sizes_d_
+#define _di_f_uint128ss_delete_callback_
+#define _di_f_uint128ss_destroy_callback_
+#define _di_f_uint128ss_t_
+#define _di_f_uint128s_t_
+//#define _di_f_uint128_t_
+#define _di_f_uint16ss_delete_callback_
+#define _di_f_uint16ss_destroy_callback_
+#define _di_f_uint16ss_t_
+//#define _di_f_uint16s_t_
+#define _di_f_uint32ss_delete_callback_
+#define _di_f_uint32ss_destroy_callback_
+#define _di_f_uint32ss_t_
+#define _di_f_uint32s_t_
+#define _di_f_uint64ss_delete_callback_
+#define _di_f_uint64ss_destroy_callback_
+#define _di_f_uint64ss_t_
+#define _di_f_uint64s_t_
+//#define _di_f_uint8ss_delete_callback_
+#define _di_f_uint8ss_destroy_callback_
+//#define _di_f_uint8ss_t_
+//#define _di_f_uint8s_t_
+#define _di_f_utf_buffer_decrement_
+//#define _di_f_utf_buffer_increment_
+//#define _di_f_utf_byte_d_
+#define _di_f_utf_character_is_
+#define _di_f_utf_character_is_alphabetic_
+#define _di_f_utf_character_is_alphabetic_digit_
+#define _di_f_utf_character_is_alphabetic_numeric_
+#define _di_f_utf_character_is_ascii_
+#define _di_f_utf_character_is_combining_
+#define _di_f_utf_character_is_control_
+#define _di_f_utf_character_is_control_code_
+#define _di_f_utf_character_is_control_format_
+#define _di_f_utf_character_is_control_picture_
+#define _di_f_utf_character_is_digit_
+#define _di_f_utf_character_is_emoji_
+#define _di_f_utf_character_is_fragment_
+#define _di_f_utf_character_is_graph_
+#define _di_f_utf_character_is_numeric_
+#define _di_f_utf_character_is_phonetic_
+#define _di_f_utf_character_is_private_
+#define _di_f_utf_character_is_punctuation_
+#define _di_f_utf_character_is_subscript_
+#define _di_f_utf_character_is_superscript_
+#define _di_f_utf_character_is_symbol_
+#define _di_f_utf_character_is_unassigned_
+#define _di_f_utf_character_is_valid_
+#define _di_f_utf_character_is_value_
+#define _di_f_utf_character_is_whitespace_
+#define _di_f_utf_character_is_whitespace_modifier_
+#define _di_f_utf_character_is_whitespace_other_
+#define _di_f_utf_character_is_whitespace_zero_width_
+#define _di_f_utf_character_is_wide_
+#define _di_f_utf_character_is_word_
+#define _di_f_utf_character_is_word_dash_
+#define _di_f_utf_character_is_word_dash_plus_
+#define _di_f_utf_character_is_zero_width_
+#define _di_f_utf_character_unicode_from_
+#define _di_f_utf_character_unicode_string_to_
+#define _di_f_utf_character_unicode_to_
+#define _di_f_utf_char_eol_s_
+#define _di_f_utf_char_eos_s_
+#define _di_f_utf_char_placeholder_s_
+#define _di_f_utf_char_s_
+//#define _di_f_utf_char_t_
+#define _di_f_utf_char_to_char_
+//#define _di_f_utf_char_to_character_
+#define _di_f_utf_is_
+#define _di_f_utf_is_alphabetic_
+#define _di_f_utf_is_alphabetic_digit_
+#define _di_f_utf_is_alphabetic_numeric_
+#define _di_f_utf_is_ascii_
+//#define _di_f_utf_is_combining_
+//#define _di_f_utf_is_control_
+#define _di_f_utf_is_control_code_
+#define _di_f_utf_is_control_format_
+#define _di_f_utf_is_control_picture_
+#define _di_f_utf_is_digit_
+#define _di_f_utf_is_emoji_
+#define _di_f_utf_is_fragment_
+//#define _di_f_utf_is_graph_
+#define _di_f_utf_is_numeric_
+#define _di_f_utf_is_phonetic_
+#define _di_f_utf_is_private_
+#define _di_f_utf_is_punctuation_
+#define _di_f_utf_is_subscript_
+#define _di_f_utf_is_superscript_
+#define _di_f_utf_is_symbol_
+#define _di_f_utf_is_unassigned_
+//#define _di_f_utf_is_valid_
+//#define _di_f_utf_is_whitespace_
+#define _di_f_utf_is_whitespace_modifier_
+#define _di_f_utf_is_whitespace_other_
+#define _di_f_utf_is_whitespace_zero_width_
+#define _di_f_utf_is_wide_
+#define _di_f_utf_is_word_
+#define _di_f_utf_is_word_dash_
+#define _di_f_utf_is_word_dash_plus_
+//#define _di_f_utf_is_zero_width_
+#define _di_f_utf_space_em_per_four_s_
+#define _di_f_utf_space_em_per_six_s_
+#define _di_f_utf_space_em_per_three_s_
+#define _di_f_utf_space_em_quad_s_
+#define _di_f_utf_space_em_s_
+#define _di_f_utf_space_en_quad_s_
+#define _di_f_utf_space_en_s_
+#define _di_f_utf_space_figure_s_
+#define _di_f_utf_space_hair_s_
+#define _di_f_utf_space_ideographic_s_
+#define _di_f_utf_space_line_feed_reverse_s_
+#define _di_f_utf_space_line_next_s_
+#define _di_f_utf_space_medium_mathematical_s_
+#define _di_f_utf_space_no_break_narrow_s_
+#define _di_f_utf_space_no_break_s_
+#define _di_f_utf_space_ogham_s_
+#define _di_f_utf_space_punctuation_s_
+#define _di_f_utf_space_s_
+#define _di_f_utf_space_separator_line_s_
+#define _di_f_utf_space_separator_paragraph_s_
+#define _di_f_utf_space_thin_s_
+#define _di_f_utf_string_append_
+#define _di_f_utf_string_append_assure_
+#define _di_f_utf_string_append_assure_nulless_
+#define _di_f_utf_string_append_nulless_
+#define _di_f_utf_string_dynamic_append_
+#define _di_f_utf_string_dynamic_append_assure_
+#define _di_f_utf_string_dynamic_append_assure_nulless_
+#define _di_f_utf_string_dynamic_append_nulless_
+#define _di_f_utf_string_dynamic_mash_
+#define _di_f_utf_string_dynamic_mash_nulless_
+#define _di_f_utf_string_dynamic_mish_
+#define _di_f_utf_string_dynamic_mish_nulless_
+#define _di_f_utf_string_dynamic_partial_append_
+#define _di_f_utf_string_dynamic_partial_append_assure_
+#define _di_f_utf_string_dynamic_partial_append_assure_nulless_
+#define _di_f_utf_string_dynamic_partial_append_nulless_
+#define _di_f_utf_string_dynamic_partial_mash_
+#define _di_f_utf_string_dynamic_partial_mash_nulless_
+#define _di_f_utf_string_dynamic_partial_mish_
+#define _di_f_utf_string_dynamic_partial_mish_nulless_
+#define _di_f_utf_string_dynamic_partial_prepend_
+#define _di_f_utf_string_dynamic_partial_prepend_assure_
+#define _di_f_utf_string_dynamic_partial_prepend_assure_nulless
+#define _di_f_utf_string_dynamic_partial_prepend_assure_nulless_
+#define _di_f_utf_string_dynamic_partial_prepend_nulless
+#define _di_f_utf_string_dynamic_partial_prepend_nulless_
+#define _di_f_utf_string_dynamic_prepend_
+#define _di_f_utf_string_dynamic_prepend_assure_
+#define _di_f_utf_string_dynamic_prepend_assure_nulless_
+#define _di_f_utf_string_dynamic_prepend_nulless_
+#define _di_f_utf_string_dynamics_append_
+#define _di_f_utf_string_dynamics_append_all_
+#define _di_f_utf_string_dynamics_delete_callback_
+#define _di_f_utf_string_dynamics_destroy_callback_
+#define _di_f_utf_string_dynamic_seek_line_
+#define _di_f_utf_string_dynamic_seek_line_to_
+#define _di_f_utf_string_dynamic_seek_to_
+#define _di_f_utf_string_dynamicss_append_
+#define _di_f_utf_string_dynamicss_append_all_
+#define _di_f_utf_string_dynamicss_delete_callback_
+#define _di_f_utf_string_dynamicss_destroy_callback_
+#define _di_f_utf_string_dynamicss_t_
+#define _di_f_utf_string_dynamics_t_
+#define _di_f_utf_string_dynamic_t_
+#define _di_f_utf_string_dynamic_terminate_
+#define _di_f_utf_string_dynamic_terminate_after_
+#define _di_f_utf_string_empty_s_
+#define _di_f_utf_string_map_multis_append_
+#define _di_f_utf_string_map_multis_append_all_
+#define _di_f_utf_string_map_multis_delete_callback_
+#define _di_f_utf_string_map_multis_destroy_callback_
+#define _di_f_utf_string_map_multiss_append_
+#define _di_f_utf_string_map_multiss_append_all_
+#define _di_f_utf_string_map_multiss_delete_callback_
+#define _di_f_utf_string_map_multiss_destroy_callback_
+#define _di_f_utf_string_map_multiss_t_
+#define _di_f_utf_string_map_multis_t_
+#define _di_f_utf_string_map_multi_t_
+#define _di_f_utf_string_maps_append_
+#define _di_f_utf_string_maps_append_all_
+#define _di_f_utf_string_maps_delete_callback_
+#define _di_f_utf_string_maps_destroy_callback_
+#define _di_f_utf_string_mapss_append_
+#define _di_f_utf_string_mapss_append_all_
+#define _di_f_utf_string_mapss_delete_callback_
+#define _di_f_utf_string_mapss_destroy_callback_
+#define _di_f_utf_string_mapss_t_
+#define _di_f_utf_string_maps_t_
+#define _di_f_utf_string_map_t_
+#define _di_f_utf_string_mash_
+#define _di_f_utf_string_mash_nulless_
+#define _di_f_utf_string_mish_
+#define _di_f_utf_string_mish_nulless_
+#define _di_f_utf_string_prepend_
+#define _di_f_utf_string_prepend_assure_
+#define _di_f_utf_string_prepend_assure_nulless_
+#define _di_f_utf_string_prepend_nulless_
+#define _di_f_utf_string_seek_line_
+#define _di_f_utf_string_seek_line_to_
+#define _di_f_utf_string_seek_to_
+#define _di_f_utf_string_staticss_t_
+#define _di_f_utf_string_statics_t_
+#define _di_f_utf_string_static_t_
+#define _di_f_utf_string_t_
+#define _di_f_utf_string_triples_append_
+#define _di_f_utf_string_triples_append_all_
+#define _di_f_utf_string_triples_delete_callback_
+#define _di_f_utf_string_triples_destroy_callback_
+#define _di_f_utf_string_tripless_append_
+#define _di_f_utf_string_tripless_append_all_
+#define _di_f_utf_string_tripless_delete_callback_
+#define _di_f_utf_string_tripless_destroy_callback_
+#define _di_f_utf_string_tripless_t_
+#define _di_f_utf_string_triples_t_
+#define _di_f_utf_string_triple_t_
+#define _di_f_utf_substitute_middle_dot_s_
+#define _di_f_utf_substitute_open_box_s_
+#define _di_f_utf_substitute_open_box_shouldered_s_
+#define _di_f_utf_substitute_s_
+#define _di_f_utf_substitute_symbol_blank_s_
+#define _di_f_utf_substitute_symbol_space_s_
+#define _di_f_utf_unicode_from_
+#define _di_f_utf_unicode_string_to_
+#define _di_f_utf_unicode_to_
+#define _di_f_utf_width_e_
+#define _di_private_inline_f_print_to_error_
+#define _di_private_inline_private_f_print_to_error_
index 1d8cb199e606a1074ed7ce5cd90ffd3cd70c134a..56cdc6a0925dedff6423ee84f449254987408897 100644 (file)
@@ -1,7 +1,15 @@
 # fss-0001
 #
-# A custom build for compiling utf8 as a stand alone binary building in all of the FLL dependencies.
-# This will compile a program that does not have a libutf8.so library.
+# A custom build for compiling firewall as a stand alone binary building in all of the FLL dependencies.
+# This will compile a program that does not have a libfirewall.so library and builds all of the FLL dependencies into the resulting program.
+#
+# Modes:
+#   - stand_alone: The stand alone build mode, which in general should always be used.
+#   - clang:       Use clang rather than the default, which is generally gcc.
+#   - test:        Compile for a test, such as unit testing.
+#   - fanalyzer:   Compile using GCC's -fanalyzer compile time option.
+#   - thread:      Compile with thread support.
+#   - threadless:  Compile without thread support.
 #
 
 build_name firewall
@@ -23,44 +31,54 @@ build_language c
 
 build_libraries -lc -lcap
 
-build_sources_program fll/level_0/account.c fll/level_0/private-account.c
+build_sources_program fll/level_0/abstruse.c fll/level_0/abstruse/abstruse.c fll/level_0/abstruse/map.c fll/level_0/abstruse/private-abstruse.c
 build_sources_program fll/level_0/capability.c
 build_sources_program fll/level_0/color.c fll/level_0/private-color.c fll/level_0/color/common.c
+build_sources_program fll/level_0/compare.c fll/level_0/compare/utf.c fll/level_0/private-compare.c fll/level_0/compare/private-utf.c
 build_sources_program fll/level_0/console.c fll/level_0/console/common.c fll/level_0/private-console.c
 build_sources_program fll/level_0/control_group.c fll/level_0/control_group/common.c
 build_sources_program fll/level_0/conversion.c fll/level_0/private-conversion.c fll/level_0/conversion/common.c
-build_sources_program fll/level_0/directory.c fll/level_0/directory/common.c fll/level_0/private-directory.c
+build_sources_program fll/level_0/directory.c fll/level_0/directory/common.c fll/level_0/directory/listing.c fll/level_0/directory/recurse_do.c fll/level_0/directory/status.c
+build_sources_program fll/level_0/private-directory.c
 build_sources_program fll/level_0/environment.c
 build_sources_program fll/level_0/execute.c
-build_sources_program fll/level_0/file.c fll/level_0/private-file.c fll/level_0/file/common.c
-build_sources_program fll/level_0/fss.c fll/level_0/private-fss.c fll/level_0/fss/common.c fll/level_0/fss/named.c fll/level_0/fss/nest.c fll/level_0/fss/set.c
+build_sources_program fll/level_0/file.c fll/level_0/private-file.c fll/level_0/file/common.c fll/level_0/file/stream.c
+build_sources_program fll/level_0/fss.c fll/level_0/fss/common.c fll/level_0/fss/item.c fll/level_0/fss/named.c fll/level_0/fss/nest.c fll/level_0/fss/payload.c fll/level_0/fss/quote.c fll/level_0/fss/set.c fll/level_0/fss/set_quote.c fll/level_0/fss/simple_packet.c
 build_sources_program fll/level_0/limit.c fll/level_0/limit/set.c fll/level_0/limit/value.c
-build_sources_program fll/level_0/memory.c fll/level_0/private-memory.c fll/level_0/memory/structure.c
+build_sources_program fll/level_0/memory.c fll/level_0/memory/array.c fll/level_0/memory/arrays.c
+build_sources_program fll/level_0/private-memory.c fll/level_0/memory/private-array.c
 build_sources_program fll/level_0/path.c fll/level_0/private-path.c fll/level_0/path/common.c
 build_sources_program fll/level_0/pipe.c
 build_sources_program fll/level_0/print.c fll/level_0/private-print.c fll/level_0/print/common.c fll/level_0/print/to.c fll/level_0/print/private-to.c
+build_sources_program fll/level_0/rip.c fll/level_0/rip/utf.c fll/level_0/private-rip.c fll/level_0/rip/private-utf.c
 build_sources_program fll/level_0/signal.c
-build_sources_program fll/level_0/string.c fll/level_0/private-string.c fll/level_0/string/common.c fll/level_0/string/dynamic.c fll/level_0/string/map.c fll/level_0/string/map_multi.c fll/level_0/string/static.c fll/level_0/string/triple.c
-build_sources_program fll/level_0/thread.c fll/level_0/private-thread.c fll/level_0/thread/attribute.c fll/level_0/thread/barrier.c fll/level_0/thread/barrier_attribute.c fll/level_0/thread/condition.c fll/level_0/thread/condition_attribute.c fll/level_0/thread/id.c fll/level_0/thread/key.c fll/level_0/thread/lock.c fll/level_0/thread/lock_attribute.c fll/level_0/thread/mutex.c fll/level_0/thread/mutex_attribute.c fll/level_0/thread/once.c fll/level_0/thread/semaphore.c fll/level_0/thread/set.c fll/level_0/thread/spin.c
-build_sources_program fll/level_0/type_array/cell.c fll/level_0/type_array/file.c fll/level_0/type_array/fll_id.c fll/level_0/type_array/int8.c fll/level_0/type_array/int16.c fll/level_0/type_array/int32.c fll/level_0/type_array/int64.c fll/level_0/type_array/int128.c fll/level_0/type_array/number_signed.c fll/level_0/type_array/number_unsigned.c fll/level_0/type_array/poll.c fll/level_0/type_array/quantity.c fll/level_0/type_array/range.c fll/level_0/type_array/state.c fll/level_0/type_array/status.c fll/level_0/type_array/uint8.c fll/level_0/type_array/uint16.c fll/level_0/type_array/uint32.c fll/level_0/type_array/uint64.c fll/level_0/type_array/uint128.c
+build_sources_program fll/level_0/string.c fll/level_0/private-string.c fll/level_0/string/common.c
+build_sources_program fll/level_0/string/dynamic.c fll/level_0/string/dynamics.c fll/level_0/string/dynamicss.c fll/level_0/string/map.c fll/level_0/string/maps.c fll/level_0/string/mapss.c fll/level_0/string/map_multi.c fll/level_0/string/map_multis.c fll/level_0/string/map_multiss.c fll/level_0/string/static.c fll/level_0/string/statics.c fll/level_0/string/staticss.c fll/level_0/string/triple.c fll/level_0/string/triples.c fll/level_0/string/tripless.c
+build_sources_program fll/level_0/type_array/cell.c fll/level_0/type_array/file.c fll/level_0/type_array/fll_id.c fll/level_0/type_array/int8.c fll/level_0/type_array/int16.c fll/level_0/type_array/int32.c fll/level_0/type_array/int64.c fll/level_0/type_array/int128.c fll/level_0/type_array/number_signed.c fll/level_0/type_array/number_unsigned.c fll/level_0/type_array/poll.c fll/level_0/type_array/quantity.c  fll/level_0/type_array/quantitys.c fll/level_0/type_array/quantityss.c fll/level_0/type_array/range.c  fll/level_0/type_array/ranges.c fll/level_0/type_array/rangess.c fll/level_0/type_array/state.c fll/level_0/type_array/status.c fll/level_0/type_array/uint8.c fll/level_0/type_array/uint16.c fll/level_0/type_array/uint32.c fll/level_0/type_array/uint64.c fll/level_0/type_array/uint128.c
 build_sources_program fll/level_0/utf.c fll/level_0/private-utf.c fll/level_0/private-utf_alphabetic.c fll/level_0/private-utf_combining.c fll/level_0/private-utf_control.c fll/level_0/private-utf_digit.c fll/level_0/private-utf_emoji.c fll/level_0/private-utf_numeric.c fll/level_0/private-utf_phonetic.c fll/level_0/private-utf_private.c fll/level_0/private-utf_punctuation.c fll/level_0/private-utf_subscript.c fll/level_0/private-utf_superscript.c fll/level_0/private-utf_symbol.c fll/level_0/private-utf_unassigned.c fll/level_0/private-utf_valid.c fll/level_0/private-utf_whitespace.c fll/level_0/private-utf_wide.c fll/level_0/private-utf_word.c fll/level_0/private-utf_zero_width.c
-build_sources_program fll/level_0/utf/common.c fll/level_0/utf/convert.c fll/level_0/utf/dynamic.c fll/level_0/utf/is.c fll/level_0/utf/is_character.c fll/level_0/utf/map.c fll/level_0/utf/map_multi.c fll/level_0/utf/static.c fll/level_0/utf/string.c fll/level_0/utf/triple.c fll/level_0/utf/private-dynamic.c fll/level_0/utf/private-map.c fll/level_0/utf/private-map_multi.c fll/level_0/utf/private-triple.c fll/level_0/utf/private-string.c
+build_sources_program fll/level_0/utf/common.c fll/level_0/utf/convert.c fll/level_0/utf/dynamic.c fll/level_0/utf/dynamics.c fll/level_0/utf/dynamicss.c fll/level_0/utf/is.c fll/level_0/utf/is_character.c fll/level_0/utf/map.c fll/level_0/utf/maps.c fll/level_0/utf/mapss.c fll/level_0/utf/map_multi.c fll/level_0/utf/map_multis.c fll/level_0/utf/map_multiss.c fll/level_0/utf/static.c fll/level_0/utf/statics.c fll/level_0/utf/staticss.c fll/level_0/utf/string.c fll/level_0/utf/triple.c fll/level_0/utf/triples.c fll/level_0/utf/tripless.c
+build_sources_program fll/level_0/utf/private-dynamics.c fll/level_0/utf/private-maps.c fll/level_0/utf/private-map_multis.c fll/level_0/utf/private-string.c fll/level_0/utf/private-triples.c
+
+build_sources_program-thread fll/level_0/thread.c fll/level_0/thread/attribute.c fll/level_0/thread/barrier.c fll/level_0/thread/barrier_attribute.c fll/level_0/thread/condition.c fll/level_0/thread/condition_attribute.c fll/level_0/thread/id.c fll/level_0/thread/key.c fll/level_0/thread/lock.c fll/level_0/thread/lock_attribute.c fll/level_0/thread/mutex.c fll/level_0/thread/mutex_attribute.c fll/level_0/thread/once.c fll/level_0/thread/semaphore.c fll/level_0/thread/set.c fll/level_0/thread/spin.c
 
 build_sources_program fll/level_1/control_group.c
 build_sources_program fll/level_1/conversion.c fll/level_1/private-conversion.c fll/level_1/conversion/common.c
 build_sources_program fll/level_1/environment.c
-build_sources_program fll/level_1/private-fss.c fll/level_1/fss/basic.c fll/level_1/fss/basic_list.c fll/level_1/fss/embedded_list.c fll/level_1/fss/extended.c fll/level_1/fss/extended_list.c
+build_sources_program fll/level_1/private-fss.c fll/level_1/fss/basic.c fll/level_1/fss/basic_list.c fll/level_1/fss/embedded_list.c fll/level_1/fss/extended.c fll/level_1/fss/extended_list.c fll/level_1/fss/payload.c
 build_sources_program fll/level_1/print.c fll/level_1/private-print.c fll/level_1/print/common.c
-build_sources_program fll/level_1/string.c fll/level_1/private-string.c
 
-build_sources_program fll/level_2/error.c fll/level_2/error/common.c fll/level_2/private-error.c
+build_sources_program fll/level_2/error.c fll/level_2/private-error.c fll/level_2/error/common.c
 build_sources_program fll/level_2/execute.c fll/level_2/private-execute.c
 build_sources_program fll/level_2/fss.c fll/level_2/fss/basic.c fll/level_2/fss/basic_list.c fll/level_2/fss/embedded_list.c fll/level_2/fss/extended.c fll/level_2/fss/extended_list.c fll/level_2/fss/payload.c
 build_sources_program fll/level_2/print.c
-build_sources_program fll/level_2/program.c fll/level_2/program/common.c fll/level_2/private-program.c
+build_sources_program fll/level_2/program.c fll/level_2/program/common.c fll/level_2/program/print.c fll/level_2/private-program.c
 
-build_sources_program program/firewall/firewall.c program/firewall/common.c program/firewall/private-common.c program/firewall/private-firewall.c
-build_sources_program program/firewall/main.c
+build_sources_program program/firewall/main/common.c program/firewall/main/common/define.c program/firewall/main/common/enumeration.c program/firewall/main/common/print.c program/firewall/main/common/string.c program/firewall/main/common/type.c
+build_sources_program program/firewall/main/print/debug.c program/firewall/main/print/error.c program/firewall/main/print/message.c program/firewall/main/print/warning.c
+build_sources_program program/firewall/main/operate.c program/firewall/main/operate/buffer.c program/firewall/main/operate/chains.c program/firewall/main/operate/create.c program/firewall/main/operate/default.c program/firewall/main/operate/delete.c program/firewall/main/operate/process.c program/firewall/main/operate/rules.c program/firewall/main/operate/show.c
+build_sources_program program/firewall/main/firewall.c program/firewall/main/signal.c program/firewall/main/thread.c
+
+build_sources_program program/firewall/main/main.c
 
 build_sources_documentation man
 
@@ -99,16 +117,14 @@ defines-clang -D_clang_not_a_compile_time_constant_workaround_
 defines-threadless -D_di_thread_support_
 defines-thread -D_pthread_attr_unsupported_ -D_pthread_sigqueue_unsupported_
 
-flags -O2 -g -fdiagnostics-color=always -Wno-logical-not-parentheses -Wno-parentheses
+flags -O2 -g -fdiagnostics-color=always -Wno-logical-not-parentheses -Wno-parentheses -Wno-main
 flags -fstack-clash-protection -fno-delete-null-pointer-checks -fstrict-flex-arrays=3
 flags -D_FORTIFY_SOURCE=3
 flags -Wl,-z,nodlopen -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now
 flags-thread -pthread
 flags-clang -Wno-logical-op-parentheses
-flags-thread -pthread
 flags-test -O0 -fstack-protector-strong -Wall
 flags-fanalyzer -fanalyzer
-flags-coverage -O0 --coverage -fprofile-abs-path -fprofile-dir=build/coverage/
 
 flags_library -fPIC
 flags_object -fPIC
diff --git a/level_3/firewall/build/documentation/man/man1/firewall.1 b/level_3/firewall/build/documentation/man/man1/firewall.1
new file mode 100644 (file)
index 0000000..97be099
--- /dev/null
@@ -0,0 +1,68 @@
+.TH FIREWALL "1" "January 2023" "Kevux - Firewall 0.7.0" "User Commands"
+.SH NAME
+firewall \- A basic iptables based firewall manager for the Kevux distribution.
+.SH SYNOPSIS
+.B firewall
+[\fI\,OPTIONS\/\fR] [\fI\,COMMAND\/\fR]
+.SH DESCRIPTION
+.PP
+.SH OPTIONS
+.TP
+\fB\{\-h, \-\-help\fR
+Print the help message.
+.TP
+\fB+C, ++copyright\fR
+Print the copyright.
+\fB+d, ++dark\fR
+Output using colors that show up better on dark backgrounds.
+.TP
+\fB+l, ++light\fR
+Output using colors that show up better on light backgrounds.
+.TP
+\fB+n, ++no_color\fR
+Do not print using color.
+.TP
+\fB+Q, ++quiet\fR
+Decrease verbosity, silencing most output.
+.TP
+\fB+E, ++error\fR
+Decrease verbosity, using only error output.
+.TP
+\fB+N, ++normal\fR
+Set verbosity to normal.
+.TP
+\fB+V, ++verbose\fR
+Increase verbosity beyond normal output.
+.TP
+\fB+D, ++debug\fR
+Enable debugging, significantly increasing verbosity beyond normal output.
+.TP
+\fB+v, ++version\fR
+Print only the version number.
+.TP
+\fB+F, ++line_first_no\fR
+Disable printing of first line.
+.TP
+\fB+L, ++line_last_no\fR
+Disable printing of last line.
+.SH COMMAND
+.TP
+\fBstart\fR
+Turn on the firewall.
+.TP
+\fBstop\fR
+Turn off the firewall.
+.TP
+\fBrestart\fR
+Turn off and then turn on the firewall.
+.TP
+\fBlock\fR
+Prevent all communication.
+.TP
+\fBshow\fR
+Show active firewall settings.
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2023 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/firewall/build/settings/network/default-blacklist b/level_3/firewall/build/settings/network/default-blacklist
new file mode 100644 (file)
index 0000000..4f13080
--- /dev/null
@@ -0,0 +1 @@
+# fss-0000
diff --git a/level_3/firewall/build/settings/network/default-whitelist b/level_3/firewall/build/settings/network/default-whitelist
new file mode 100644 (file)
index 0000000..4f13080
--- /dev/null
@@ -0,0 +1 @@
+# fss-0000
diff --git a/level_3/firewall/build/settings/network/example-device-firewall b/level_3/firewall/build/settings/network/example-device-firewall
new file mode 100644 (file)
index 0000000..7a7143e
--- /dev/null
@@ -0,0 +1,241 @@
+# fss-0002
+# valid tool: iptables, ip6tables, ip46tables (ip46tables = both ip4 and ip6 tables, which is the default).
+# valid direction: input, output, none.
+# valid device: all, this, (any device name goes here without parenthesis).
+# valid action: append, insert, policy, none.
+# valid procotol: none, (any valid iptables protocol type, such as tcp, udp, and icmp).
+# reserved chains: INPUT, OUTPUT, FORWARD, POSTROUTING, PREROUTING, none (this only applies from within a 'main' list).
+# some options for -j: ACCEPT, REJECT, DROP, RETURN, LOG, AUDIT, CHECKSUM, CLASSIFY, CLUSTERIP, CONNMARK, CONNSECMARK, CT, DNAT, DNPT, DSCP, ECN, HL, HMARK, IDLETIMER, LED, MARK, MASQUERADE, MIRROR, NETMAP, NFLOG, NFQUEUE, NOTRACK, RATETEST, REDIRECT, SAME, SECMARK, SET, SNAT, SNPT, TCPMSS,TCPOPTSTRIP, TEE, TOS, TPROXY, TRACE, TTL, ULOG.
+# some options for -t: nat, mangle, filter, raw, security (filter is the default).
+# some options for --state: NEW, ESTABLISHED, RELATED, INVALID, UNTRACKED, SNAT, DNAT.
+# some options for --ctstatus: NONE, EXPECTED, SEEN_REPLY, ASSURED, CONFIRMED.
+
+main:
+  chain INPUT
+  device this
+  direction none
+
+  # Define a blacklist and a whitelist, put ip addresses in the file named 'example-device-whitelist' separated by white space to whitelist an ip address
+  # (ip_list might be removed in the future once I figure out how ipset works and confirm if ipset can replace my ip_list.)
+  #ip_list source example-device-whitelist -j ACCEPT
+  #ip_list source example-device-blacklist -j REJECT
+  #ip_list destination example-device-whitelist -j ACCEPT
+  #ip_list destination example-device-blacklist -j REJECT
+
+  # Connection marking for vlans or QoS (via: tc).
+  #chain PREROUTING
+  #rule -t mangle -j CONNMARK --restore-mark
+  #chain INPUT
+
+  # save markings that have been restored (prerouting).
+  #chain PREROUTING
+  #rule -t mangle -m mark --mark 2 -j CONNMARK --save-mark
+  #rule -t mangle -m mark --mark 3 -j CONNMARK --save-mark
+  #chain INPUT
+
+  # example rate limit using marking for port 22
+  #protocol tcp
+  #chain OUTPUT
+  #direction output
+  #rule -t mangle --sport 22 -j MARK --set-mark 2
+  #chain INPUT
+  #direction input
+  #rule -t mangle --dport 22 -j MARK --set-mark 2
+  #direction none
+
+  # rate limit when there are 8 or more connections from a single host.
+  #protocol tcp
+  #chain OUTPUT
+  #rule -t mangle -m connlimit --connlimit-above 7 -j MARK --set-mark 3
+  #chain INPUT
+  #rule -t mangle -m connlimit --connlimit-above 7 -j MARK --set-mark 3
+
+  # save markings that have been assigned (postrouting).
+  #protocol none
+  #chain POSTROUTING
+  #rule -t mangle -m mark --mark 2 -j CONNMARK --save-mark
+  #rule -t mangle -m mark --mark 3 -j CONNMARK --save-mark
+  #chain INPUT
+
+
+  # randomly trigger the rule (51% of the time) and then the reset of the time go to the second rule.
+  # this can be very useful in distributing connections between different devices or servers.
+  #rule -m random --average 51 -j example_rule_1
+  #rule -j example_rule_2
+
+
+input-tcp:
+  device this
+  direction input
+  protocol tcp
+
+  ## Http / Web
+  #rule --dport 80 -j LOG --log-prefix "TRAFFIC:WEB "
+  #rule --dport 80 -j ACCEPT
+
+  ## Http / Web redirect to Https / Secure Web
+  #tool iptables
+  #rule -t nat --dport 80 -j REDIRECT --to-port 443
+  #tool ip46tables
+  #direction input
+
+  ## Https / Secure Web
+  #rule --dport 443 -j LOG --log-prefix "TRAFFIC:WEB "
+  #rule --dport 443 -j ACCEPT
+
+  ## Http / Https / Web throttle connections that occur too often.
+  #rule --dport 80 --sync -m recent --name http_throttle --set
+  #rule --dport 80 --sync -m recent --name http_throttle --update --seconds 3 --hitcount 10 -j DROP
+  #rule --dport 443 --sync -m recent --name http_throttle --set
+  #rule --dport 443 --sync -m recent --name http_throttle --update --seconds 3 --hitcount 10 -j DROP
+
+  ## MySQL
+  #rule --dport 3306 -j ACCEPT
+
+  ## Music Player Daemon
+  #rule --dport 6600 -j ACCEPT
+
+  ## Camsource
+  #rule --dport 9192 -j ACCEPT
+
+  ## Cups Printer Administration
+  #rule --dport 631 -j ACCEPT
+
+  ## Ssh (OpenSSH)
+  #rule --dport 22 -j LOG --log-prefix "TRAFFIC:SSH "
+  #rule --dport 22 -j ACCEPT
+
+  ## clamd (Clam Antivirus) - remote access, not needed for normal
+  #rule --dport 3310 -j ACCEPT
+
+  ## Virtual Network Client Server (add 1 for each seperat vnc server)
+  #rule --dport 5900 -j ACCEPT
+
+  ## Printer Port, is probably open...safer to close unless you are SERVING a printer
+  #rule --dport 515 -j REJECT
+
+  ## Subversion server
+  #rule --dport 3690 -j ACCEPT
+
+  ## Silc server
+  #rule --dport 706 -j ACCEPT
+
+  ## Worms of Prey
+  #rule --dport 47288 -j ACCEPT
+
+  ## Git Daemon
+  #rule --dport 9418 -j ACCEPT
+
+  ## Ldap Server
+  #rule --dport 389 -j ACCEPT
+  #rule --dport 636 -j ACCEPT
+  #rule --dport 1636 -j ACCEPT
+
+  ## Mail Server (25 = SMTP, 465 = SMTPS, 993 = IMAP, 995 = POP)
+  #rule --dport 25 -j ACCEPT
+
+
+input-udp:
+  device this
+  direction input
+  protocol udp
+
+  ## DNS Server (Bind or Maradns) (zoneserver from maradns does this portion)
+  #rule --dport 53 -j ACCEPT
+
+  ## DHCP Server (providing dhcp address to clients)
+  #tool iptables
+  #rule --sport 68 -d 255.255.255.255 --dport 67 -j ACCEPT
+  #tool ip46tables
+
+  ## Subversion server
+  #rule --dport 3690 -j ACCEPT
+
+  ## Worms of Prey
+  #rule --sport 47288:47544 -j ACCEPT
+  #rule --dport 47288:47544 -j ACCEPT
+
+
+input-icmp:
+  device this
+  direction input
+  protocol icmp
+
+  # allow all icmp input, such as pings
+  #rule -j ACCEPT
+
+  # allow icmp: echo reply (outbound ping)
+  ##rule --icmp-type 0 -j ACCEPT
+
+  # allow icmp: destination unreachable
+  #rule --icmp-type 3 -j ACCEPT
+
+  # allow icmp: source quench
+  #rule --icmp-type 4 -j ACCEPT
+
+  # allow icmp: redirect
+  #rule --icmp-type 5 -j ACCEPT
+
+  # allow icmp: echo request (inbound ping)
+  #rule --icmp-type 8 -j ACCEPT
+
+  # allow icmp: router advertisement
+  #rule --icmp-type 9 -j ACCEPT
+
+  # allow icmp: router Solicitation
+  #rule --icmp-type 10 -j ACCEPT
+
+  # allow icmp: time exceeded
+  #rule --icmp-type 11 -j ACCEPT
+
+  # allow icmp: bad ip header
+  #rule --icmp-type 12 -j ACCEPT
+
+  # allow icmp: timestamp
+  #rule --icmp-type 13 -j ACCEPT
+
+  # allow icmp: timestamp reply
+  #rule --icmp-type 14 -j ACCEPT
+
+  # allow icmp: information request
+  #rule --icmp-type 15 -j ACCEPT
+
+  # allow icmp: information reply
+  #rule --icmp-type 16 -j ACCEPT
+
+  # allow icmp: address request
+  #rule --icmp-type 17 -j ACCEPT
+
+  # allow icmp: address reply
+  #rule --icmp-type 18 -j ACCEPT
+
+  # allow icmp: traceroute
+  #rule --icmp-type 30 -j ACCEPT
+
+
+output-tcp:
+  device this
+  direction output
+  protocol tcp
+
+
+output-udp:
+  device this
+  direction output
+  protocol udp
+
+  ## DNS Server (Bind or Maradns) (zoneserver from maradns does this portion)
+  #rule --dport 53 -j ACCEPT
+
+  ## DHCP Server (providing dhcp address to clients)
+  #tool iptables
+  #rule --sport 67 -d 255.255.255.255 --dport 68 -j ACCEPT
+  #tool ip46tables
+
+
+output-icmp:
+  device this
+  direction output
+  protocol icmp
+
+
diff --git a/level_3/firewall/build/settings/network/firewall-first b/level_3/firewall/build/settings/network/firewall-first
new file mode 100644 (file)
index 0000000..0ae4fa8
--- /dev/null
@@ -0,0 +1,599 @@
+# fss-0002
+
+main:
+  # initialize the firewall
+  action none
+  direction none
+  protocol none
+  chain none
+
+  rule -F
+  rule -Z
+
+  tool iptables
+  rule -t nat -F
+  rule -t mangle -F
+  tool ip46tables
+
+
+INPUT:
+  # main input chain, expect this to act as the final RETURN handler.
+  direction input
+  protocol none
+
+  # handle local (loopback) connections.
+  device lo
+  rule -j input-loop
+  device all
+
+  # Drop all INVALID packets so they aren't even processed
+  rule -m conntrack --ctstate INVALID -j input-invalid
+
+  # Allow ALL connections that have already been established by this host
+  #rule -m state --state ESTABLISHED,RELATED -j ACCEPT
+  rule -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
+
+  # send to whitelist and blacklist, which should return here.
+  rule -j input-blacklist
+  rule -j input-whitelist
+
+  # Drop multicasts and broadcasts, they should not exist for a router and in most cases should be avoided.
+  # unicasts are the normal behavior and blocking them would be very unusual.
+  rule -m pkttype --pkt-type broadcast -j input-casting
+  rule -m pkttype --pkt-type multicast -j input-casting
+  #rule -m pkttype --pkt-type unicast -j input-casting
+
+  # send all tcp packets to the tcp queue
+  protocol tcp
+  rule -m state --state NEW -j input-tcp
+
+  # send all udp packets to the udp queue
+  protocol udp
+  rule -m state --state NEW -j input-udp
+
+  # send all icmp packets to the icmp queue
+  protocol icmp
+  rule -m state --state NEW -j input-icmp
+
+  # send all icmpv6 packets to the icmpv6 queue
+  protocol icmpv6
+  rule -m state --state NEW -j input-icmpv6
+
+  # load custom device-specific rules
+  rule -j input-devices
+
+  # remaining packets
+  rule -j DROP
+
+
+input-invalid:
+  direction input
+  protocol none
+
+  # silently drop invalid RST tcp packets instead of sending a RST back.
+  protocol tcp
+  rule --tcp-flags RST RST -j DROP
+
+  # invalid FIN,ACK (server is wanting a FIN response), silently DROP it, send RST back, or send a FIN back.
+  #rule --tcp-flags ALL ACK,FIN -j DROP
+  #rule --tcp-flags ALL ACK,FIN -j REJECT --reject-with tcp-reset
+  rule --tcp-flags ALL ACK,FIN -j ACCEPT
+
+
+  # remaining packets
+  protocol none
+  rule -j DROP
+
+
+input-invalid-stream:
+  direction input
+  protocol tcp
+
+  # remaining packets
+  rule -j REJECT --reject-with tcp-reset
+
+
+input-loop:
+  direction input
+  protocol none
+
+  # allow cups via loopback.
+  protocol tcp
+  tool iptables
+  rule --sport 631 -s 127.0.0.0/8 -d 127.0.0.0/8 -j ACCEPT
+  rule --dport 631 -s 127.0.0.0/8 -d 127.0.0.0/8 -j ACCEPT
+
+  # allow local dns server
+  #protocol udp
+  #rule --dport 53 -s 127.0.0.0/8 -d 127.0.1.1 -j ACCEPT
+
+  # this is the localhost address, valid localhost are allowed to return to the previous chain.
+  protocol none
+  rule -s 127.0.0.0/8 -d 127.0.0.0/8 -j RETURN
+
+  # it may be necessay to add a return for individual ips because there are some cases that result in non-localhost addresses going through loopback.
+  #rule -s 192.168.0.1 -d 192.168.0.1 -j RETURN
+  tool ip46tables
+
+  # remaining packets
+  rule -j DROP
+
+
+input-blacklist:
+  direction input
+  protocol none
+
+
+input-whitelist:
+  direction input
+  protocol none
+
+
+input-devices:
+  direction input
+  protocol none
+
+  # add device-specific rules here.
+
+
+input-tcp:
+  direction input
+  protocol tcp
+
+  # Resist TCP sequence number spoof attacks.
+  rule --tcp-flags SYN,ACK SYN,ACK -m conntrack --ctstate NEW -j input-invalid
+
+  # TCP streams must always start with SYN, all others are invalid and may be an attack.
+  rule ! --syn -m conntrack --ctstate NEW -j input-invalid-stream
+
+  # Prevent an XMAS attacks
+  rule --tcp-flags ALL FIN,URG,PSH -j input-invalid
+  rule --tcp-flags ALL ALL -j input-invalid
+  rule --tcp-flags ALL SYN,RST,ACK,FIN,URG -j input-invalid
+
+  # Prevent NULL attack
+  rule --tcp-flags ALL NONE -j input-invalid
+
+  # Prevent Sync Reset Attacks
+  rule --tcp-flags SYN,RST SYN,RST -j input-invalid
+  rule --tcp-flags SYN,FIN SYN,FIN -j input-invalid
+
+  # Postgresql standard port
+  #rule --dport 5432 -j ACCEPT
+
+  # Mysql standard port
+  #rule --dport 5432 -j ACCEPT
+
+  # Oracle standard port
+  #rule --dport 1521 -j ACCEPT
+
+  # Web standard ports
+  #rule -m multiport --dports 80,443,8080,8181,8443,8099,9000 -j ACCEPT
+
+  # ldap standard ports
+  #rule -m multiport --dports 389,636,1636 -j ACCEPT
+
+  # mail standard ports
+  #rule -m multiport --dports 25,465,993 -j ACCEPT
+
+  # ssh standard port
+  #rule --dport 22 -j ACCEPT
+
+  # common chef ssh ports
+  #rule --dport 2200:2210 -j ACCEPT
+
+  # gpg standard port
+  #rule --dport 9050 -j ACCEPT
+
+  # ftp standard port
+  #rule --dport 21 -j ACCEPT
+
+  # dns standard port (via tcp)
+  #rule --dport 53 -j ACCEPT
+
+  # rdp standard port
+  #rule --dport 3389 -j ACCEPT
+
+  # spice standard ports
+  #rule -m multiport --dports 5900:5905 -j ACCEPT
+
+  # allow high ports
+  #rule -m multiport --dports 49152:65535 -j ACCEPT
+
+  # accept all loopback
+  tool iptables
+  rule -d 127.0.0.0/8 -j ACCEPT
+  tool ip6tables
+  rule -d ::1 -j ACCEPT
+  tool ip46tables
+
+
+input-udp:
+  direction input
+  protocol udp
+
+  # openvpn standard port
+  #rule --dport 1194 -j ACCEPT
+
+  # dns standard port
+  #rule --dport 53 -j ACCEPT
+
+  # mdns standard port
+  #rule --dport 5353 -j ACCEPT
+
+  # dhcp standard port
+  rule --sport 67:68 --dport 67:68 -j ACCEPT
+
+  # ntp standard port
+  #rule --dport 123 -j ACCEPT
+
+  # teeworlds game server and client
+  #rule --dport 8300:8310 -j ACCEPT
+
+  # allow high ports
+  #rule -m multiport --dports 49152:65535 -j ACCEPT
+
+  # accept all loopback
+  tool iptables
+  rule -d 127.0.0.0/8 -j ACCEPT
+  tool ip6tables
+  rule -d ::1 -j ACCEPT
+  tool ip46tables
+
+
+input-icmp:
+  direction input
+  protocol icmp
+  tool iptables
+
+  # destination unreachable
+  rule --icmp-type 3 -j ACCEPT
+
+  # redirect
+  rule --icmp-type 5 -j ACCEPT
+
+  # (outgoing) ping
+  rule --icmp-type 0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
+
+  # time exceeded
+  rule --icmp-type 11 -j ACCEPT
+
+  # parameter problem
+  rule --icmp-type 12 -j ACCEPT
+
+  # all loopback ICMP traffic
+  tool iptables
+  rule -i lo -s 127.0.0.0/8 -d 127.0.0.0/8 -j ACCEPT
+  tool ip46tables
+
+  # remaining packets
+  rule -j DROP
+
+
+input-icmpv6:
+  direction input
+  protocol icmp
+  tool ip6tables
+
+
+input-casting:
+  direction input
+  protocol none
+  tool ip46tables
+
+  # do not auto-drop dhcp messages sent from a dhcp server to a local dhcp client.
+  # dhcp offer/acknowledge (the source address must be the routers address, so do not allow 0.0.0.0/0)
+  protocol udp
+  tool iptables
+  rule --sport 67 -d 255.255.255.255 --dport 68 -j RETURN
+  protocol none
+  tool ip46tables
+
+  # drop all remaining broadcasts and multicasts
+  rule -j DROP
+
+
+OUTPUT:
+  # main output chain, expect this to act as the final RETURN handler.
+  direction output
+  protocol none
+
+  # handle local (loopback) connections.
+  device lo
+  rule -j output-loop
+  device all
+
+  # Drop all INVALID packets so they aren't even processed
+  rule -m conntrack --ctstate INVALID -j output-invalid
+
+  # Allow ALL connections that have already been established by this host
+  #rule -m state --state ESTABLISHED,RELATED -j ACCEPT
+  rule -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
+
+  # send to whitelist and blacklist, which should return here.
+  rule -j input-blacklist
+  rule -j input-whitelist
+
+  # Drop multicasts and broadcasts, they should not exist for a router and in most cases should be avoided.
+  # unicasts are the normal behavior and blocking them would be very unusual.
+  rule -m pkttype --pkt-type broadcast -j output-casting
+  rule -m pkttype --pkt-type multicast -j output-casting
+  #rule -m pkttype --pkt-type unicast -j output-casting
+
+  # send all tcp packets to the tcp queue
+  protocol tcp
+  rule -m state --state NEW -j output-tcp
+
+  # send all udp packets to the udp queue
+  protocol udp
+  rule -m state --state NEW -j output-udp
+
+  # send all icmp packets to the icmp queue
+  protocol icmp
+  rule -m state --state NEW -j output-icmp
+
+  # send all icmpv6 packets to the icmpv6 queue
+  protocol icmpv6
+  rule -m state --state NEW -j output-icmpv6
+
+  # load custom device-specific rules
+  rule -j input-devices
+
+  # remaining packets
+  rule -j DROP
+
+
+output-invalid:
+  direction output
+  protocol none
+
+  # remaining packets
+  rule -j DROP
+
+
+output-invalid-stream:
+  direction input
+  protocol tcp
+
+  # remaining packets
+  rule -j REJECT --reject-with tcp-reset
+
+
+output-loop:
+  direction output
+  protocol none
+
+  # allow cups via loopback.
+  protocol tcp
+  tool iptables
+  rule --sport 631 -s 127.0.0.0/8 -d 127.0.0.0/8 -j ACCEPT
+  rule --dport 631 -s 127.0.0.0/8 -d 127.0.0.0/8 -j ACCEPT
+
+  # allow local dns server
+  #protocol udp
+  #rule --sport 53 -s 127.0.1.1 -d 127.0.0.0/8 -j ACCEPT
+
+  # this is the localhost address, valid localhost are allowed to return to the previous chain.
+  protocol none
+  rule -s 127.0.0.0/8 -d 127.0.0.0/8 -j RETURN
+
+  # it may be necessay to add a return for individual ips because there are some cases that result in non-localhost addresses going through loopback.
+  #rule -s 192.168.0.1 -d 192.168.0.1 -j RETURN
+  tool ip46tables
+
+  # remaining packets
+  rule -j DROP
+
+
+output-blacklist:
+  direction output
+  protocol none
+
+
+output-whitelist:
+  direction output
+  protocol none
+
+
+output-devices:
+  direction output
+  protocol none
+
+  # add device-specific rules here.
+
+
+output-tcp:
+  direction output
+  protocol tcp
+
+  # allow sending TCP RST even when there is no valid local connection
+  protocol tcp
+  rule --tcp-flags RST RST -j ACCEPT
+
+  # allow sending ACK,PSH,FIN even when there is no valid local connection.
+  # the connection may already be closed locally by the time this packet goes out and it could improperly be marked as invalid before it leaves the system.
+  # allowing this ensures that the client gets the final disconnect acknowledgment.
+  rule --tcp-flags ALL ACK,FIN -j ACCEPT
+  rule --tcp-flags ALL ACK,PSH,FIN -j ACCEPT
+
+  # Resist TCP sequence number spoof attacks.
+  rule --tcp-flags SYN,ACK SYN,ACK -m conntrack --ctstate NEW -j input-invalid
+
+  # TCP streams must always start with SYN, all others are invalid and may be an attack.
+  rule ! --syn -m conntrack --ctstate NEW -j output-invalid-stream
+
+  # Prevent an XMAS attacks
+  rule --tcp-flags ALL FIN,URG,PSH -j output-invalid
+  rule --tcp-flags ALL ALL -j output-invalid
+  rule --tcp-flags ALL SYN,RST,ACK,FIN,URG -j output-invalid
+
+  # Prevent NULL attack
+  rule --tcp-flags ALL NONE -j output-invalid
+
+  # Prevent Sync Reset Attacks
+  rule --tcp-flags SYN,RST SYN,RST -j output-invalid
+  rule --tcp-flags SYN,FIN SYN,FIN -j output-invalid
+
+  # Postgresql standard port
+  #rule --sport 5432 -j ACCEPT
+
+  # Mysql standard port
+  #rule --sport 5432 -j ACCEPT
+
+  # Oracle standard port
+  #rule --sport 1521 -j ACCEPT
+
+  # Web standard ports
+  rule -m multiport --dports 80,443,8080,8181,8443,8099,9000 -j ACCEPT
+  #rule -m multiport --sports 80,443,8080,8181,8443,8099,9000 -j ACCEPT
+
+  # ldap standard ports
+  rule -m multiport --dports 389,636,1636 -j ACCEPT
+  #rule -m multiport --sports 389,636,1636 -j ACCEPT
+
+  # mail standard ports
+  rule -m multiport --dports 25,465,993 -j ACCEPT
+  #rule -m multiport --sports 25,465,993 -j ACCEPT
+
+  # ssh standard port
+  rule --dport 22 -j ACCEPT
+  #rule --sport 22 -j ACCEPT
+
+  # common chef ssh ports
+  #rule --dport 2200:2210 -j ACCEPT
+  #rule --sport 2200:2210 -j ACCEPT
+
+  # gpg standard port
+  rule --dport 9050 -j ACCEPT
+  #rule --sport 9050 -j ACCEPT
+
+  # pgp keyserver port
+  rule --dport 11371 -j ACCEPT
+
+  # ftp standard port
+  rule --dport 21 -j ACCEPT
+  #rule --sport 21 -j ACCEPT
+
+  # dns standard port (via tcp)
+  rule --dport 53 -j ACCEPT
+  #rule --sport 53 -j ACCEPT
+
+  # rdp standard port
+  rule --dport 3389 -j ACCEPT
+  #rule --sport 3389 -j ACCEPT
+
+  # spice standard ports
+  rule -m multiport --dports 5900:5905 -j ACCEPT
+  #rule -m multiport --sports 5900:5905 -j ACCEPT
+
+  # allow high ports
+  rule -m multiport --sports 49152:65535 -j ACCEPT
+  #rule -m multiport --dports 49152:65535 -j ACCEPT
+
+  # accept all loopback
+  tool iptables
+  rule -s 127.0.0.0/8 -j ACCEPT
+  tool ip6tables
+  rule -d ::1 -j ACCEPT
+  tool ip46tables
+
+
+output-udp:
+  direction output
+  protocol udp
+
+  # openvpn standard port
+  rule --dport 1194 -j ACCEPT
+  #rule --sport 1194 -j ACCEPT
+
+  # dns standard port
+  rule --dport 53 -j ACCEPT
+  #rule --sport 53 -j ACCEPT
+
+  # mdns standard port
+  #rule --dport 5353 -j ACCEPT
+  #rule --sport 5353 -j ACCEPT
+
+  # allow high ports
+  rule -m multiport --sports 49152:65535 -j ACCEPT
+  #rule -m multiport --dports 49152:65535 -j ACCEPT
+
+  # dhcp standard port
+  rule --sport 67:68 --dport 67:68 -j ACCEPT
+
+  # ntp standard port
+  rule --dport 123 -j ACCEPT
+  #rule --sport 123 -j ACCEPT
+
+  # teeworlds game server and client
+  #rule --dport 8300:8310 -j ACCEPT
+
+  # accept all loopback
+  tool iptables
+  rule -s 127.0.0.0/8 -j ACCEPT
+  tool ip6tables
+  rule -d ::1 -j ACCEPT
+  tool ip46tables
+
+
+output-icmp:
+  direction output
+  protocol icmp
+  tool iptables
+
+  # destination unreachable
+  rule --icmp-type 3 -j ACCEPT
+
+  # redirect
+  rule --icmp-type 5 -j ACCEPT
+
+  # (outgoing) ping
+  rule --icmp-type 8 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
+
+  # time exceeded
+  rule --icmp-type 11 -j ACCEPT
+
+  # parameter problem
+  rule --icmp-type 12 -j ACCEPT
+
+  # all loopback ICMP traffic
+  tool iptables
+  rule -o lo -s 127.0.0.0/8 -d 127.0.0.0/8 -j ACCEPT
+  tool ip46tables
+
+  # remaining packets
+  rule -j DROP
+
+
+output-icmpv6:
+  direction output
+  protocol icmp
+  tool ip6tables
+
+
+output-casting:
+  direction output
+  protocol none
+  tool ip46tables
+
+  # do not auto-drop dhcp client messages sent to a dhcp server.
+  # dhcp discover/request (for the request, the dhcp server ip address is known but for some reason the dhcp standard states tat the src is 0.0.0.0.
+  protocol udp
+  tool iptables
+  rule --sport 68 -d 255.255.255.255 --dport 67 -j RETURN
+  protocol none
+  tool ip46tables
+
+  # drop all remaining broadcasts and multicasts
+  rule -j DROP
+
+
+FORWARD:
+
+  # load custom device-specific rules
+  rule -j forward-devices
+
+
+forward-devices:
+
+  # add device-specific rules here.
diff --git a/level_3/firewall/build/settings/network/firewall-last b/level_3/firewall/build/settings/network/firewall-last
new file mode 100644 (file)
index 0000000..1f8375b
--- /dev/null
@@ -0,0 +1,2 @@
+# fss-0002
+
diff --git a/level_3/firewall/build/settings/network/firewall-other b/level_3/firewall/build/settings/network/firewall-other
new file mode 100644 (file)
index 0000000..5112a34
--- /dev/null
@@ -0,0 +1,69 @@
+# fss-0002
+
+stop:
+  action policy
+
+  chain INPUT
+  rule ACCEPT
+
+  chain OUTPUT
+  rule ACCEPT
+
+  chain FORWARD
+  rule ACCEPT
+
+  chain none
+  direction none
+  action none
+  rule -t filter --flush
+
+  tool iptables
+  rule -t nat --flush
+  rule -t mangle --flush
+  tool ip46tables
+
+  rule --delete-chain
+
+  tool iptables
+  rule -t nat --delete-chain
+  rule -t mangle --delete-chain
+  tool ip46tables
+
+
+lock:
+  action policy
+
+  chain INPUT
+  rule DROP
+
+  chain OUTPUT
+  rule DROP
+
+  chain FORWARD
+  rule DROP
+
+  chain none
+  direction none
+  action none
+  rule --flush
+
+  tool iptables
+  rule -t nat --flush
+  rule -t mangle --flush
+  tool ip46tables
+
+  rule --delete-chain
+
+  tool iptables
+  rule -t nat --delete-chain
+  rule -t mangle --delete-chain
+  tool ip46tables
+
+  device lo
+  action insert
+  direction output
+  chain OUTPUT
+  rule -j ACCEPT
+  direction input
+  chain INPUT
+  rule -j ACCEPT
diff --git a/level_3/firewall/build/stage/skeleton-settings.built b/level_3/firewall/build/stage/skeleton-settings.built
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/level_3/firewall/build/stage/sources_documentation-settings.built b/level_3/firewall/build/stage/sources_documentation-settings.built
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/level_3/firewall/build/stage/sources_headers-settings.built b/level_3/firewall/build/stage/sources_headers-settings.built
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/level_3/firewall/build/stage/sources_settings-settings.built b/level_3/firewall/build/stage/sources_settings-settings.built
new file mode 100644 (file)
index 0000000..e69de29
index fe51fbf631a20d61afdda144b7dc786d16a8a855..31e58164a9a2c32a7f071f6bc0e70dd8132d10b8 100644 (file)
 #include <fll/level_0/memory.h>
 #include <fll/level_0/string.h>
 #include <fll/level_0/utf.h>
-#include <fll/level_0/color.h>
 #include <fll/level_0/compare.h>
 #include <fll/level_0/console.h>
-#include <fll/level_0/conversion.h>
 #include <fll/level_0/directory.h>
 #include <fll/level_0/fss.h>
 #include <fll/level_0/file.h>
 #include <fll/level_0/pipe.h>
 #include <fll/level_0/print.h>
-#include <fll/level_0/rip.h>
 #include <fll/level_0/signal.h>
 #include <fll/level_0/thread.h>
 
 // FLL-1 includes.
-#include <fll/level_1/conversion.h>
-#include <fll/level_1/fss.h>
 #include <fll/level_1/print.h>
 
 // FLL-2 includes.
 #include <program/firewall/main/print/warning.h>
 #include <program/firewall/main/operate.h>
 #include <program/firewall/main/operate/buffer.h>
+#include <program/firewall/main/operate/chains.h>
 #include <program/firewall/main/operate/create.h>
 #include <program/firewall/main/operate/default.h>
 #include <program/firewall/main/operate/delete.h>
 #include <program/firewall/main/operate/process.h>
+#include <program/firewall/main/operate/rules.h>
+#include <program/firewall/main/operate/show.h>
 #include <program/firewall/main/signal.h>
 #include <program/firewall/main/thread.h>
 
index 2927a03d7f6ab7abff6ad3e8f4a3b97c258cc697..606e6344678e44a0687a1cb4180a27288717835d 100644 (file)
@@ -241,157 +241,6 @@ extern "C" {
   }
 #endif // _di_firewall_operate_
 
-#ifndef _di_firewall_operate_chains_
-  void firewall_operate_chains(firewall_main_t * const main) {
-
-    if (!main || F_status_is_error_not(main->setting.state.status) && main->setting.state.status == F_child) return;
-
-    for (f_number_unsigned_t i = 0; i < main->data.chain_contents.used; ++i) {
-
-      main->data.range = main->data.chain_contents.array[i].array[0];
-
-      if ((main->data.has & firewall_data_has_main_e) && i == main->data.main) {
-        main->data.is |= firewall_data_is_main_e;
-      }
-      else {
-        main->data.is &= ~firewall_data_is_main_e;
-      }
-
-      main->data.chain = i;
-
-      firewall_operate_buffer_rules(main);
-
-      firewall_operate_rules(main);
-
-      if (F_status_is_error(main->setting.state.status) || (main->setting.flag & firewall_main_flag_operation_stop_e) || main->setting.state.status == F_child) return;
-    } // for
-
-    main->setting.state.status = F_okay;
-  }
-#endif // _di_firewall_operate_chains_
-
-#ifndef _di_firewall_operate_rules_
-  void firewall_operate_rules(firewall_main_t * const main) {
-
-    if (!main || F_status_is_error_not(main->setting.state.status) && main->setting.state.status == F_child) return;
-
-    firewall_operate_process_rules(main);
-
-    if (F_status_is_error(main->setting.state.status)) {
-      if (F_status_set_fine(main->setting.state.status) != F_failure && F_status_set_fine(main->setting.state.status) != F_interrupt) {
-        firewall_print_error_unhandled(&main->program.error, macro_firewall_f(firewall_operate_process_rules), f_string_empty_s);
-      }
-
-      return;
-    }
-
-    main->setting.state.status = F_okay;
-  }
-#endif // _di_firewall_operate_rules_
-
-#ifndef _di_firewall_operate_show_
-  void firewall_operate_show(firewall_main_t * const main) {
-
-    if (!main) return;
-
-    int return_code = 0;
-
-    f_string_statics_t parameters = f_string_statics_t_initialize;
-    parameters.used = 6;
-
-    f_string_static_t show_nats[] = {
-      firewall_show_parameter_exact_s,
-      firewall_show_parameter_verbose_s,
-      firewall_show_parameter_table_s,
-      firewall_show_nat_s,
-      firewall_show_parameter_numeric_s,
-      firewall_show_parameter_list_s,
-    };
-
-    f_string_static_t show_mangles[] = {
-      firewall_show_parameter_exact_s,
-      firewall_show_parameter_verbose_s,
-      firewall_show_parameter_table_s,
-      firewall_show_mangle_s,
-      firewall_show_parameter_numeric_s,
-      firewall_show_parameter_list_s,
-    };
-
-    f_string_static_t show_filters[] = {
-      firewall_show_parameter_exact_s,
-      firewall_show_parameter_verbose_s,
-      firewall_show_parameter_numeric_s,
-      firewall_show_parameter_list_s,
-    };
-
-    f_string_static_t * const show_arrays[] = {
-      show_nats,
-      show_mangles,
-      show_filters,
-    };
-
-    const f_number_unsigned_t show_lengths[] = {
-      6,
-      6,
-      4,
-    };
-
-    const f_string_static_t show_lefts[] = {
-      firewall_print_show_bars_27_s,
-      firewall_print_show_bars_26_s,
-      firewall_print_show_bars_26_s,
-    };
-
-    const f_string_static_t show_headers[] = {
-      firewall_print_show_nat_s,
-      firewall_print_show_mangle_s,
-      firewall_print_show_filter_s,
-    };
-
-    const f_string_static_t show_rights[] = {
-      firewall_print_show_bars_28_s,
-      firewall_print_show_bars_26_s,
-      firewall_print_show_bars_26_s,
-    };
-
-    const uint16_t show_flags[] = {
-      firewall_main_flag_operation_show_nat_e,
-      firewall_main_flag_operation_show_mangle_e,
-      firewall_main_flag_operation_show_filter_e,
-    };
-
-    for (uint8_t i = 0; i < 3; ++i) {
-
-      if (!show_flags[i]) continue;
-
-      parameters.array = show_arrays[i];
-      parameters.used = show_lengths[i];
-      return_code = 0;
-
-      firewall_print_message_show_header(&main->program.output, show_lefts[i], show_headers[i], show_rights[i]);
-
-      main->setting.state.status = fll_execute_program(firewall_tool_iptables_s, parameters, 0, 0, (void *) &return_code);
-
-      if (main->setting.state.status == F_child) {
-        main->program.child = return_code;
-
-        return;
-      }
-
-      fll_print_dynamic_raw(f_string_eol_s, main->program.output.to);
-      f_file_stream_flush(main->program.output.to);
-
-      if (F_status_is_error(main->setting.state.status)) {
-        firewall_print_error_operation(&main->program.error, firewall_tool_iptables_s, parameters);
-
-        return;
-      }
-    } // for
-
-    main->setting.state.status = F_okay;
-  }
-#endif // _di_firewall_operate_show_
-
 #ifdef __cplusplus
 } // extern "C"
 #endif
index 81b6109dd54f57462c0e7bac6cc5c5e330e891a6..a62d0b3b995ec5c53d1a123e2ec0182474d854fc 100644 (file)
@@ -52,74 +52,6 @@ extern "C" {
   extern void firewall_operate(firewall_main_t * const main);
 #endif // _di_firewall_operate_
 
-/**
- * Load and operate the each of the Content chains.
- *
- * @param main
- *   The main program and setting data.
- *
- *   This alters:
- *     - main.data.is.
- *     - main.data.range.
- *
- *   This alters main.setting.state.status:
- *     F_okay on success.
- *
- *     F_interrupt (with error bit) on interrupt signal received.
- *
- *     Errors (with error bit) from: firewall_operate_rules()
- *
- * @see firewall_operate_rules()
- */
-#ifndef _di_firewall_operate_chains_
-  extern void firewall_operate_chains(firewall_main_t * const main);
-#endif // _di_firewall_operate_chains_
-
-/**
- * Perform the firewall show operation.
- *
- * @param main
- *   The main program and setting data.
- *
- *   This alters main.setting.state.status:
- *     F_okay on success.
- *     F_child on child process exiting.
- *
- *     F_interrupt (with error bit) on interrupt signal received.
- *
- *     Errors (with error bit) from: fll_execute_program()
- *     Errors (with error bit) from: fll_print_dynamic_raw()
- *
- * @see fll_execute_program()
- * @see fll_print_dynamic_raw()
- */
-#ifndef _di_firewall_operate_show_
-  extern void firewall_operate_show(firewall_main_t * const main);
-#endif // _di_firewall_operate_show_
-
-/**
- * Operate the rules.
- *
- * @param main
- *   The main program and setting data.
- *
- *   This alters main.setting.state.status:
- *     F_okay on success.
- *
- *     F_interrupt (with error bit) on interrupt signal received.
- *
- *     Errors (with error bit) from: f_fss_apply_delimit()
- *     Errors (with error bit) from: firewall_operate_process_rules()
- *     Errors (with error bit) from: fll_fss_extended_read()
- *
- * @see f_fss_apply_delimit()
- * @see firewall_operate_process_rules()
- * @see fll_fss_extended_read()
- */
-#ifndef _di_firewall_operate_rules_
-  extern void firewall_operate_rules(firewall_main_t * const main);
-#endif // _di_firewall_operate_rules_
-
 #ifdef __cplusplus
 } // extern "C"
 #endif
index 3a2a1a861c1b235ac7544698c33d4e1d7e8573f1..eb48406c285fdba309ac85eba6970ef2fbe08f64 100644 (file)
@@ -5,7 +5,7 @@
  * API Version: 0.7
  * Licenses: lgpl-2.1-or-later
  *
- * Provides the buffer functionality.
+ * Provides the operate buffer functionality.
  *
  * This is auto-included and should not need to be explicitly included.
  */
diff --git a/level_3/firewall/c/main/operate/chains.c b/level_3/firewall/c/main/operate/chains.c
new file mode 100644 (file)
index 0000000..cc50f31
--- /dev/null
@@ -0,0 +1,38 @@
+#include "../firewall.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _di_firewall_operate_chains_
+  void firewall_operate_chains(firewall_main_t * const main) {
+
+    if (!main || F_status_is_error_not(main->setting.state.status) && main->setting.state.status == F_child) return;
+
+    for (f_number_unsigned_t i = 0; i < main->data.chain_contents.used; ++i) {
+
+      main->data.range = main->data.chain_contents.array[i].array[0];
+
+      if ((main->data.has & firewall_data_has_main_e) && i == main->data.main) {
+        main->data.is |= firewall_data_is_main_e;
+      }
+      else {
+        main->data.is &= ~firewall_data_is_main_e;
+      }
+
+      main->data.chain = i;
+
+      firewall_operate_buffer_rules(main);
+
+      firewall_operate_rules(main);
+
+      if (F_status_is_error(main->setting.state.status) || (main->setting.flag & firewall_main_flag_operation_stop_e) || main->setting.state.status == F_child) return;
+    } // for
+
+    main->setting.state.status = F_okay;
+  }
+#endif // _di_firewall_operate_chains_
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
diff --git a/level_3/firewall/c/main/operate/chains.h b/level_3/firewall/c/main/operate/chains.h
new file mode 100644 (file)
index 0000000..6c80b75
--- /dev/null
@@ -0,0 +1,46 @@
+/**
+ * FLL - Level 3
+ *
+ * Project: Firewall
+ * API Version: 0.7
+ * Licenses: lgpl-2.1-or-later
+ *
+ * Provides the operate chains functionality.
+ *
+ * This is auto-included and should not need to be explicitly included.
+ */
+#ifndef _firewall_operate_chains_h
+#define _firewall_operate_chains_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Load and operate the each of the Content chains.
+ *
+ * @param main
+ *   The main program and setting data.
+ *
+ *   This alters:
+ *     - main.data.is.
+ *     - main.data.range.
+ *
+ *   This alters main.setting.state.status:
+ *     F_okay on success.
+ *
+ *     F_interrupt (with error bit) on interrupt signal received.
+ *
+ *     Errors (with error bit) from: firewall_operate_rules()
+ *
+ * @see firewall_operate_rules()
+ */
+#ifndef _di_firewall_operate_chains_
+  extern void firewall_operate_chains(firewall_main_t * const main);
+#endif // _di_firewall_operate_chains_
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif // _firewall_operate_chains_h
index 918605348e2a781a038932e12e3cd49e4117d6d0..676fd77d0ed04a39a31a2369df0a8af9809f53d3 100644 (file)
@@ -34,6 +34,8 @@ extern "C" {
       return;
     }
 
+    main->cache.arguments.array[0].used = 0;
+    main->cache.arguments.array[1].used = 0;
     main->data.chain_ids.used = main->data.chain_objects.used;
     memset(main->data.chain_ids.array, 0, sizeof(f_number_unsigned_t) * main->data.chain_ids.used);
 
@@ -170,11 +172,12 @@ extern "C" {
         }
 
         if (create_chain) {
-          firewall_print_debug_tool(&main->program.warning, firewall_tool_iptables_s, main->cache.arguments);
-
           tool = firewall_tool_iptables_s;
+          return_code = 0;
+
+          firewall_print_debug_tool(&main->program.warning, tool, main->cache.arguments);
 
-          main->setting.state.status = fll_execute_program(firewall_tool_iptables_s, main->cache.arguments, 0, 0, (void *) &return_code);
+          main->setting.state.status = fll_execute_program(tool, main->cache.arguments, 0, 0, (void *) &return_code);
 
           if (main->setting.state.status == F_child) {
             main->program.child = return_code;
@@ -184,12 +187,21 @@ extern "C" {
 
           if (firewall_signal_check(main)) return;
 
+          if (return_code && F_status_is_error_not(main->setting.state.status)) {
+            firewall_print_error_operation_return_code(&main->program.error, tool, main->cache.arguments, return_code);
+          }
+
           if (F_status_is_error_not(main->setting.state.status) && main->setting.state.status != F_child) {
             tool = firewall_tool_ip6tables_s;
+            return_code = 0;
+
+            firewall_print_debug_tool(&main->program.warning, tool, main->cache.arguments);
 
-            firewall_print_debug_tool(&main->program.warning, firewall_tool_ip6tables_s, main->cache.arguments);
+            main->setting.state.status = fll_execute_program(tool, main->cache.arguments, 0, 0, (void *) &return_code);
 
-            main->setting.state.status = fll_execute_program(firewall_tool_ip6tables_s, main->cache.arguments, 0, 0, (void *) &return_code);
+            if (return_code && F_status_is_error_not(main->setting.state.status)) {
+              firewall_print_error_operation_return_code(&main->program.error, tool, main->cache.arguments, return_code);
+            }
           }
 
           if (main->setting.state.status == F_child) {
index 0718c4607175dc453076ede3096d7f8fd498d6ca..306b74e6c3dc32b9f5370292728c3fb3806ca2a9 100644 (file)
@@ -5,7 +5,7 @@
  * API Version: 0.7
  * Licenses: lgpl-2.1-or-later
  *
- * Provides the create functionality.
+ * Provides the operate create functionality.
  *
  * This is auto-included and should not need to be explicitly included.
  */
index c9e0f2f5d42875a469f324378f9fcc83e3235111..31725bfc70490c871205db6e436cb9eb1445f3a5 100644 (file)
@@ -54,6 +54,9 @@ extern "C" {
 
           return;
         }
+        else if (return_code) {
+          firewall_print_error_operation_return_code(&main->program.error, tools[j], main->cache.arguments, return_code);
+        }
       } // for
     } // for
 
index 41a7c5dff23fe2e8f3602da03ceb0ea18ebf4447..e9de3e8d285846a825efc769540cba6902fa0e74 100644 (file)
@@ -5,7 +5,7 @@
  * API Version: 0.7
  * Licenses: lgpl-2.1-or-later
  *
- * Provides the default functionality.
+ * Provides the operate default functionality.
  *
  * This is auto-included and should not need to be explicitly included.
  */
index c198d1c70a33d2d22d2cf1e2fd5073c4f6e66cff..00e324a963b6ab23498a354ad35ac05ecc5135d1 100644 (file)
@@ -53,6 +53,9 @@ extern "C" {
 
           return;
         }
+        else if (return_code) {
+          firewall_print_error_operation_return_code(&main->program.error, tools[j], main->cache.arguments, return_code);
+        }
       } // for
     } // for
 
index cac86c148b0c6d96896f482c02cfacd1eeb3a12c..c177c933dd85ea01f5e9994c1d45d88ec86e8bd4 100644 (file)
@@ -5,7 +5,7 @@
  * API Version: 0.7
  * Licenses: lgpl-2.1-or-later
  *
- * Provides the delete functionality.
+ * Provides the operate delete functionality.
  *
  * This is auto-included and should not need to be explicitly included.
  */
index e601d8d1f54d50d6c044445933a9fda88a733653..7bc65b6835dd8b32c57935b1e22be3428f877178 100644 (file)
@@ -224,7 +224,7 @@ extern "C" {
             repeat = 1;
           }
           else if (f_compare_dynamic_partial_string(firewall_tool_ip46tables_s.string, main->data.buffer, firewall_tool_ip46tables_s.used, rule_contents->array[i].array[0]) == F_equal_to) {
-            tool = firewall_tool_iptables_s;
+            tool = firewall_tool_ip46tables_s;
             repeat = 2;
           }
           else {
@@ -258,7 +258,7 @@ extern "C" {
         main->setting.state.status = f_memory_array_increase(firewall_allocation_small_d, sizeof(f_string_dynamic_t), (void **) &main->cache.arguments.array, &main->cache.arguments.used, &main->cache.arguments.size);
         if (F_status_is_error(main->setting.state.status)) return;
 
-        if (tool.string == firewall_tool_ip46tables_s.string) {
+        if (repeat == 2) {
           tool = (j == 2) ? firewall_tool_iptables_s : firewall_tool_ip6tables_s;
         }
 
@@ -537,6 +537,7 @@ extern "C" {
                 }
 
                 ++main->cache.arguments.used;
+                return_code = 0;
 
                 firewall_print_debug_tool(&main->program.warning, tool, main->cache.arguments);
 
@@ -561,6 +562,9 @@ extern "C" {
 
                   return;
                 }
+                else if (return_code) {
+                  firewall_print_error_operation_return_code(&main->program.error, tool, main->cache.arguments, return_code);
+                }
               } // for
 
               // Remove ip_list_action from arguments string.
@@ -570,6 +574,8 @@ extern "C" {
             if (F_status_set_fine(main->setting.state.status) == F_failure || F_status_set_fine(main->setting.state.status) == F_parameter) return;
           }
           else {
+            return_code = 0;
+
             firewall_print_debug_tool(&main->program.warning, tool, main->cache.arguments);
 
             main->setting.state.status = fll_execute_program(tool, main->cache.arguments, 0, 0, (void *) &return_code);
@@ -590,6 +596,9 @@ extern "C" {
 
               return;
             }
+            else if (return_code) {
+              firewall_print_error_operation_return_code(&main->program.error, tool, main->cache.arguments, return_code);
+            }
           }
         }
       } // for
index e4a18bbdcfb4ec28dccb31e09bea660429f9abb2..241e88c9b028fe847be7e1fc838fcc801e979a69 100644 (file)
@@ -5,7 +5,7 @@
  * API Version: 0.7
  * Licenses: lgpl-2.1-or-later
  *
- * Provides the process functionality.
+ * Provides the operate process functionality.
  *
  * This is auto-included and should not need to be explicitly included.
  */
diff --git a/level_3/firewall/c/main/operate/rules.c b/level_3/firewall/c/main/operate/rules.c
new file mode 100644 (file)
index 0000000..a18a609
--- /dev/null
@@ -0,0 +1,28 @@
+#include "../firewall.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _di_firewall_operate_rules_
+  void firewall_operate_rules(firewall_main_t * const main) {
+
+    if (!main || F_status_is_error_not(main->setting.state.status) && main->setting.state.status == F_child) return;
+
+    firewall_operate_process_rules(main);
+
+    if (F_status_is_error(main->setting.state.status)) {
+      if (F_status_set_fine(main->setting.state.status) != F_failure && F_status_set_fine(main->setting.state.status) != F_interrupt) {
+        firewall_print_error_unhandled(&main->program.error, macro_firewall_f(firewall_operate_process_rules), f_string_empty_s);
+      }
+
+      return;
+    }
+
+    main->setting.state.status = F_okay;
+  }
+#endif // _di_firewall_operate_rules_
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
diff --git a/level_3/firewall/c/main/operate/rules.h b/level_3/firewall/c/main/operate/rules.h
new file mode 100644 (file)
index 0000000..0d77086
--- /dev/null
@@ -0,0 +1,46 @@
+/**
+ * FLL - Level 3
+ *
+ * Project: Firewall
+ * API Version: 0.7
+ * Licenses: lgpl-2.1-or-later
+ *
+ * Provides the operate rules functionality.
+ *
+ * This is auto-included and should not need to be explicitly included.
+ */
+#ifndef _firewall_operate_rules_h
+#define _firewall_operate_rules_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Operate the rules.
+ *
+ * @param main
+ *   The main program and setting data.
+ *
+ *   This alters main.setting.state.status:
+ *     F_okay on success.
+ *
+ *     F_interrupt (with error bit) on interrupt signal received.
+ *
+ *     Errors (with error bit) from: f_fss_apply_delimit()
+ *     Errors (with error bit) from: firewall_operate_process_rules()
+ *     Errors (with error bit) from: fll_fss_extended_read()
+ *
+ * @see f_fss_apply_delimit()
+ * @see firewall_operate_process_rules()
+ * @see fll_fss_extended_read()
+ */
+#ifndef _di_firewall_operate_rules_
+  extern void firewall_operate_rules(firewall_main_t * const main);
+#endif // _di_firewall_operate_rules_
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif // _firewall_operate_rules_h
diff --git a/level_3/firewall/c/main/operate/show.c b/level_3/firewall/c/main/operate/show.c
new file mode 100644 (file)
index 0000000..e347049
--- /dev/null
@@ -0,0 +1,117 @@
+#include "../firewall.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _di_firewall_operate_show_
+  void firewall_operate_show(firewall_main_t * const main) {
+
+    if (!main) return;
+
+    int return_code = 0;
+
+    f_string_statics_t parameters = f_string_statics_t_initialize;
+    parameters.used = 6;
+
+    f_string_static_t show_nats[] = {
+      firewall_show_parameter_exact_s,
+      firewall_show_parameter_verbose_s,
+      firewall_show_parameter_table_s,
+      firewall_show_nat_s,
+      firewall_show_parameter_numeric_s,
+      firewall_show_parameter_list_s,
+    };
+
+    f_string_static_t show_mangles[] = {
+      firewall_show_parameter_exact_s,
+      firewall_show_parameter_verbose_s,
+      firewall_show_parameter_table_s,
+      firewall_show_mangle_s,
+      firewall_show_parameter_numeric_s,
+      firewall_show_parameter_list_s,
+    };
+
+    f_string_static_t show_filters[] = {
+      firewall_show_parameter_exact_s,
+      firewall_show_parameter_verbose_s,
+      firewall_show_parameter_numeric_s,
+      firewall_show_parameter_list_s,
+    };
+
+    f_string_static_t * const show_arrays[] = {
+      show_nats,
+      show_mangles,
+      show_filters,
+    };
+
+    const f_number_unsigned_t show_lengths[] = {
+      6,
+      6,
+      4,
+    };
+
+    const f_string_static_t show_lefts[] = {
+      firewall_print_show_bars_27_s,
+      firewall_print_show_bars_26_s,
+      firewall_print_show_bars_26_s,
+    };
+
+    const f_string_static_t show_headers[] = {
+      firewall_print_show_nat_s,
+      firewall_print_show_mangle_s,
+      firewall_print_show_filter_s,
+    };
+
+    const f_string_static_t show_rights[] = {
+      firewall_print_show_bars_28_s,
+      firewall_print_show_bars_26_s,
+      firewall_print_show_bars_26_s,
+    };
+
+    const uint16_t show_flags[] = {
+      firewall_main_flag_operation_show_nat_e,
+      firewall_main_flag_operation_show_mangle_e,
+      firewall_main_flag_operation_show_filter_e,
+    };
+
+    for (uint8_t i = 0; i < 3; ++i) {
+
+      if (!show_flags[i]) continue;
+
+      parameters.array = show_arrays[i];
+      parameters.used = show_lengths[i];
+      return_code = 0;
+
+      // A newline should be printed before each inner message header, but not the first.
+      if (i) {
+        f_print_dynamic_raw(f_string_eol_s, main->program.output.to);
+      }
+
+      firewall_print_message_show_header(&main->program.output, show_lefts[i], show_headers[i], show_rights[i]);
+
+      main->setting.state.status = fll_execute_program(firewall_tool_iptables_s, parameters, 0, 0, (void *) &return_code);
+
+      if (main->setting.state.status == F_child) {
+        main->program.child = return_code;
+
+        return;
+      }
+
+      if (F_status_is_error(main->setting.state.status)) {
+        firewall_print_error_operation(&main->program.error, firewall_tool_iptables_s, parameters);
+
+        return;
+      }
+      else if (return_code) {
+        firewall_print_error_operation_return_code(&main->program.error, firewall_tool_iptables_s, main->cache.arguments, return_code);
+      }
+    } // for
+
+    main->setting.state.status = F_okay;
+  }
+#endif // _di_firewall_operate_show_
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
diff --git a/level_3/firewall/c/main/operate/show.h b/level_3/firewall/c/main/operate/show.h
new file mode 100644 (file)
index 0000000..33d4a81
--- /dev/null
@@ -0,0 +1,45 @@
+/**
+ * FLL - Level 3
+ *
+ * Project: Firewall
+ * API Version: 0.7
+ * Licenses: lgpl-2.1-or-later
+ *
+ * Provides the operate show functionality.
+ *
+ * This is auto-included and should not need to be explicitly included.
+ */
+#ifndef _firewall_operate_show_h
+#define _firewall_operate_show_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Perform the firewall show operation.
+ *
+ * @param main
+ *   The main program and setting data.
+ *
+ *   This alters main.setting.state.status:
+ *     F_okay on success.
+ *     F_child on child process exiting.
+ *
+ *     F_interrupt (with error bit) on interrupt signal received.
+ *
+ *     Errors (with error bit) from: fll_execute_program()
+ *     Errors (with error bit) from: fll_print_dynamic_raw()
+ *
+ * @see fll_execute_program()
+ * @see fll_print_dynamic_raw()
+ */
+#ifndef _di_firewall_operate_show_
+  extern void firewall_operate_show(firewall_main_t * const main);
+#endif // _di_firewall_operate_show_
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif // _firewall_operate_show_h
index 22220015213c11fda2ace14b7bd5c1dd19903edc..7e9c08647e0767e61cd697d1b9a13eb3a49e393f 100644 (file)
@@ -40,7 +40,7 @@ extern "C" {
 
     fl_print_format("%[%QNo relevant data is found within the file '%]", print->to, print->context, print->prefix, print->context);
     fl_print_format(f_string_format_Q_single_s.string, print->to, print->notable, file, print->notable);
-    fl_print_format(f_string_format_sentence_end_quote_s.string, print->to, print->set->error, print->set->error, f_string_eol_s);
+    fl_print_format(f_string_format_sentence_end_quote_s.string, print->to, print->context, print->context, f_string_eol_s);
 
     f_file_stream_unlock(print->to);
 
@@ -71,21 +71,21 @@ extern "C" {
     f_file_stream_lock(print->to);
 
     if (F_status_set_fine(main->setting.state.status) == F_memory_not) {
-      fl_print_format("%[%QOut of memory while performing requested %r operation:%]", print->to, print->context, print->prefix, tool, print->context);
+      fl_print_format("%[%QOut of memory while performing requested %r operation '%]", print->to, print->context, print->prefix, tool, print->context);
     }
     else {
-      fl_print_format("%[%QFailed to perform requested %r operation:%]", print->to, print->context, print->prefix, tool, print->context);
+      fl_print_format("%[%QFailed to perform requested %r operation '%]", print->to, print->context, print->prefix, tool, print->context);
     }
 
-    fl_print_format("%r  %[%Q", print->to, f_string_eol_s, print->context, tool);
+    fl_print_format("%[%Q", print->to, print->set->notable, tool);
 
     for (f_number_unsigned_t i = 0; i < arguments.used; ++i) {
       fl_print_format(" %Q", print->to, arguments.array[i]);
     } // for
 
-    fl_print_format("%[', error code%] ", print->to, print->set->error, print->set->error, f_string_eol_s);
+    fl_print_format("%]%[', error code is%] ", print->to, print->set->notable, print->context, print->context);
     fl_print_format(f_string_format_ui_single_s.string, print->to, print->set->notable, F_status_set_fine(main->setting.state.status), print->set->notable);
-    fl_print_format(f_string_format_sentence_end_s.string, print->to, print->set->error, print->set->error, f_string_eol_s);
+    fl_print_format(f_string_format_sentence_end_s.string, print->to, print->context, print->context, f_string_eol_s);
 
     f_file_stream_unlock(print->to);
 
@@ -117,6 +117,33 @@ extern "C" {
   }
 #endif // _di_firewall_print_error_operation_files_missing_
 
+#ifndef _di_firewall_print_error_operation_return_code_
+  f_status_t firewall_print_error_operation_return_code(fl_print_t * const print, const f_string_static_t tool, const f_string_statics_t arguments, const int return_code) {
+
+    if (!print || !print->custom) return F_status_set_error(F_output_not);
+    if (print->verbosity < f_console_verbosity_error_e) return F_output_not;
+
+    firewall_main_t * const main = (firewall_main_t *) print->custom;
+
+    f_file_stream_lock(print->to);
+
+    fl_print_format("%[%QThe operation '%]", print->to, print->context, print->prefix, tool, print->context);
+    fl_print_format("%[%Q", print->to, print->set->notable, tool);
+
+    for (f_number_unsigned_t i = 0; i < arguments.used; ++i) {
+      fl_print_format(" %Q", print->to, arguments.array[i]);
+    } // for
+
+    fl_print_format("%]%[' returned with code of%] ", print->to, print->set->notable, print->context, print->context);
+    fl_print_format(f_string_format_i_single_s.string, print->to, print->set->notable, return_code, print->set->notable);
+    fl_print_format(f_string_format_sentence_end_s.string, print->to, print->context, print->context, f_string_eol_s);
+
+    f_file_stream_unlock(print->to);
+
+    return F_okay;
+  }
+#endif // _di_firewall_print_error_operation_return_code_
+
 #ifndef _di_firewall_print_error_operation_specified_not_
   f_status_t firewall_print_error_operation_specified_not(fl_print_t * const print) {
 
@@ -147,7 +174,7 @@ extern "C" {
     if (file.used) {
       fl_print_format("%[() for the file%] ", print->to, print->context, print->prefix, print->context);
       fl_print_format(f_string_format_Q_single_s.string, print->to, print->notable, file, print->notable);
-      fl_print_format(f_string_format_sentence_end_s.string, print->to, print->set->error, print->set->error, f_string_eol_s);
+      fl_print_format(f_string_format_sentence_end_s.string, print->to, print->context, print->context, f_string_eol_s);
     }
     else {
       fl_print_format("%[().%]%r", print->to, print->context, print->context, f_string_eol_s);
index f42d8437039d8e45cea7e419e3f80b66d76dd865..0e13b3fd0909b1887af9983c1ca53ec859d3b184 100644 (file)
@@ -157,6 +157,30 @@ extern "C" {
 #endif // _di_firewall_print_error_operation_files_missing_
 
 /**
+ * Print an error about the given operation failed according to the given return code.
+ *
+ * @param print
+ *   The output structure to print to.
+ *
+ *   This does not alter print.custom.setting.state.status.
+ * @param tool
+ *   The tool, such as iptables, that failed.
+ * @param arguments
+ *   The arguments passed to the tool.
+ * @param return_code
+ *   The code returned by the tool.
+ *
+ * @return
+ *   F_okay on success.
+ *   F_output_not on success, but no printing is performed.
+ *
+ *   F_output_not (with error bit) if setting is NULL.
+ */
+#ifndef _di_firewall_print_error_operation_return_code_
+  extern f_status_t firewall_print_error_operation_return_code(fl_print_t * const print, const f_string_static_t tool, const f_string_statics_t arguments, const int return_code);
+#endif // _di_firewall_print_error_operation_return_code_
+
+/**
  * Print generic error message regarding a function failing in some way.
  *
  * @param print
index d106085ffc3e7c14d95a6451a10dce617d48b89d..dd92918c46323d3ad90881eaefcd88058fc7123b 100644 (file)
@@ -6,7 +6,7 @@ f_memory
 f_type_array
 f_string
 f_utf
-f_account
+f_abstruse
 f_capability
 f_color
 f_compare
@@ -31,6 +31,7 @@ f_thread
 fl_control_group
 fl_conversion
 fl_environment
+fl_execute
 fl_fss
 fl_print
 
index 6029200af0df3037bdcdd4d16a7233bc6972369b..be4d975a59cdcce96206b7c2692113827c7c0eb3 100644 (file)
@@ -31,21 +31,21 @@ build_indexer_arguments rcs
 build_language c
 
 build_libraries -lc -lcap
-build_libraries-individual -lfll_error -lfll_execute -lfll_fss -lfll_print -lfll_program -lfl_control_group -lfl_conversion -lfl_environment -lfl_fss -lfl_print -lf_account -lf_capability -lf_color -lf_compare -lf_console -lf_control_group -lf_conversion -lf_directory -lf_environment -lf_execute -lf_file -lf_fss -lf_limit -lf_memory -lf_parse -lf_path -lf_pipe -lf_print -lf_rip -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
+build_libraries-individual -lfll_error -lfll_execute -lfll_fss -lfll_print -lfll_program -lfl_control_group -lfl_conversion -lfl_environment -lfl_fss -lfl_print -lf_abstruse -lf_capability -lf_color -lf_compare -lf_console -lf_control_group -lf_conversion -lf_directory -lf_environment -lf_execute -lf_file -lf_fss -lf_limit -lf_memory -lf_parse -lf_path -lf_pipe -lf_print -lf_rip -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
 build_libraries-individual_thread -lf_thread
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 
 build_sources_library main/common.c main/common/define.c main/common/enumeration.c main/common/print.c main/common/string.c main/common/type.c
 build_sources_library main/print/debug.c main/print/error.c main/print/message.c main/print/warning.c
-build_sources_library main/operate.c main/operate/buffer.c main/operate/create.c main/operate/default.c main/operate/delete.c main/operate/process.c
+build_sources_library main/operate.c main/operate/buffer.c main/operate/chains.c main/operate/create.c main/operate/default.c main/operate/delete.c main/operate/process.c main/operate/rules.c main/operate/show.c
 build_sources_library main/firewall.c main/signal.c main/thread.c
 
 build_sources_program main/main.c
 
 build_sources_headers main/common.h main/common/define.h main/common/enumeration.h main/common/print.h main/common/string.h main/common/type.h
 build_sources_headers main/print/debug.h main/print/error.h main/print/message.h main/print/warning.h
-build_sources_headers main/operate.h main/operate/buffer.h main/operate/create.h main/operate/default.h main/operate/delete.h main/operate/process.h
+build_sources_headers main/operate.h main/operate/buffer.h main/operate/chains.h main/operate/create.h main/operate/default.h main/operate/delete.h main/operate/process.h main/operate/rules.h main/operate/show.h
 build_sources_headers main/firewall.h main/operate.h main/signal.h main/thread.h
 
 build_sources_documentation man