]> Kevux Git Server - fll/commitdiff
Progress: Continue program related work.
authorKevin Day <thekevinday@gmail.com>
Thu, 17 Nov 2022 04:39:45 +0000 (22:39 -0600)
committerKevin Day <thekevinday@gmail.com>
Thu, 17 Nov 2022 04:39:45 +0000 (22:39 -0600)
Clear the setting flags when calling the settings load function.

Clean up some print function inconsistencies.

33 files changed:
level_3/byte_dump/c/common.c
level_3/control/c/common.c
level_3/controller/c/common.c
level_3/fake/c/common.c
level_3/firewall/c/common.c
level_3/fss_basic_list_read/c/common.c
level_3/fss_basic_list_write/c/common.c
level_3/fss_basic_read/c/common.c
level_3/fss_basic_write/c/common.c
level_3/fss_embedded_list_read/c/common.c
level_3/fss_embedded_list_write/c/common.c
level_3/fss_embedded_list_write/c/fss_embedded_list_write.c
level_3/fss_extended_list_read/c/common.c
level_3/fss_extended_list_write/c/common.c
level_3/fss_extended_list_write/c/fss_extended_list_write.c
level_3/fss_extended_read/c/common.c
level_3/fss_extended_write/c/common.c
level_3/fss_identify/c/common.c
level_3/fss_payload_read/c/common.c
level_3/fss_payload_write/c/common.c
level_3/iki_read/c/common.c
level_3/iki_read/c/print.c
level_3/iki_write/c/common.c
level_3/iki_write/c/print.c
level_3/status_code/c/common.c
level_3/status_code/c/print.c
level_3/utf8/c/common.c
level_3/utf8/c/common.h
level_3/utf8/c/print.c
level_3/utf8/c/print.h
level_3/utf8/c/private-utf8_bytesequence.c
level_3/utf8/c/private-utf8_codepoint.c
level_3/utf8/c/utf8.c

index 9b991e22f05d7ac0999fbcf34ab9323977bb3799..f5b5aa27693e07dbf6252ec247a242a95d040250 100644 (file)
@@ -81,6 +81,8 @@ extern "C" {
 
     if (!main || !setting) return;
 
+    setting->flag = 0;
+
     // Load parameters.
     setting->status = f_console_parameter_process(arguments, &main->parameters);
 
index 8e2ad1e1a9386fbdb80984c41ad91077fb582fe2..81f18bd835ef1ee2331e1de516562e197adedb18 100644 (file)
@@ -184,6 +184,8 @@ extern "C" {
 
     if (!main || !setting) return;
 
+    setting->flag = 0;
+
     // Load parameters.
     setting->status = f_console_parameter_process(arguments, &main->parameters);
 
index 4d5fbdf765a65aad32b2713c10d2a727d4cc7f8a..c1ff3888429872e9c6d87832ca1e62410b35f932 100644 (file)
@@ -616,6 +616,8 @@ extern "C" {
 
     if (!main || !setting) return;
 
+    setting->flag = 0;
+
     // Load parameters.
     setting->status = f_console_parameter_process(arguments, &main->parameters);
 
index 28de632fd1bd7810af76d9af9c0fb97f5049fa49..7ec79bdb6434c95b543fbe37272b5e2c78709ae1 100644 (file)
@@ -129,6 +129,8 @@ extern "C" {
 
     if (!main || !setting) return;
 
+    setting->flag = 0;
+
     // Load parameters.
     setting->status = f_console_parameter_process(arguments, &main->parameters);
 
index 5e6058d39146b0cbcd346815f02800b72db14bb0..8fb90a8894161b63002a5ca3c6bcca66001751db 100644 (file)
@@ -117,6 +117,8 @@ extern "C" {
 
     if (!main || !setting) return;
 
+    setting->flag = 0;
+
     // Load parameters.
     setting->status = f_console_parameter_process(arguments, &main->parameters);
 
index 84863142938e92d32555cbac22fa5823d3db1162..98000c2973ccb5c14fc8589d0404d08a7399b3c1 100644 (file)
@@ -75,6 +75,8 @@ extern "C" {
 
     if (!main || !setting) return;
 
+    setting->flag = 0;
+
     // Load parameters.
     setting->status = f_console_parameter_process(arguments, &main->parameters);
 
index e96ab732f02f06bf812cb8ae58885b6c460d3087..2aa9c2aba473f098ab0d3ec2ba174b85b8b809a8 100644 (file)
@@ -56,6 +56,8 @@ extern "C" {
 
     if (!main || !setting) return;
 
+    setting->flag = 0;
+
     // Load parameters.
     setting->status = f_console_parameter_process(arguments, &main->parameters);
 
index ba9d8e499654d7830208d7dd12be39156bb2b51d..d1a5377ae30628cb0a4efb3f5bf189b6642c5980 100644 (file)
@@ -74,6 +74,8 @@ extern "C" {
 
     if (!main || !setting) return;
 
+    setting->flag = 0;
+
     // Load parameters.
     setting->status = f_console_parameter_process(arguments, &main->parameters);
 
index 5a0d36bc76f7a8cb322e8cffa3385e45f7e4c0c5..b67049a854f98b0edb76d1c6f3d9b1474fff5c3a 100644 (file)
@@ -56,6 +56,8 @@ extern "C" {
 
     if (!main || !setting) return;
 
+    setting->flag = 0;
+
     // Load parameters.
     setting->status = f_console_parameter_process(arguments, &main->parameters);
 
index 9f07442b9120d336b51770618ca5b4bcd5b1a781..c791fcf2f7628780869e355871cd8d6c530c9a5e 100644 (file)
@@ -73,6 +73,8 @@ extern "C" {
 
     if (!main || !setting) return;
 
+    setting->flag = 0;
+
     // Load parameters.
     setting->status = f_console_parameter_process(arguments, &main->parameters);
 
index d79cb192277ee52894e19aff3c55c1f6b4dddb0a..91ec7f82df303e722cfab75a0dcc4f4226858b05 100644 (file)
@@ -56,6 +56,8 @@ extern "C" {
 
     if (!main || !setting) return;
 
+    setting->flag = 0;
+
     // Load parameters.
     setting->status = f_console_parameter_process(arguments, &main->parameters);
 
index e33b6be1791d13abcfb75cf86bad3248c1ef2c75..3dedfc85bd85f67315aa444867ca421392b3bde3 100644 (file)
@@ -11,6 +11,8 @@ extern "C" {
 
     f_status_t status = F_none;
 
+    setting->flag = 0;
+
     // Load parameters.
     setting->status = f_console_parameter_process(arguments, &main->parameters);
     if (F_status_is_error(setting->status)) return;
index bfd366f83e315f310bcf76f2ca9a5a05d269b830..abcc4ae66971d9b1a83c516e889d89cd58ac8669 100644 (file)
@@ -81,6 +81,8 @@ extern "C" {
 
     if (!main || !setting) return;
 
+    setting->flag = 0;
+
     // Load parameters.
     setting->status = f_console_parameter_process(arguments, &main->parameters);
 
index 74f14e507b8c8b024d2a4adec450dd4d0da3a7e9..b0e5c1eced73fd3bac8c64e43e97a8f0b3b5f4be 100644 (file)
@@ -63,6 +63,8 @@ extern "C" {
 
     if (!main || !setting) return;
 
+    setting->flag = 0;
+
     // Load parameters.
     setting->status = f_console_parameter_process(arguments, &main->parameters);
 
index 1705cc20b8a295763e3d9efe0fcd5e69d9224c29..56c946b6eab4d960d02c419d9d76f4529b7fd854 100644 (file)
@@ -11,6 +11,8 @@ extern "C" {
 
     f_status_t status = F_none;
 
+    setting->flag = 0;
+
     // Load parameters.
     setting->status = f_console_parameter_process(arguments, &main->parameters);
     if (F_status_is_error(setting->status)) return;
index e27274481756b280a5a3612ef6865c835f3632e7..9c1594a92acbb0de25218a3c8d61c711fb8a110e 100644 (file)
@@ -74,6 +74,8 @@ extern "C" {
 
     if (!main || !setting) return;
 
+    setting->flag = 0;
+
     // Load parameters.
     setting->status = f_console_parameter_process(arguments, &main->parameters);
 
index 0d1084cb9650f0d133448bd7ed788d2ada3489c7..c76d7ef5f3de326e8e73e05f49c92ea6e771e682 100644 (file)
@@ -56,6 +56,8 @@ extern "C" {
 
     if (!main || !setting) return;
 
+    setting->flag = 0;
+
     // Load parameters.
     setting->status = f_console_parameter_process(arguments, &main->parameters);
 
index 91485b90f7abc982349d18807de3666a4e66d0cc..0bca6e3d30f0530ff7493b189f87998481fecc3b 100644 (file)
@@ -41,6 +41,8 @@ extern "C" {
 
     if (!main || !setting) return;
 
+    setting->flag = 0;
+
     // Load parameters.
     setting->status = f_console_parameter_process(arguments, &main->parameters);
 
index 9657bd1e14f1294daa8c42e85c1fa516e25ec797..3c3f94b97b28a21f824fa22c787662623871ae3d 100644 (file)
@@ -75,6 +75,8 @@ extern "C" {
 
     if (!main || !setting) return;
 
+    setting->flag = 0;
+
     // Load parameters.
     setting->status = f_console_parameter_process(arguments, &main->parameters);
 
index 9ab24b3d1cc584fa624778131a971db417f82264..1c7d3f01ba2caf5fd08e179e46dec7e9e4d4ea9d 100644 (file)
@@ -70,6 +70,8 @@ extern "C" {
 
     if (!main || !setting) return;
 
+    setting->flag = 0;
+
     // Load parameters.
     setting->status = f_console_parameter_process(arguments, &main->parameters);
 
index 50716c9188af220cb5894f3ea844f2ebdd142a88..c315595a6f1f1887d36a42130f8c719a07140ea6 100644 (file)
@@ -79,6 +79,8 @@ extern "C" {
 
     if (!main || !setting) return;
 
+    setting->flag = 0;
+
     // Load parameters.
     setting->status = f_console_parameter_process(arguments, &main->parameters);
 
index f951f2f2ccf8daf6f1752d9006f630fcebfae81d..ee85919ab943a6ac2f8ad1c59522fe41a3b85b5d 100644 (file)
@@ -10,6 +10,10 @@ extern "C" {
 
     if (print.verbosity == f_console_verbosity_quiet_e) return F_output_not;
 
+    if (!F_status_is_error(setting->status)) {
+      if (print.verbosity == f_console_verbosity_error_e) return F_output_not;
+    }
+
     iki_read_print_line_first_locked(setting, print);
     fll_error_print(print, F_status_set_fine(setting->status), function, F_true);
     iki_read_print_line_last_locked(setting, print);
@@ -23,6 +27,10 @@ extern "C" {
 
     if (print.verbosity == f_console_verbosity_quiet_e) return F_output_not;
 
+    if (!F_status_is_error(setting->status)) {
+      if (print.verbosity == f_console_verbosity_error_e) return F_output_not;
+    }
+
     iki_read_print_line_first_locked(setting, print);
     fll_error_file_print(print, F_status_set_fine(setting->status), function, F_true, name, operation, type);
     iki_read_print_line_last_locked(setting, print);
index 5303521be73e0cfbc8f9e939f21381338425f6e0..d1e1704b7289642f096c1b9465b038c86a8aea39 100644 (file)
@@ -53,6 +53,8 @@ extern "C" {
 
     if (!main || !setting) return;
 
+    setting->flag = 0;
+
     // Load parameters.
     setting->status = f_console_parameter_process(arguments, &main->parameters);
 
index ebb169c76de6e330a4a21b82b78884a11e991d03..ca2cb3bc1958ad0a94c9470269040358865463d0 100644 (file)
@@ -10,6 +10,10 @@ extern "C" {
 
     if (print.verbosity == f_console_verbosity_quiet_e) return F_output_not;
 
+    if (!F_status_is_error(setting->status)) {
+      if (print.verbosity == f_console_verbosity_error_e) return F_output_not;
+    }
+
     iki_write_print_line_first_locked(setting, print);
     fll_error_print(print, F_status_set_fine(setting->status), function, F_true);
     iki_write_print_line_last_locked(setting, print);
@@ -23,6 +27,10 @@ extern "C" {
 
     if (print.verbosity == f_console_verbosity_quiet_e) return F_output_not;
 
+    if (!F_status_is_error(setting->status)) {
+      if (print.verbosity == f_console_verbosity_error_e) return F_output_not;
+    }
+
     iki_write_print_line_first_locked(setting, print);
     fll_error_file_print(print, F_status_set_fine(setting->status), function, F_true, name, operation, type);
     iki_write_print_line_last_locked(setting, print);
@@ -36,6 +44,10 @@ extern "C" {
 
     if (print.verbosity == f_console_verbosity_quiet_e) return F_output_not;
 
+    if (!F_status_is_error(setting->status)) {
+      if (print.verbosity == f_console_verbosity_error_e) return F_output_not;
+    }
+
     f_file_stream_lock(print.to);
 
     fl_print_format("%[%QNo main provided, either pipe the main data or use the '%]", print.to, print.set->error, print.prefix, print.set->error);
@@ -55,6 +67,10 @@ extern "C" {
 
     if (print.verbosity == f_console_verbosity_quiet_e) return F_output_not;
 
+    if (!F_status_is_error(setting->status)) {
+      if (print.verbosity == f_console_verbosity_error_e) return F_output_not;
+    }
+
     f_file_stream_lock(print.to);
 
     iki_write_print_line_first_unlocked(setting, print);
index d51637fe1ce091c32e3d9846ce73b1dc85957430..a062703e6b6494383a6fcfb33f1cc2f8565658c0 100644 (file)
@@ -53,6 +53,8 @@ extern "C" {
 
     if (!main || !setting) return;
 
+    setting->flag = 0;
+
     // Load parameters.
     setting->status = f_console_parameter_process(arguments, &main->parameters);
 
index c1c9637052bb7463218acbaf78dddabec476d002..0fd0a034d3b096504c83cf00f49ad40b1b1a737c 100644 (file)
@@ -11,6 +11,10 @@ extern "C" {
 
     if (print.verbosity == f_console_verbosity_quiet_e) return F_output_not;
 
+    if (!F_status_is_error(setting->status)) {
+      if (print.verbosity == f_console_verbosity_error_e) return F_output_not;
+    }
+
     status_code_print_line_first_locked(setting, print);
     fll_error_print(print, F_status_set_fine(setting->status), function, F_true);
     status_code_print_line_last_locked(setting, print);
@@ -24,6 +28,10 @@ extern "C" {
 
     if (print.verbosity == f_console_verbosity_quiet_e) return F_output_not;
 
+    if (!F_status_is_error(setting->status)) {
+      if (print.verbosity == f_console_verbosity_error_e) return F_output_not;
+    }
+
     f_file_stream_lock(print.to);
 
     fl_print_format("%[%QCannot specify the '%]", print.to, print.context, print.prefix, print.context);
@@ -45,6 +53,10 @@ extern "C" {
 
     if (print.verbosity == f_console_verbosity_quiet_e) return F_output_not;
 
+    if (!F_status_is_error(setting->status)) {
+      if (print.verbosity == f_console_verbosity_error_e) return F_output_not;
+    }
+
     fll_print_format("%[No status code is specified.%]%r", print.to, print.context, print.context, f_string_eol_s);
 
     return F_none;
@@ -56,6 +68,10 @@ extern "C" {
 
     if (print.verbosity == f_console_verbosity_quiet_e) return F_output_not;
 
+    if (!F_status_is_error(setting->status)) {
+      if (print.verbosity == f_console_verbosity_error_e) return F_output_not;
+    }
+
     f_file_stream_lock(print.to);
 
     fl_print_format("%[%QInvalid callback specified for '%]", print.to, print.context, print.prefix, print.context);
index 9f4b685bdfe1ec46ef63ad25a5ba18fea4d859ff..ecc7b81255ed8c0c20e0d51df22733ee2f29dbf6 100644 (file)
@@ -92,6 +92,8 @@ extern "C" {
 
     if (!main || !setting) return;
 
+    setting->flag = 0;
+
     // Load parameters.
     setting->status = f_console_parameter_process(arguments, &main->parameters);
 
@@ -279,7 +281,7 @@ extern "C" {
       if (main->parameters.array[utf8_parameter_to_file_e].values.used > 1) {
         setting->status = F_status_set_error(F_parameter);
 
-        utf8_print_error_parameter_file_to_too_many(main, setting);
+        utf8_print_error_parameter_file_to_too_many(setting, main->error);
         utf8_print_line_last_locked(setting, main->error);
 
         return;
@@ -320,7 +322,7 @@ extern "C" {
       }
       else {
         utf8_print_line_first_locked(setting, main->error);
-        utf8_print_error_parameter_file_name_empty(main, setting, main->parameters.array[utf8_parameter_to_file_e].values.array[0]);
+        utf8_print_error_parameter_file_name_empty(setting, main->error, main->parameters.array[utf8_parameter_to_file_e].values.array[0]);
         utf8_print_line_last_locked(setting, main->error);
 
         setting->status = F_status_set_error(F_parameter);
@@ -377,7 +379,7 @@ extern "C" {
 
         if (main->parameters.arguments.array[index].used) {
           if (f_file_exists(main->parameters.arguments.array[index], F_true) != F_true) {
-            utf8_print_error_parameter_file_not_found(main, setting, F_true, main->parameters.arguments.array[index]);
+            utf8_print_error_parameter_file_not_found(setting, main->error, F_true, main->parameters.arguments.array[index]);
 
             if (F_status_is_error_not(setting->status)) {
               setting->status = F_status_set_error(F_file_found_not);
@@ -385,7 +387,7 @@ extern "C" {
           }
         }
         else {
-          utf8_print_error_parameter_file_name_empty(main, setting, index);
+          utf8_print_error_parameter_file_name_empty(setting, main->error, index);
 
           if (F_status_is_error_not(setting->status)) {
             setting->status = F_status_set_error(F_parameter);
@@ -441,7 +443,8 @@ extern "C" {
     if (main->parameters.array[utf8_parameter_from_file_e].result == f_console_result_none_e && !((main->pipe & fll_program_data_pipe_input_e) || main->parameters.remaining.used)) {
       setting->status = F_status_set_error(F_parameter);
 
-      utf8_print_error_no_from(main, setting);
+      utf8_print_line_first_locked(setting, main->error);
+      utf8_print_error_no_from(setting, main->error);
       utf8_print_line_last_locked(setting, main->error);
 
       return;
@@ -470,6 +473,10 @@ extern "C" {
     }
 
     setting->valid_not = main->message.set->error;
+
+    if (main->pipe & fll_program_data_pipe_input_e) {
+      setting->flag |= utf8_main_flag_pipe_e;
+    }
   }
 #endif // _di_utf8_setting_load_
 
index 16d777e8ab30c461ebffbb915791f56706cd4f39..c7a9c74f52a1b5581ce8db60529f66c3461e29de 100644 (file)
@@ -337,6 +337,7 @@ extern "C" {
  *   - file_to:        Using a specified destination file.
  *   - header:         Enable printing of headers.
  *   - help:           Print help.
+ *   - pipe:           Use the input pipe.
  *   - separate:       Enable printing of separators.
  *   - strip_invalid:  Using strip invalid character mode.
  *   - verify:         Using verify mode.
@@ -349,10 +350,11 @@ extern "C" {
     utf8_main_flag_file_to_e       = 0x2,
     utf8_main_flag_header_e        = 0x4,
     utf8_main_flag_help_e          = 0x8,
-    utf8_main_flag_separate_e      = 0x10,
-    utf8_main_flag_strip_invalid_e = 0x20,
-    utf8_main_flag_verify_e        = 0x40,
-    utf8_main_flag_version_e       = 0x80,
+    utf8_main_flag_pipe_e          = 0x10,
+    utf8_main_flag_separate_e      = 0x20,
+    utf8_main_flag_strip_invalid_e = 0x40,
+    utf8_main_flag_verify_e        = 0x80,
+    utf8_main_flag_version_e       = 0x100,
   };
 #endif // _di_utf8_main_flag_e_
 
index 4105f6817d25a6d1324f7ce4f158c8f674c3513c..7d791dded3e7d41bb59d84e1aa361bb8ab797826 100644 (file)
@@ -10,6 +10,10 @@ extern "C" {
 
     if (print.verbosity == f_console_verbosity_quiet_e) return F_output_not;
 
+    if (!F_status_is_error(setting->status)) {
+      if (print.verbosity == f_console_verbosity_error_e) return F_output_not;
+    }
+
     utf8_print_line_first_locked(setting, print);
     fll_error_print(print, F_status_set_fine(setting->status), function, F_true);
     utf8_print_line_last_locked(setting, print);
@@ -18,265 +22,270 @@ extern "C" {
   }
 #endif // _di_utf8_print_error_
 
-#ifndef _di_utf8_print_error_file_
-  f_status_t utf8_print_error_file(utf8_setting_t * const setting, const fl_print_t print, const f_string_t function, const f_string_static_t name, const f_string_static_t operation, const uint8_t type) {
+#ifndef _di_utf8_print_error_decode_
+  f_status_t utf8_print_error_decode(utf8_setting_t * const setting, const fl_print_t print, const f_status_t status, const f_string_static_t invalid) {
 
     if (print.verbosity == f_console_verbosity_quiet_e) return F_output_not;
+    if (setting->flag & (utf8_main_flag_strip_invalid_e | utf8_main_flag_verify_e)) return F_output_not;
 
-    utf8_print_line_first_locked(setting, print);
-    fll_error_file_print(print, F_status_set_fine(setting->status), function, F_true, name, operation, type);
-    utf8_print_line_last_locked(setting, print);
-
-    return F_none;
-  }
-#endif // _di_utf8_print_error_file_
+    if (!F_status_is_error(setting->status)) {
+      if (print.verbosity == f_console_verbosity_error_e) return F_output_not;
+    }
 
-#ifndef _di_utf8_print_bytesequence_
-  f_status_t utf8_print_bytesequence(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t sequence) {
+    utf8_print_line_first_unlocked(setting, print);
 
-    fl_print_format("%r%r%r", main->output.to, setting->prepend, sequence, setting->append);
+    fl_print_format("%[%QFailed to decode character code '%]", print.to, print.set->error, print.prefix, print.set->error);
 
-    return F_none;
-  }
-#endif // _di_utf8_print_bytesequence_
+    if (invalid.used) {
+      fl_print_format("%[0x", print.to, print.set->notable);
 
-#ifndef _di_utf8_print_character_invalid_
-  f_status_t utf8_print_character_invalid(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t invalid) {
+      for (uint8_t i = 0; i < invalid.used; ++i) {
+        fl_print_format("%02_uii", print.to, (uint8_t) invalid.string[i]);
+      } // for
 
-    if (setting->flag & (utf8_main_flag_strip_invalid_e | utf8_main_flag_verify_e)) return F_output_not;
-    if (!invalid.used) return F_output_not;
+      fl_print_format("%]", print.to, print.set->notable);
+    }
 
-    if ((setting->mode & utf8_mode_to_combining_e) || (setting->mode & utf8_mode_to_width_e)) {
-      utf8_print_combining_or_width(main, setting, invalid);
+    if (F_status_set_fine(status) == F_utf_not) {
+      fl_print_format("%[', not a valid UTF-8 character sequence.%]%r", print.to, print.set->error, print.set->error, f_string_eol_s);
     }
-    else if (setting->mode & utf8_mode_to_bytesequence_e) {
-      fl_print_format("%r%[%r%]%r", main->output.to, setting->prepend, setting->valid_not, invalid, setting->valid_not, setting->append);
+    else if (F_status_set_fine(status) == F_complete_not_utf) {
+      fl_print_format("%[', invalid UTF-8 (truncated).%]%r", print.to, print.set->error, print.set->error, f_string_eol_s);
     }
-    else if (setting->mode & utf8_mode_from_codepoint_e) {
-      fl_print_format("%r%[%Q%]%r", main->output.to, setting->prepend, setting->valid_not, invalid, setting->valid_not, setting->append);
+    else if (F_status_set_fine(status) == F_utf_fragment) {
+      fl_print_format("%[', invalid UTF-8 fragment.%]%r", print.to, print.set->error, print.set->error, f_string_eol_s);
     }
     else {
-      fl_print_format("%r%[0x", main->output.to, setting->prepend, setting->valid_not);
-
-      for (uint8_t i = 0; i < invalid.used; ++i) {
-        fl_print_format("%02_uii", main->output.to, (uint8_t) invalid.string[i]);
-      } // for
-
-      fl_print_format("%]%r", main->output.to, setting->valid_not, setting->append);
+      fl_print_format("%[', error status code%] ", print.to, print.set->error, print.set->error, f_string_eol_s);
+      fl_print_format("%[%ui%]", print.to, print.set->notable, F_status_set_fine(status), print.set->notable);
+      fl_print_format("%[.%]%r", print.to, print.set->error, print.set->error, f_string_eol_s);
     }
 
     return F_none;
   }
-#endif // _di_utf8_print_character_invalid_
+#endif // _di_utf8_print_error_decode_
 
-#ifndef _di_utf8_print_codepoint_
-  f_status_t utf8_print_codepoint(fll_program_data_t * const main, utf8_setting_t * const setting, const uint32_t codepoint) {
+#ifndef _di_utf8_print_error_encode_
+  f_status_t utf8_print_error_encode(utf8_setting_t * const setting, const fl_print_t print, const f_status_t status, const uint32_t codepoint) {
 
-    if (codepoint < 0x10000) {
-      fl_print_format("%rU+%04_U%r", main->output.to, setting->prepend, codepoint, setting->append);
+    if (print.verbosity == f_console_verbosity_quiet_e) return F_output_not;
+
+    if (!F_status_is_error(setting->status)) {
+      if (print.verbosity == f_console_verbosity_error_e) return F_output_not;
     }
-    else if (codepoint < 0x100000) {
-      fl_print_format("%rU+%05_U%r", main->output.to, setting->prepend, codepoint, setting->append);
+
+    utf8_print_line_first_unlocked(setting, print);
+
+    fl_print_format("%[%QFailed to encode Unicode codepoint '%]", print.to, print.set->error, print.prefix, print.set->error);
+    fl_print_format("%[U+%_U%]", print.to, print.set->notable, codepoint, print.set->notable);
+
+    if (F_status_set_fine(status) == F_utf_not) {
+      fl_print_format("%[', not a valid Unicode codepoint.%]%r", print.to, print.set->error, print.set->error, f_string_eol_s);
     }
     else {
-      fl_print_format("%rU+%06_U%r", main->output.to, setting->prepend, codepoint, setting->append);
+      fl_print_format("%[', error status code%] ", print.to, print.set->error, print.set->error, f_string_eol_s);
+      fl_print_format("%[%ui%]", print.to, print.set->notable, F_status_set_fine(status), print.set->notable);
+      fl_print_format("%[.%]%r", print.to, print.set->error, print.set->error, f_string_eol_s);
     }
 
     return F_none;
   }
-#endif // _di_utf8_print_codepoint_
-
-#ifndef _di_utf8_print_combining_or_width_
-  f_status_t utf8_print_combining_or_width(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t sequence) {
+#endif // _di_utf8_print_error_encode_
 
-    if (setting->mode & utf8_mode_to_combining_e) {
-      f_status_t status = f_utf_is_combining(sequence.string, sequence.used);
+#ifndef _di_utf8_print_error_file_
+  f_status_t utf8_print_error_file(utf8_setting_t * const setting, const fl_print_t print, const f_string_t function, const f_string_static_t name, const f_string_static_t operation, const uint8_t type) {
 
-      if (status == F_true) {
-        fl_print_format("%r%r%r", main->output.to, setting->prepend, utf8_string_combining_is_s, setting->append);
-      }
-      else if (status == F_false) {
-        status = f_utf_is_private(sequence.string, sequence.used);
+    if (print.verbosity == f_console_verbosity_quiet_e) return F_output_not;
 
-        if (status == F_true) {
-          fl_print_format("%r%r%r", main->output.to, setting->prepend, utf8_string_unknown_s, setting->append);
-        }
-        else if (setting->mode & utf8_mode_to_width_e) {
-          utf8_print_width(main, setting, sequence);
-        }
-        else {
-          fl_print_format("%r%r%r", main->output.to, setting->prepend, utf8_string_combining_not_s, setting->append);
-        }
-      }
-      else {
-        utf8_print_error_combining_or_width(main, setting);
-      }
-    }
-    else if (setting->mode & utf8_mode_to_width_e) {
-      utf8_print_width(main, setting, sequence);
+    if (!F_status_is_error(setting->status)) {
+      if (print.verbosity == f_console_verbosity_error_e) return F_output_not;
     }
 
+    utf8_print_line_first_locked(setting, print);
+    fll_error_file_print(print, F_status_set_fine(setting->status), function, F_true, name, operation, type);
+    utf8_print_line_last_locked(setting, print);
+
     return F_none;
   }
-#endif // _di_utf8_print_combining_or_width_
+#endif // _di_utf8_print_error_file_
 
-#ifndef _di_utf8_print_error_combining_or_width_
-  f_status_t utf8_print_error_combining_or_width(fll_program_data_t * const main, utf8_setting_t * const setting) {
+#ifndef _di_utf8_print_error_no_from_
+  f_status_t utf8_print_error_no_from(utf8_setting_t * const setting, const fl_print_t print) {
 
-    if (setting->flag & (utf8_main_flag_strip_invalid_e | utf8_main_flag_verify_e)) return F_output_not;
+    if (print.verbosity == f_console_verbosity_quiet_e) return F_output_not;
+
+    if (!F_status_is_error(setting->status)) {
+      if (print.verbosity == f_console_verbosity_error_e) return F_output_not;
+    }
 
-    fl_print_format("%r%[%r%]%r", main->output.to, setting->prepend, setting->valid_not, utf8_string_unknown_s, setting->valid_not, setting->append);
+    fll_print_format("%[%QNo from sources are specified, please pipe data, designate a file, or add parameters.%]%r", print.to, print.set->error, print.prefix, print.set->error, f_string_eol_s);
 
     return F_none;
   }
-#endif // _di_utf8_print_error_combining_or_width_
-
-#ifndef _di_utf8_print_error_decode_
-  f_status_t utf8_print_error_decode(fll_program_data_t * const main, utf8_setting_t * const setting, const f_status_t status, const f_string_static_t invalid) {
+#endif // _di_utf8_print_error_no_from_
 
-    if (main->error.verbosity == f_console_verbosity_quiet_e) return F_output_not;
-    if (setting->flag & (utf8_main_flag_strip_invalid_e | utf8_main_flag_verify_e)) return F_output_not;
+#ifndef _di_utf8_print_error_parameter_file_name_empty_
+  f_status_t utf8_print_error_parameter_file_name_empty(utf8_setting_t * const setting, const fl_print_t print, const f_array_length_t index) {
 
-    utf8_print_line_first_unlocked(setting, main->error);
+    if (print.verbosity == f_console_verbosity_quiet_e) return F_output_not;
 
-    fl_print_format("%[%QFailed to decode character code '%]", main->error.to, main->context.set.error, main->error.prefix, main->context.set.error);
+    if (!F_status_is_error(setting->status)) {
+      if (print.verbosity == f_console_verbosity_error_e) return F_output_not;
+    }
 
-    if (invalid.used) {
-      fl_print_format("%[0x", main->error.to, main->context.set.notable);
+    f_file_stream_lock(print.to);
 
-      for (uint8_t i = 0; i < invalid.used; ++i) {
-        fl_print_format("%02_uii", main->error.to, (uint8_t) invalid.string[i]);
-      } // for
+    utf8_print_line_first_unlocked(setting, print);
 
-      fl_print_format("%]", main->error.to, main->context.set.notable);
-    }
+    fl_print_format("%[%QNo file specified at parameter index %]", print.to, print.set->error, print.prefix, print.set->error);
+    fl_print_format("%[%ul%]", print.to, print.set->notable, index, print.set->notable);
+    fl_print_format("%[.%]%r", print.to, print.set->error, print.set->error, f_string_eol_s);
 
-    if (F_status_set_fine(status) == F_utf_not) {
-      fl_print_format("%[', not a valid UTF-8 character sequence.%]%r", main->error.to, main->context.set.error, main->context.set.error, f_string_eol_s);
-    }
-    else if (F_status_set_fine(status) == F_complete_not_utf) {
-      fl_print_format("%[', invalid UTF-8 (truncated).%]%r", main->error.to, main->context.set.error, main->context.set.error, f_string_eol_s);
-    }
-    else if (F_status_set_fine(status) == F_utf_fragment) {
-      fl_print_format("%[', invalid UTF-8 fragment.%]%r", main->error.to, main->context.set.error, main->context.set.error, f_string_eol_s);
-    }
-    else {
-      fl_print_format("%[', error status code%] ", main->error.to, main->context.set.error, main->context.set.error, f_string_eol_s);
-      fl_print_format("%[%ui%]", main->error.to, main->context.set.notable, F_status_set_fine(status), main->context.set.notable);
-      fl_print_format("%[.%]%r", main->error.to, main->context.set.error, main->context.set.error, f_string_eol_s);
-    }
+    f_file_stream_unlock(print.to);
 
     return F_none;
   }
-#endif // _di_utf8_print_error_decode_
-
-#ifndef _di_utf8_print_error_encode_
-  f_status_t utf8_print_error_encode(fll_program_data_t * const main, utf8_setting_t * const setting, const f_status_t status, const uint32_t codepoint) {
-
-    if (main->error.verbosity == f_console_verbosity_quiet_e) return F_output_not;
+#endif // _di_utf8_print_error_parameter_file_name_empty_
 
-    utf8_print_line_first_unlocked(setting, main->error);
+#ifndef _di_utf8_print_error_parameter_file_not_found_
+  f_status_t utf8_print_error_parameter_file_not_found(utf8_setting_t * const setting, const fl_print_t print, const bool from, const f_string_static_t name) {
 
-    fl_print_format("%[%QFailed to encode Unicode codepoint '%]", main->error.to, main->context.set.error, main->error.prefix, main->context.set.error);
-    fl_print_format("%[U+%_U%]", main->error.to, main->context.set.notable, codepoint, main->context.set.notable);
+    if (print.verbosity == f_console_verbosity_quiet_e) return F_output_not;
 
-    if (F_status_set_fine(status) == F_utf_not) {
-      fl_print_format("%[', not a valid Unicode codepoint.%]%r", main->error.to, main->context.set.error, main->context.set.error, f_string_eol_s);
-    }
-    else {
-      fl_print_format("%[', error status code%] ", main->error.to, main->context.set.error, main->context.set.error, f_string_eol_s);
-      fl_print_format("%[%ui%]", main->error.to, main->context.set.notable, F_status_set_fine(status), main->context.set.notable);
-      fl_print_format("%[.%]%r", main->error.to, main->context.set.error, main->context.set.error, f_string_eol_s);
+    if (!F_status_is_error(setting->status)) {
+      if (print.verbosity == f_console_verbosity_error_e) return F_output_not;
     }
 
-    return F_none;
-  }
-#endif // _di_utf8_print_error_encode_
-
-#ifndef _di_utf8_print_error_no_from_
-  f_status_t utf8_print_error_no_from(fll_program_data_t * const main, utf8_setting_t * const setting) {
+    f_file_stream_lock(print.to);
 
-    if (main->error.verbosity == f_console_verbosity_quiet_e) return F_output_not;
+    utf8_print_line_first_unlocked(setting, print);
 
-    utf8_print_line_first_locked(setting, main->error);
+    fl_print_format("%[%QFailed to find the %r file '%]", print.to, print.set->error, print.prefix, from ? utf8_string_from_s : utf8_string_to_s, print.set->error);
+    fl_print_format("%[%Q%]", print.to, print.set->notable, name, print.set->notable);
+    fl_print_format("%['.%]%r", print.to, print.set->error, print.set->error, f_string_eol_s);
 
-    fll_print_format("%[%QNo from sources are specified, please pipe data, designate a file, or add parameters.%]%r", main->error.to, main->error.context, main->error.prefix, main->error.context, f_string_eol_s);
+    f_file_stream_unlock(print.to);
 
     return F_none;
   }
-#endif // _di_utf8_print_error_no_from_
-
-#ifndef _di_utf8_print_error_parameter_file_name_empty_
-  f_status_t utf8_print_error_parameter_file_name_empty(fll_program_data_t * const main, utf8_setting_t * const setting, const f_array_length_t index) {
+#endif // _di_utf8_print_error_parameter_file_not_found_
 
-    if (main->error.verbosity == f_console_verbosity_quiet_e) return F_output_not;
+#ifndef _di_utf8_print_error_parameter_file_to_too_many_
+  f_status_t utf8_print_error_parameter_file_to_too_many(utf8_setting_t * const setting, const fl_print_t print) {
 
-    f_file_stream_lock(main->error.to);
+    if (print.verbosity == f_console_verbosity_quiet_e) return F_output_not;
 
-    utf8_print_line_first_unlocked(setting, main->error);
+    if (!F_status_is_error(setting->status)) {
+      if (print.verbosity == f_console_verbosity_error_e) return F_output_not;
+    }
 
-    fl_print_format("%[%QNo file specified at parameter index %]", main->error.to, main->context.set.error, main->error.prefix, main->context.set.error);
-    fl_print_format("%[%ul%]", main->error.to, main->context.set.notable, index, main->context.set.notable);
-    fl_print_format("%[.%]%r", main->error.to, main->context.set.error, main->context.set.error, f_string_eol_s);
+    utf8_print_line_first_locked(setting, print);
 
-    f_file_stream_unlock(main->error.to);
+    fll_print_format("%[%QToo many '%r' files specified, there may only be one '%r' file.%]%r", print.to, print.set->error, print.prefix, utf8_string_to_s, utf8_string_to_s, print.set->error, f_string_eol_s);
 
     return F_none;
   }
-#endif // _di_utf8_print_error_parameter_file_name_empty_
+#endif // _di_utf8_print_error_parameter_file_to_too_many_
 
-#ifndef _di_utf8_print_error_parameter_file_not_found_
-  f_status_t utf8_print_error_parameter_file_not_found(fll_program_data_t * const main, utf8_setting_t * const setting, const bool from, const f_string_static_t name) {
+#ifndef _di_utf8_print_bytesequence_
+  f_status_t utf8_print_bytesequence(utf8_setting_t * const setting, const fl_print_t print, const f_string_static_t sequence) {
 
-    if (main->error.verbosity == f_console_verbosity_quiet_e) return F_output_not;
+    fl_print_format("%r%r%r", print.to, setting->prepend, sequence, setting->append);
 
-    f_file_stream_lock(main->error.to);
+    return F_none;
+  }
+#endif // _di_utf8_print_bytesequence_
+
+#ifndef _di_utf8_print_character_invalid_
+  f_status_t utf8_print_character_invalid(utf8_setting_t * const setting, const fl_print_t print, const f_string_static_t invalid) {
 
-    utf8_print_line_first_unlocked(setting, main->error);
+    if (setting->flag & (utf8_main_flag_strip_invalid_e | utf8_main_flag_verify_e)) return F_output_not;
+    if (!invalid.used) return F_output_not;
+
+    if ((setting->mode & utf8_mode_to_combining_e) || (setting->mode & utf8_mode_to_width_e)) {
+      utf8_print_combining_or_width(setting, print, invalid);
+    }
+    else if (setting->mode & utf8_mode_to_bytesequence_e) {
+      fl_print_format("%r%[%r%]%r", print.to, setting->prepend, setting->valid_not, invalid, setting->valid_not, setting->append);
+    }
+    else if (setting->mode & utf8_mode_from_codepoint_e) {
+      fl_print_format("%r%[%Q%]%r", print.to, setting->prepend, setting->valid_not, invalid, setting->valid_not, setting->append);
+    }
+    else {
+      fl_print_format("%r%[0x", print.to, setting->prepend, setting->valid_not);
 
-    fl_print_format("%[%QFailed to find the %r file '%]", main->error.to, main->context.set.error, main->error.prefix, from ? utf8_string_from_s : utf8_string_to_s, main->context.set.error);
-    fl_print_format("%[%Q%]", main->error.to, main->context.set.notable, name, main->context.set.notable);
-    fl_print_format("%['.%]%r", main->error.to, main->context.set.error, main->context.set.error, f_string_eol_s);
+      for (uint8_t i = 0; i < invalid.used; ++i) {
+        fl_print_format("%02_uii", print.to, (uint8_t) invalid.string[i]);
+      } // for
 
-    f_file_stream_unlock(main->error.to);
+      fl_print_format("%]%r", print.to, setting->valid_not, setting->append);
+    }
 
     return F_none;
   }
-#endif // _di_utf8_print_error_parameter_file_not_found_
-
-#ifndef _di_utf8_print_error_parameter_file_to_too_many_
-  f_status_t utf8_print_error_parameter_file_to_too_many(fll_program_data_t * const main, utf8_setting_t * const setting) {
-
-    if (main->error.verbosity == f_console_verbosity_quiet_e) return F_output_not;
+#endif // _di_utf8_print_character_invalid_
 
-    utf8_print_line_first_locked(setting, main->error);
+#ifndef _di_utf8_print_codepoint_
+  f_status_t utf8_print_codepoint(utf8_setting_t * const setting, const fl_print_t print, const uint32_t codepoint) {
 
-    fll_print_format("%[%QToo many '%r' files specified, there may only be one '%r' file.%]%r", main->error.to, main->context.set.error, main->error.prefix, utf8_string_to_s, utf8_string_to_s, main->context.set.error, f_string_eol_s);
+    if (codepoint < 0x10000) {
+      fl_print_format("%rU+%04_U%r", print.to, setting->prepend, codepoint, setting->append);
+    }
+    else if (codepoint < 0x100000) {
+      fl_print_format("%rU+%05_U%r", print.to, setting->prepend, codepoint, setting->append);
+    }
+    else {
+      fl_print_format("%rU+%06_U%r", print.to, setting->prepend, codepoint, setting->append);
+    }
 
     return F_none;
   }
-#endif // _di_utf8_print_error_parameter_file_to_too_many_
+#endif // _di_utf8_print_codepoint_
 
-#ifndef _di_utf8_print_flush_
-  f_status_t utf8_print_flush(fll_program_data_t * const main, utf8_setting_t * const setting) {
+#ifndef _di_utf8_print_combining_or_width_
+  f_status_t utf8_print_combining_or_width(utf8_setting_t * const setting, const fl_print_t print, const f_string_static_t sequence) {
 
-    if (setting->flag & utf8_main_flag_verify_e) return F_output_not;
+    if (setting->mode & utf8_mode_to_combining_e) {
+      f_status_t status = f_utf_is_combining(sequence.string, sequence.used);
 
-    if (setting->status == F_interrupt) {
-      if (main->output.verbosity != f_console_verbosity_quiet_e) {
-        f_file_stream_flush(main->output.to);
+      if (status == F_true) {
+        fl_print_format("%r%r%r", print.to, setting->prepend, utf8_string_combining_is_s, setting->append);
       }
+      else if (status == F_false) {
+        status = f_utf_is_private(sequence.string, sequence.used);
 
-      if (main->output.to.stream != main->message.to.stream) {
-        if (main->message.verbosity != f_console_verbosity_quiet_e) {
-          f_file_stream_flush(main->message.to);
+        if (status == F_true) {
+          fl_print_format("%r%r%r", print.to, setting->prepend, utf8_string_unknown_s, setting->append);
+        }
+        else if (setting->mode & utf8_mode_to_width_e) {
+          utf8_print_width(setting, print, sequence);
+        }
+        else {
+          fl_print_format("%r%r%r", print.to, setting->prepend, utf8_string_combining_not_s, setting->append);
         }
       }
+      else {
+        utf8_print_combining_or_width_invalid(setting, print);
+      }
+    }
+    else if (setting->mode & utf8_mode_to_width_e) {
+      utf8_print_width(setting, print, sequence);
     }
 
     return F_none;
   }
-#endif // _di_utf8_print_flush_
+#endif // _di_utf8_print_combining_or_width_
+
+#ifndef _di_utf8_print_combining_or_width_invalid_
+  f_status_t utf8_print_combining_or_width_invalid(utf8_setting_t * const setting, const fl_print_t print) {
+
+    if (setting->flag & (utf8_main_flag_strip_invalid_e | utf8_main_flag_verify_e)) return F_output_not;
+
+    fl_print_format("%r%[%r%]%r", print.to, setting->prepend, setting->valid_not, utf8_string_unknown_s, setting->valid_not, setting->append);
+
+    return F_none;
+  }
+#endif // _di_utf8_print_combining_or_width_invalid_
 
 #ifndef _di_utf8_print_help_
   f_status_t utf8_print_help(utf8_setting_t * const setting, const fl_print_t print) {
@@ -400,7 +409,7 @@ extern "C" {
 #endif // _di_utf8_print_line_last_unlocked_
 
 #ifndef _di_utf8_print_raw_bytesequence_
-  f_status_t utf8_print_raw_bytesequence(fll_program_data_t * const main, utf8_setting_t * const setting, const f_utf_char_t raw, const uint8_t width) {
+  f_status_t utf8_print_raw_bytesequence(utf8_setting_t * const setting, const fl_print_t print, const f_utf_char_t raw, const uint8_t width) {
 
     if (setting->flag & (utf8_main_flag_strip_invalid_e | utf8_main_flag_verify_e)) return F_output_not;
 
@@ -434,30 +443,30 @@ extern "C" {
       memset(byte, 0, sizeof(f_char_t) * width);
     }
 
-    fl_print_format("%r%[%r%]%r", main->output.to, setting->prepend, setting->valid_not, character, setting->valid_not, setting->append);
+    fl_print_format("%r%[%r%]%r", print.to, setting->prepend, setting->valid_not, character, setting->valid_not, setting->append);
 
     return F_none;
   }
 #endif // _di_utf8_print_raw_bytesequence_
 
 #ifndef _di_utf8_print_raw_codepoint_
-  f_status_t utf8_print_raw_codepoint(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t raw) {
+  f_status_t utf8_print_raw_codepoint(utf8_setting_t * const setting, const fl_print_t print, const f_string_static_t raw) {
 
     if (setting->flag & (utf8_main_flag_strip_invalid_e | utf8_main_flag_verify_e)) return F_output_not;
 
-    fl_print_format("%r%[%r%]%r", main->output.to, setting->prepend, setting->valid_not, raw, setting->valid_not, setting->append);
+    fl_print_format("%r%[%r%]%r", print.to, setting->prepend, setting->valid_not, raw, setting->valid_not, setting->append);
 
     return F_none;
   }
 #endif // _di_utf8_print_raw_codepoint_
 
 #ifndef _di_utf8_print_raw_combining_or_width_
-  f_status_t utf8_print_raw_combining_or_width(fll_program_data_t * const main, utf8_setting_t * const setting, const uint8_t width) {
+  f_status_t utf8_print_raw_combining_or_width(utf8_setting_t * const setting, const fl_print_t print, const uint8_t width) {
 
     if (setting->flag & (utf8_main_flag_strip_invalid_e | utf8_main_flag_verify_e)) return F_output_not;
 
     if (setting->mode & utf8_mode_to_combining_e) {
-      utf8_print_error_combining_or_width(main, setting);
+      utf8_print_combining_or_width_invalid(setting, print);
     }
     else if (setting->mode & utf8_mode_to_width_e) {
       const f_string_static_t *character = 0;
@@ -483,7 +492,7 @@ extern "C" {
           character = &utf8_string_width_0_s;
       }
 
-      fl_print_format("%r%[%r%]%r", main->output.to, setting->prepend, setting->valid_not, *character, setting->valid_not, setting->append);
+      fl_print_format("%r%[%r%]%r", print.to, setting->prepend, setting->valid_not, *character, setting->valid_not, setting->append);
     }
 
     return F_none;
@@ -491,90 +500,91 @@ extern "C" {
 #endif // _di_utf8_print_raw_combining_or_width_
 
 #ifndef _di_utf8_print_section_header_file_
-  f_status_t utf8_print_section_header_file(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t name, const f_array_length_t index) {
+  f_status_t utf8_print_section_header_file(utf8_setting_t * const setting, const fl_print_t print, const f_string_static_t name, const f_array_length_t index) {
 
     if (!(setting->flag & (utf8_main_flag_header_e | utf8_main_flag_separate_e))) return F_output_not;
     if (setting->flag & utf8_main_flag_verify_e) return F_output_not;
 
-    f_file_stream_lock(main->output.to);
+    f_file_stream_lock(print.to);
+
 
-    if ((main->pipe & fll_program_data_pipe_input_e) || index) {
-      f_print_dynamic_raw(f_string_eol_s, main->output.to);
+    if ((setting->flag & utf8_main_flag_pipe_e) || index) {
+      f_print_dynamic_raw(f_string_eol_s, print.to);
     }
     else {
-      f_print_dynamic_raw(setting->line_first, main->output.to);
+      f_print_dynamic_raw(setting->line_first, print.to);
     }
 
     if (setting->flag & utf8_main_flag_header_e) {
-      fl_print_format("%[File%] ", main->output.to, main->output.set->title, main->output.set->title);
+      fl_print_format("%[File%] ", print.to, print.set->title, print.set->title);
 
       if (setting->flag & utf8_main_flag_file_to_e) {
-        fl_print_format("%[%Q%]: %Q.%r", main->output.to, main->output.set->notable, name, main->output.set->notable, setting->path_files_to.array[0], f_string_eol_s);
+        fl_print_format("%[%Q%]: %Q.%r", print.to, print.set->notable, name, print.set->notable, setting->path_files_to.array[0], f_string_eol_s);
       }
       else {
-        fl_print_format("%[%Q%]:%r", main->output.to, main->output.set->notable, name, main->output.set->notable, f_string_eol_s);
+        fl_print_format("%[%Q%]:%r", print.to, print.set->notable, name, print.set->notable, f_string_eol_s);
       }
     }
 
-    f_file_stream_unlock(main->output.to);
+    f_file_stream_unlock(print.to);
 
     return F_none;
   }
 #endif // _di_utf8_print_section_header_file_
 
 #ifndef _di_utf8_print_section_header_parameter_
-  f_status_t utf8_print_section_header_parameter(fll_program_data_t * const main, utf8_setting_t * const setting, const f_array_length_t index) {
+  f_status_t utf8_print_section_header_parameter(utf8_setting_t * const setting, const fl_print_t print, const f_array_length_t index) {
 
     if (!(setting->flag & (utf8_main_flag_header_e | utf8_main_flag_separate_e))) return F_output_not;
     if (setting->flag & utf8_main_flag_verify_e) return F_output_not;
 
-    f_file_stream_lock(main->output.to);
+    f_file_stream_lock(print.to);
 
-    if ((main->pipe & fll_program_data_pipe_input_e) || (setting->flag & utf8_main_flag_file_from_e) || index) {
-      f_print_dynamic_raw(f_string_eol_s, main->output.to);
+    if ((setting->flag & utf8_main_flag_pipe_e) || (setting->flag & utf8_main_flag_file_from_e) || index) {
+      f_print_dynamic_raw(f_string_eol_s, print.to);
     }
     else {
-      f_print_dynamic_raw(setting->line_first, main->output.to);
+      f_print_dynamic_raw(setting->line_first, print.to);
     }
 
     if (setting->flag & utf8_main_flag_header_e) {
-      fl_print_format("%[Parameter%] ", main->output.to, main->output.set->title, main->output.set->title);
-      fl_print_format("%[%ul%]:%r", main->output.to, main->output.set->notable, index, main->output.set->notable, f_string_eol_s);
+      fl_print_format("%[Parameter%] ", print.to, print.set->title, print.set->title);
+      fl_print_format("%[%ul%]:%r", print.to, print.set->notable, index, print.set->notable, f_string_eol_s);
     }
 
-    f_file_stream_unlock(main->output.to);
+    f_file_stream_unlock(print.to);
 
     return F_none;
   }
 #endif // _di_utf8_print_section_header_parameter_
 
 #ifndef _di_utf8_print_section_header_pipe_
-  f_status_t utf8_print_section_header_pipe(fll_program_data_t * const main, utf8_setting_t * const setting) {
+  f_status_t utf8_print_section_header_pipe(utf8_setting_t * const setting, const fl_print_t print) {
 
     if (!(setting->flag & (utf8_main_flag_header_e | utf8_main_flag_separate_e))) return F_output_not;
     if (setting->flag & utf8_main_flag_verify_e) return F_output_not;
 
-    f_file_stream_lock(main->output.to);
+    f_file_stream_lock(print.to);
 
-    f_print_dynamic_raw(setting->line_first, main->output.to);
+    f_print_dynamic_raw(setting->line_first, print.to);
 
     if (setting->flag & utf8_main_flag_header_e) {
-      fl_print_format("%[Pipe%]:%r", main->output.to, main->output.set->title, main->output.set->title, f_string_eol_s);
+      fl_print_format("%[Pipe%]:%r", print.to, print.set->title, print.set->title, f_string_eol_s);
     }
 
-    f_file_stream_unlock(main->output.to);
+    f_file_stream_unlock(print.to);
 
     return F_none;
   }
 #endif // _di_utf8_print_section_header_pipe_
 
 #ifndef _di_utf8_print_width_
-  f_status_t utf8_print_width(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t sequence) {
+  f_status_t utf8_print_width(utf8_setting_t * const setting, const fl_print_t print, const f_string_static_t sequence) {
 
     f_status_t status = f_utf_is_wide(sequence.string, sequence.used);
 
     if (status == F_true) {
-      fl_print_format("%r%r%r", main->output.to, setting->prepend, utf8_string_width_2_s, setting->append);
+      fl_print_format("%r%r%r", print.to, setting->prepend, utf8_string_width_2_s, setting->append);
 
       return F_output_not;
     }
@@ -583,19 +593,19 @@ extern "C" {
       status = f_utf_is_graph(sequence.string, sequence.used);
 
       if (status == F_true) {
-        fl_print_format("%r%r%r", main->output.to, setting->prepend, utf8_string_width_1_s, setting->append);
+        fl_print_format("%r%r%r", print.to, setting->prepend, utf8_string_width_1_s, setting->append);
 
         return F_output_not;
       }
 
       if (status == F_false) {
-        fl_print_format("%r%r%r", main->output.to, setting->prepend, utf8_string_width_0_s, setting->append);
+        fl_print_format("%r%r%r", print.to, setting->prepend, utf8_string_width_0_s, setting->append);
 
         return F_output_not;
       }
     }
 
-    utf8_print_error_combining_or_width(main, setting);
+    utf8_print_combining_or_width_invalid(setting, print);
 
     return F_none;
   }
index 8a656e65fe43f96bfc36ca6c5396b7cdfb9f32f5..08842f7564f65911846265bbe361bd4e5545f7d7 100644 (file)
@@ -19,6 +19,8 @@ extern "C" {
  *   The main program settings.
  *
  *   This does not alter setting.status.
+ *
+ *   Assumed to always be non-NULL.
  * @param print
  *   Designates the how and where to print.
  *
@@ -33,277 +35,281 @@ extern "C" {
 #endif // _di_utf8_print_error_
 
 /**
- * Print file related error or warning messages.
- *
- * @param setting
- *   The main program settings.
- *
- *   This does not alter setting.status.
- * @param print
- *   Designates how printing is to be performed.
- * @param function
- *   The name of the function where the error happened.
- *   Set to 0 to disable.
- * @param name
- *   The name of the file or directory.
- * @param operation
- *   The operation that fails, such as 'create' or 'access'.
- * @param type
- *   A valid file type code from the fll_error_file_type enum.
- *
- * @return
- *   F_none on success.
- *   F_output_not on success, but no printing is performed.
- *
- * @see fll_error_file_print()
- */
-#ifndef _di_utf8_print_error_file_
-  extern f_status_t utf8_print_error_file(utf8_setting_t * const setting, const fl_print_t print, const f_string_t function, const f_string_static_t name, const f_string_static_t operation, const uint8_t type);
-#endif // _di_utf8_print_error_file_
-
-/**
- * Print the byte sequence character (such as '豸').
+ * Print error message when attempt to decode the character failed.
  *
  * @param main
  *   The main program data.
  * @param setting
  *   The main program settings.
  *
+ *   This does not alter setting.status.
+ *
  *   Assumed to always be non-NULL.
- * @param sequence
- *   A byte sequences representing a single character to print.
+ * @param invalid
+ *   The byte sequence string or unicode codepoint string representing a single character to print.
  *
  * @return
  *   F_none on success.
  *   F_output_not on success, but no printing is performed.
  */
-#ifndef _di_utf8_print_bytesequence_
-  extern f_status_t utf8_print_bytesequence(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t sequence);
-#endif // _di_utf8_print_bytesequence_
+#ifndef _di_utf8_print_error_decode_
+  extern f_status_t utf8_print_error_decode(utf8_setting_t * const setting, const fl_print_t print, const f_status_t status, const f_string_static_t invalid);
+#endif // _di_utf8_print_error_decode_
 
 /**
- * Print an invalid character either as a Unicode codeblock or as a byte sequence.
- *
- * This handles whether or not the invalid character should be printed or not based on program parameters.
+ * Print error message when attempt to encode the character failed.
  *
- * @param main
- *   The main program data.
  * @param setting
  *   The main program settings.
  *
+ *   This does not alter setting.status.
+ *
  *   Assumed to always be non-NULL.
- * @param invalid
- *   The byte sequence string or unicode codepoint string representing a single character to print.
+ * @param print
+ *   Designates the how and where to print.
+ * @param codepoint
+ *   The codepoint that is invalid.
  *
  * @return
  *   F_none on success.
  *   F_output_not on success, but no printing is performed.
- *
- * @see utf8_print_combining_or_width()
  */
-#ifndef _di_utf8_print_character_invalid_
-  extern f_status_t utf8_print_character_invalid(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t invalid);
-#endif // _di_utf8_print_character_invalid_
+#ifndef _di_utf8_print_error_encode_
+  extern f_status_t utf8_print_error_encode(utf8_setting_t * const setting, const fl_print_t print, const f_status_t status, const uint32_t codepoint);
+#endif // _di_utf8_print_error_encode_
 
 /**
- * Print the codepoint number as a codepoint string (such as U+8C78).
+ * Print file related error or warning messages.
  *
- * @param main
- *   The main program data.
  * @param setting
  *   The main program settings.
  *
+ *   This does not alter setting.status.
+ *
  *   Assumed to always be non-NULL.
- * @param codepoint
- *   The codepoint to print.
- *   This is the code that represents a single character.
+ * @param print
+ *   Designates how printing is to be performed.
+ * @param function
+ *   The name of the function where the error happened.
+ *   Set to 0 to disable.
+ * @param name
+ *   The name of the file or directory.
+ * @param operation
+ *   The operation that fails, such as 'create' or 'access'.
+ * @param type
+ *   A valid file type code from the fll_error_file_type enum.
  *
  * @return
  *   F_none on success.
  *   F_output_not on success, but no printing is performed.
+ *
+ * @see fll_error_file_print()
  */
-#ifndef _di_utf8_print_codepoint_
-  extern f_status_t utf8_print_codepoint(fll_program_data_t * const main, utf8_setting_t * const setting, const uint32_t codepoint);
-#endif // _di_utf8_print_codepoint_
+#ifndef _di_utf8_print_error_file_
+  extern f_status_t utf8_print_error_file(utf8_setting_t * const setting, const fl_print_t print, const f_string_t function, const f_string_static_t name, const f_string_static_t operation, const uint8_t type);
+#endif // _di_utf8_print_error_file_
 
 /**
- * Print the width or combining state of the given character.
+ * Print error message for when no sources are provided.
  *
- * @param main
- *   The main program data.
  * @param setting
  *   The main program settings.
  *
- *   Assumed to always be non-NULL.
- * @param sequence
- *   A byte sequences representing a single character to print.
+ *   This does not alter setting.status.
  *
- * @see utf8_print_width()
+ *   Assumed to always be non-NULL.
+ * @param print
+ *   Designates how printing is to be performed.
  *
  * @return
  *   F_none on success.
  *   F_output_not on success, but no printing is performed.
  */
-#ifndef _di_utf8_print_combining_or_width_
-  extern f_status_t utf8_print_combining_or_width(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t sequence);
-#endif // _di_utf8_print_combining_or_width_
+#ifndef _di_utf8_print_error_no_from_
+  extern f_status_t utf8_print_error_no_from(utf8_setting_t * const setting, const fl_print_t print);
+#endif // _di_utf8_print_error_no_from_
 
 /**
- * Print an error regarding the width or combining state of a some character.
+ * Print error message for when the file parameter is an empty string.
  *
- * @param main
- *   The main program data.
  * @param setting
  *   The main program settings.
  *
+ *   This does not alter setting.status.
+ *
  *   Assumed to always be non-NULL.
+ * @param print
+ *   Designates how printing is to be performed.
+ * @param index
+ *   The index within the argv[] array where the empty string is found.
  *
  * @return
  *   F_none on success.
  *   F_output_not on success, but no printing is performed.
  */
-#ifndef _di_utf8_print_error_combining_or_width_
-  extern f_status_t utf8_print_error_combining_or_width(fll_program_data_t * const main, utf8_setting_t * const setting);
-#endif // _di_utf8_print_error_combining_or_width_
+#ifndef _di_utf8_print_error_parameter_file_name_empty_
+  extern f_status_t utf8_print_error_parameter_file_name_empty(utf8_setting_t * const setting, const fl_print_t print, const f_array_length_t index);
+#endif // _di_utf8_print_error_parameter_file_name_empty_
 
 /**
- * Print error message when attempt to decode the character failed.
+ * Print error message for when no sources are provided in the main program parameters.
  *
- * @param main
- *   The main program data.
  * @param setting
  *   The main program settings.
  *
+ *   This does not alter setting.status.
+ *
  *   Assumed to always be non-NULL.
- * @param invalid
- *   The byte sequence string or unicode codepoint string representing a single character to print.
+ * @param print
+ *   Designates how printing is to be performed.
+ * @param from
+ *   If TRUE, then this is a from file (source file).
+ *   If FALSE, then this is a to file (destination file).
+ * @param name
+ *   The file path name.
  *
  * @return
  *   F_none on success.
  *   F_output_not on success, but no printing is performed.
  */
-#ifndef _di_utf8_print_error_decode_
-  extern f_status_t utf8_print_error_decode(fll_program_data_t * const main, utf8_setting_t * const setting, const f_status_t status, const f_string_static_t invalid);
-#endif // _di_utf8_print_error_decode_
+#ifndef _di_utf8_print_error_parameter_file_not_found_
+  extern f_status_t utf8_print_error_parameter_file_not_found(utf8_setting_t * const setting, const fl_print_t print, const bool from, const f_string_static_t name);
+#endif // _di_utf8_print_error_parameter_file_not_found_
 
 /**
- * Print error message when attempt to encode the character failed.
+ * Print error message for when too many 'to' destinations are specified.
  *
- * @param main
- *   The main program data.
  * @param setting
  *   The main program settings.
  *
+ *   This does not alter setting.status.
+ *
  *   Assumed to always be non-NULL.
- * @param codepoint
- *   The codepoint that is invalid.
+ * @param print
+ *   Designates how printing is to be performed.
  *
  * @return
  *   F_none on success.
  *   F_output_not on success, but no printing is performed.
  */
-#ifndef _di_utf8_print_error_encode_
-  extern f_status_t utf8_print_error_encode(fll_program_data_t * const main, utf8_setting_t * const setting, const f_status_t status, const uint32_t codepoint);
-#endif // _di_utf8_print_error_encode_
+#ifndef _di_utf8_print_error_parameter_file_to_too_many_
+  extern f_status_t utf8_print_error_parameter_file_to_too_many(utf8_setting_t * const setting, const fl_print_t print);
+#endif // _di_utf8_print_error_parameter_file_to_too_many_
 
 /**
- * Print error message for when no sources are provided.
+ * Print the byte sequence character (such as '豸').
  *
- * @param main
- *   The main program data.
  * @param setting
  *   The main program settings.
  *
+ *   This does not alter setting.status.
+ *
  *   Assumed to always be non-NULL.
+ * @param print
+ *   Designates how printing is to be performed.
+ * @param sequence
+ *   A byte sequences representing a single character to print.
  *
  * @return
  *   F_none on success.
  *   F_output_not on success, but no printing is performed.
  */
-#ifndef _di_utf8_print_error_no_from_
-  extern f_status_t utf8_print_error_no_from(fll_program_data_t * const main, utf8_setting_t * const setting);
-#endif // _di_utf8_print_error_no_from_
+#ifndef _di_utf8_print_bytesequence_
+  extern f_status_t utf8_print_bytesequence(utf8_setting_t * const setting, const fl_print_t print, const f_string_static_t sequence);
+#endif // _di_utf8_print_bytesequence_
 
 /**
- * Print error message for when the file parameter is an empty string.
+ * Print an invalid character either as a Unicode codeblock or as a byte sequence.
+ *
+ * This handles whether or not the invalid character should be printed or not based on program parameters.
  *
- * @param main
- *   The main program data.
  * @param setting
  *   The main program settings.
  *
+ *   This does not alter setting.status.
+ *
  *   Assumed to always be non-NULL.
- * @param index
- *   The index within the argv[] array where the empty string is found.
+ * @param print
+ *   Designates how printing is to be performed.
+ * @param invalid
+ *   The byte sequence string or unicode codepoint string representing a single character to print.
  *
  * @return
  *   F_none on success.
  *   F_output_not on success, but no printing is performed.
+ *
+ * @see utf8_print_combining_or_width()
  */
-#ifndef _di_utf8_print_error_parameter_file_name_empty_
-  extern f_status_t utf8_print_error_parameter_file_name_empty(fll_program_data_t * const main, utf8_setting_t * const setting, const f_array_length_t index);
-#endif // _di_utf8_print_error_parameter_file_name_empty_
+#ifndef _di_utf8_print_character_invalid_
+  extern f_status_t utf8_print_character_invalid(utf8_setting_t * const setting, const fl_print_t print, const f_string_static_t invalid);
+#endif // _di_utf8_print_character_invalid_
 
 /**
- * Print error message for when no sources are provided in the main program parameters.
+ * Print the codepoint number as a codepoint string (such as U+8C78).
  *
- * @param main
- *   The main program data.
  * @param setting
  *   The main program settings.
  *
+ *   This does not alter setting.status.
+ *
  *   Assumed to always be non-NULL.
- * @param from
- *   If TRUE, then this is a from file (source file).
- *   If FALSE, then this is a to file (destination file).
- * @param name
- *   The file path name.
+ * @param print
+ *   Designates how printing is to be performed.
+ * @param codepoint
+ *   The codepoint to print.
+ *   This is the code that represents a single character.
  *
  * @return
  *   F_none on success.
  *   F_output_not on success, but no printing is performed.
  */
-#ifndef _di_utf8_print_error_parameter_file_not_found_
-  extern f_status_t utf8_print_error_parameter_file_not_found(fll_program_data_t * const main, utf8_setting_t * const setting, const bool from, const f_string_static_t name);
-#endif // _di_utf8_print_error_parameter_file_not_found_
+#ifndef _di_utf8_print_codepoint_
+  extern f_status_t utf8_print_codepoint(utf8_setting_t * const setting, const fl_print_t print, const uint32_t codepoint);
+#endif // _di_utf8_print_codepoint_
 
 /**
- * Print error message for when too many 'to' destinations are specified.
+ * Print the width or combining state of the given character.
  *
- * @param main
- *   The main program data.
  * @param setting
  *   The main program settings.
  *
+ *   This does not alter setting.status.
+ *
  *   Assumed to always be non-NULL.
+ * @param print
+ *   Designates how printing is to be performed.
+ * @param sequence
+ *   A byte sequences representing a single character to print.
+ *
+ * @see utf8_print_width()
  *
  * @return
  *   F_none on success.
  *   F_output_not on success, but no printing is performed.
  */
-#ifndef _di_utf8_print_error_parameter_file_to_too_many_
-  extern f_status_t utf8_print_error_parameter_file_to_too_many(fll_program_data_t * const main, utf8_setting_t * const setting);
-#endif // _di_utf8_print_error_parameter_file_to_too_many_
+#ifndef _di_utf8_print_combining_or_width_
+  extern f_status_t utf8_print_combining_or_width(utf8_setting_t * const setting, const fl_print_t print, const f_string_static_t sequence);
+#endif // _di_utf8_print_combining_or_width_
 
 /**
- * Flush the output, if appropriate.
- *
- * This is intended to be run after the utf8_main() is complete.
+ * Print an error regarding the width or combining state of a some character.
  *
- * @param main
- *   The main program data.
  * @param setting
  *   The main program settings.
  *
  *   This does not alter setting.status.
  *
+ *   Assumed to always be non-NULL.
+ * @param print
+ *   Designates how printing is to be performed.
+ *
  * @return
  *   F_none on success.
  *   F_output_not on success, but no printing is performed.
  */
-#ifndef _di_utf8_print_flush_
-  extern f_status_t utf8_print_flush(fll_program_data_t * const main, utf8_setting_t * const setting);
-#endif // _di_utf8_print_flush_
+#ifndef _di_utf8_print_combining_or_width_invalid_
+  extern f_status_t utf8_print_combining_or_width_invalid(utf8_setting_t * const setting, const fl_print_t print);
+#endif // _di_utf8_print_combining_or_width_invalid_
 
 /**
  * Print help.
@@ -312,6 +318,8 @@ extern "C" {
  *   The main program settings.
  *
  *   This does not alter setting.status.
+ *
+ *   Assumed to always be non-NULL.
  * @param print
  *   The output structure to print to.
  *
@@ -334,6 +342,8 @@ extern "C" {
  *   The main program settings.
  *
  *   This does not alter setting.status.
+ *
+ *   Assumed to always be non-NULL.
  * @param print
  *   Designates the how and where to print.
  *
@@ -356,6 +366,8 @@ extern "C" {
  *   The main program settings.
  *
  *   This does not alter setting.status.
+ *
+ *   Assumed to always be non-NULL.
  * @param print
  *   Designates the how and where to print.
  *
@@ -378,6 +390,8 @@ extern "C" {
  *   The main program settings.
  *
  *   This does not alter setting.status.
+ *
+ *   Assumed to always be non-NULL.
  * @param print
  *   Designates the how and where to print.
  *
@@ -400,6 +414,8 @@ extern "C" {
  *   The main program settings.
  *
  *   This does not alter setting.status.
+ *
+ *   Assumed to always be non-NULL.
  * @param print
  *   Designates the how and where to print.
  *
@@ -414,12 +430,14 @@ extern "C" {
 /**
  * Print the raw character data (binary / byte sequence).
  *
- * @param main
- *   The main program data.
  * @param setting
  *   The main program settings.
  *
+ *   This does not alter setting.status.
+ *
  *   Assumed to always be non-NULL.
+ * @param print
+ *   Designates the how and where to print.
  * @param raw
  *   The raw string in integer format.
  * @param width
@@ -430,18 +448,20 @@ extern "C" {
  *   F_output_not on success, but no printing is performed.
  */
 #ifndef _di_utf8_print_raw_bytesequence_
-  extern f_status_t utf8_print_raw_bytesequence(fll_program_data_t * const main, utf8_setting_t * const setting, const f_utf_char_t raw, const uint8_t width);
+  extern f_status_t utf8_print_raw_bytesequence(utf8_setting_t * const setting, const fl_print_t print, const f_utf_char_t raw, const uint8_t width);
 #endif // _di_utf8_print_raw_bytesequence_
 
 /**
  * Print the raw character data (codepoint).
  *
- * @param main
- *   The main program data.
  * @param setting
  *   The main program settings.
  *
+ *   This does not alter setting.status.
+ *
  *   Assumed to always be non-NULL.
+ * @param print
+ *   Designates the how and where to print.
  * @param raw
  *   The raw string already in codepoint format.
  *
@@ -450,18 +470,20 @@ extern "C" {
  *   F_output_not on success, but no printing is performed.
  */
 #ifndef _di_utf8_print_raw_codepoint_
-  extern f_status_t utf8_print_raw_codepoint(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t raw);
+  extern f_status_t utf8_print_raw_codepoint(utf8_setting_t * const setting, const fl_print_t print, const f_string_static_t raw);
 #endif // _di_utf8_print_raw_codepoint_
 
 /**
  * Print the width or combining state of the for a raw character.
  *
- * @param main
- *   The main program data.
  * @param setting
  *   The main program settings.
  *
+ *   This does not alter setting.status.
+ *
  *   Assumed to always be non-NULL.
+ * @param print
+ *   Designates the how and where to print.
  * @param width
  *   The pre-calculated width.
  *
@@ -472,18 +494,20 @@ extern "C" {
  * @see utf8_print_width()
  */
 #ifndef _di_utf8_print_raw_combining_or_width_
-  extern f_status_t utf8_print_raw_combining_or_width(fll_program_data_t * const main, utf8_setting_t * const setting, const uint8_t width);
+  extern f_status_t utf8_print_raw_combining_or_width(utf8_setting_t * const setting, const fl_print_t print, const uint8_t width);
 #endif // _di_utf8_print_raw_combining_or_width_
 
 /**
  * Print the input file section header.
  *
- * @param main
- *   The main program data.
  * @param setting
  *   The main program settings.
  *
+ *   This does not alter setting.status.
+ *
  *   Assumed to always be non-NULL.
+ * @param print
+ *   Designates the how and where to print.
  * @param name
  *   The name of the file.
  * @param index
@@ -494,18 +518,20 @@ extern "C" {
  *   F_output_not on success, but no printing is performed.
  */
 #ifndef _di_utf8_print_section_header_file_
-  extern f_status_t utf8_print_section_header_file(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t name, const f_array_length_t index);
+  extern f_status_t utf8_print_section_header_file(utf8_setting_t * const setting, const fl_print_t print, const f_string_static_t name, const f_array_length_t index);
 #endif // _di_utf8_print_section_header_file_
 
 /**
  * Print the input parameter section header.
  *
- * @param main
- *   The main program data.
  * @param setting
  *   The main program settings.
  *
+ *   This does not alter setting.status.
+ *
  *   Assumed to always be non-NULL.
+ * @param print
+ *   Designates the how and where to print.
  * @param index
  *   The index position of the parameter.
  *
@@ -514,36 +540,40 @@ extern "C" {
  *   F_output_not on success, but no printing is performed.
  */
 #ifndef _di_utf8_print_section_header_parameter_
-  extern f_status_t utf8_print_section_header_parameter(fll_program_data_t * const main, utf8_setting_t * const setting, const f_array_length_t index);
+  extern f_status_t utf8_print_section_header_parameter(utf8_setting_t * const setting, const fl_print_t print, const f_array_length_t index);
 #endif // _di_utf8_print_section_header_parameter_
 
 /**
  * Print the input pipe section header.
  *
- * @param main
- *   The main program data.
  * @param setting
  *   The main program settings.
  *
+ *   This does not alter setting.status.
+ *
  *   Assumed to always be non-NULL.
+ * @param print
+ *   Designates the how and where to print.
  *
  * @return
  *   F_none on success.
  *   F_output_not on success, but no printing is performed.
  */
 #ifndef _di_utf8_print_section_header_pipe_
-  extern f_status_t utf8_print_section_header_pipe(fll_program_data_t * const main, utf8_setting_t * const setting);
+  extern f_status_t utf8_print_section_header_pipe(utf8_setting_t * const setting, const fl_print_t print);
 #endif // _di_utf8_print_section_header_pipe_
 
 /**
  * Print the width of the given character.
  *
- * @param main
- *   The main program data.
  * @param setting
  *   The main program settings.
  *
+ *   This does not alter setting.status.
+ *
  *   Assumed to always be non-NULL.
+ * @param print
+ *   Designates the how and where to print.
  * @param sequence
  *   A byte sequences representing a single character whose width is to be printed.
  *
@@ -552,7 +582,7 @@ extern "C" {
  *   F_output_not on success, but no printing is performed.
  */
 #ifndef _di_utf8_print_width_
-  extern f_status_t utf8_print_width(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t sequence);
+  extern f_status_t utf8_print_width(utf8_setting_t * const setting, const fl_print_t print, const f_string_static_t sequence);
 #endif // _di_utf8_print_width_
 
 #ifdef __cplusplus
index fd5555048aee568ad9fc62df1f60d7fc82e43f23..dcf6e449d055317cead9e0f8de2633e3f06fda18 100644 (file)
@@ -29,25 +29,25 @@ extern "C" {
       if (status == F_failure || status == F_utf_not || status == F_complete_not_utf || status == F_utf_fragment || status == F_valid_not) {
         valid_not = F_true;
 
-        utf8_print_character_invalid(main, setting, sequence);
+        utf8_print_character_invalid(setting, main->output, sequence);
       }
       else {
         status = F_status_set_error(status);
 
-        utf8_print_error_decode(main, setting, status, sequence);
+        utf8_print_error_decode(setting, main->error, status, sequence);
 
         return status;
       }
     }
     else if (!(setting->flag & utf8_main_flag_verify_e)) {
       if (setting->mode & utf8_mode_to_bytesequence_e) {
-        utf8_print_bytesequence(main, setting, sequence);
+        utf8_print_bytesequence(setting, main->output, sequence);
       }
       else if (setting->mode & utf8_mode_to_codepoint_e) {
-        utf8_print_codepoint(main, setting, codepoint);
+        utf8_print_codepoint(setting, main->output, codepoint);
       }
       else {
-        utf8_print_combining_or_width(main, setting, sequence);
+        utf8_print_combining_or_width(setting, main->output, sequence);
       }
     }
 
index 29cc93014970fb85c8f5359f2d3715686fbe9ddd..d0fb38ed2e2ca35a7ffb16695f531dddb97341d1 100644 (file)
@@ -36,19 +36,19 @@ extern "C" {
         if (status == F_failure || status == F_utf_not || status == F_complete_not_utf || status == F_utf_fragment || status == F_valid_not) {
           valid_not = F_true;
 
-          utf8_print_character_invalid(main, setting, unicode);
+          utf8_print_character_invalid(setting, main->output, unicode);
         }
         else {
           status = F_status_set_error(status);
 
-          utf8_print_error_decode(main, setting, status, unicode);
+          utf8_print_error_decode(setting, main->error, status, unicode);
 
           return status;
         }
       }
       else if (!(setting->flag & utf8_main_flag_verify_e)) {
         if (setting->mode & utf8_mode_to_codepoint_e) {
-          utf8_print_codepoint(main, setting, codepoint);
+          utf8_print_codepoint(setting, main->output, codepoint);
         }
         else {
           f_char_t byte[4] = { 0, 0, 0, 0 };
@@ -58,22 +58,22 @@ extern "C" {
 
           if (F_status_is_error(status)) {
             if (setting->mode & utf8_mode_to_bytesequence_e) {
-              utf8_print_error_encode(main, setting, status, codepoint);
+              utf8_print_error_encode(setting, main->error, status, codepoint);
             }
             else {
-              utf8_print_error_combining_or_width(main, setting);
+              utf8_print_combining_or_width_invalid(setting, main->output);
             }
           }
           else if (setting->mode & utf8_mode_to_bytesequence_e) {
             status = F_none;
             unicode.used = macro_f_utf_byte_width(unicode.string[0]);
 
-            utf8_print_bytesequence(main, setting, unicode);
+            utf8_print_bytesequence(setting, main->output, unicode);
           }
           else {
             status = F_none;
 
-            utf8_print_combining_or_width(main, setting, unicode);
+            utf8_print_combining_or_width(setting, main->output, unicode);
           }
         }
       }
@@ -81,7 +81,7 @@ extern "C" {
     else if (*mode == utf8_codepoint_mode_bad_end_e) {
       status = F_none;
 
-      utf8_print_character_invalid(main, setting, unicode);
+      utf8_print_character_invalid(setting, main->output, unicode);
     }
     else {
       return F_none;
@@ -132,12 +132,12 @@ extern "C" {
         if (status == F_number || status == F_utf_not || status == F_complete_not_utf || status == F_utf_fragment || status == F_number_decimal || status == F_number_negative || status == F_number_positive || status == F_number_overflow) {
           valid_not = F_true;
 
-          utf8_print_character_invalid(main, setting, hex);
+          utf8_print_character_invalid(setting, main->output, hex);
         }
         else {
           status = F_status_set_error(status);
 
-          utf8_print_error_decode(main, setting, status, hex);
+          utf8_print_error_decode(setting, main->error, status, hex);
 
           return status;
         }
@@ -152,20 +152,20 @@ extern "C" {
         }
 
         if (setting->mode & utf8_mode_to_bytesequence_e) {
-          utf8_print_raw_bytesequence(main, setting, raw, width);
+          utf8_print_raw_bytesequence(setting, main->output, raw, width);
         }
         else if (setting->mode & utf8_mode_to_codepoint_e) {
-          utf8_print_raw_codepoint(main, setting, setting->text);
+          utf8_print_raw_codepoint(setting, main->output, setting->text);
         }
         else {
-          utf8_print_raw_combining_or_width(main, setting, width);
+          utf8_print_raw_combining_or_width(setting, main->output, width);
         }
       }
     }
     else if (*mode == utf8_codepoint_mode_bad_end_e) {
       status = F_none;
 
-      utf8_print_character_invalid(main, setting, hex);
+      utf8_print_character_invalid(setting, main->output, hex);
     }
     else {
       return F_none;
index a26997b19a835056cb73a5869ff899b97ea3779c..28ce190558a65d6baee6f5d3ab64282c1251cb97 100644 (file)
@@ -32,7 +32,7 @@ extern "C" {
     if (main->pipe & fll_program_data_pipe_input_e) {
       const f_file_t file = macro_f_file_t_initialize(F_type_input_d, F_type_descriptor_input_d, F_file_flag_read_only_d, 32768, F_file_default_write_size_d);
 
-      utf8_print_section_header_pipe(main, setting);
+      utf8_print_section_header_pipe(setting, main->output);
 
       if (setting->mode & utf8_mode_from_bytesequence_e) {
         setting->status = utf8_process_file_bytesequence(main, setting, file);
@@ -73,7 +73,7 @@ extern "C" {
           main->signal_check = 0;
         }
 
-        utf8_print_section_header_file(main, setting, setting->path_files_from.array[i], i);
+        utf8_print_section_header_file(setting, main->output, setting->path_files_from.array[i], i);
 
         setting->status = f_file_stream_open(setting->path_files_from.array[i], f_string_empty_s, &file);
 
@@ -139,7 +139,7 @@ extern "C" {
           main->signal_check = 0;
         }
 
-        utf8_print_section_header_parameter(main, setting, main->parameters.remaining.array[i]);
+        utf8_print_section_header_parameter(setting, main->output, main->parameters.remaining.array[i]);
 
         setting->status = utf8_process_text(main, setting, main->parameters.arguments.array[main->parameters.remaining.array[i]]);