]> Kevux Git Server - fll/commitdiff
Progress: Continue mass converting to f_string_static_t.
authorKevin Day <thekevinday@gmail.com>
Mon, 7 Feb 2022 03:42:46 +0000 (21:42 -0600)
committerKevin Day <thekevinday@gmail.com>
Mon, 7 Feb 2022 03:52:04 +0000 (21:52 -0600)
This includes some performance tweaks based on the previous commit in regards to file stream read inefficiency.

53 files changed:
level_0/f_file/c/file.c
level_3/fss_basic_list_read/c/common.c
level_3/fss_basic_list_read/c/common.h
level_3/fss_basic_list_read/c/fss_basic_list_read.c
level_3/fss_basic_list_read/c/main.c
level_3/fss_basic_list_read/c/private-common.h
level_3/fss_basic_list_read/c/private-print.c
level_3/fss_basic_list_read/c/private-read.c
level_3/fss_basic_list_read/c/private-read.h
level_3/fss_basic_list_write/c/fss_basic_list_write.c
level_3/fss_basic_list_write/c/private-common.h
level_3/fss_basic_read/c/common.c
level_3/fss_basic_read/c/common.h
level_3/fss_basic_read/c/fss_basic_read.c
level_3/fss_basic_read/c/private-common.h
level_3/fss_basic_read/c/private-print.c
level_3/fss_basic_read/c/private-read.c
level_3/fss_basic_write/c/fss_basic_write.c
level_3/fss_basic_write/c/private-common.h
level_3/fss_embedded_list_read/c/common.c
level_3/fss_embedded_list_read/c/common.h
level_3/fss_embedded_list_read/c/fss_embedded_list_read.c
level_3/fss_embedded_list_read/c/private-common.h
level_3/fss_embedded_list_read/c/private-print.c
level_3/fss_embedded_list_write/c/fss_embedded_list_write.c
level_3/fss_embedded_list_write/c/private-common.h
level_3/fss_extended_list_read/c/common.c
level_3/fss_extended_list_read/c/common.h
level_3/fss_extended_list_read/c/fss_extended_list_read.c
level_3/fss_extended_list_read/c/private-common.h
level_3/fss_extended_list_read/c/private-print.c
level_3/fss_extended_list_read/c/private-read.c
level_3/fss_extended_list_write/c/fss_extended_list_write.c
level_3/fss_extended_list_write/c/private-common.h
level_3/fss_extended_read/c/common.c
level_3/fss_extended_read/c/common.h
level_3/fss_extended_read/c/fss_extended_read.c
level_3/fss_extended_read/c/main.c
level_3/fss_extended_read/c/private-common.h
level_3/fss_extended_read/c/private-print.c
level_3/fss_extended_read/c/private-read.c
level_3/fss_extended_write/c/fss_extended_write.c
level_3/fss_extended_write/c/private-common.h
level_3/fss_identify/c/fss_identify.c
level_3/fss_payload_read/c/common.c
level_3/fss_payload_read/c/common.h
level_3/fss_payload_read/c/fss_payload_read.c
level_3/fss_payload_read/c/private-common.h
level_3/fss_payload_read/c/private-print.c
level_3/fss_payload_read/c/private-read.c
level_3/fss_payload_write/c/fss_payload_write.c
level_3/fss_payload_write/c/private-common.h
level_3/iki_read/c/iki_read.c

index 50ba7fbcdb296c227483b7a20a7e79b12dfe1f9b..1e2f35fbbaf8e73b85ae5900fd1f4717b52a1e1b 100644 (file)
@@ -1511,7 +1511,7 @@ extern "C" {
     f_status_t status = F_none;
     ssize_t size_read = 0;
 
-    for (;;) {
+    do {
 
       status = f_string_dynamic_increase_by(file.size_read, buffer);
       if (F_status_is_error(status)) return status;
@@ -1532,8 +1532,7 @@ extern "C" {
 
       buffer->used += size_read;
 
-      if (size_read < file.size_read) break;
-    } // for
+    } while (size_read == file.size_read);
 
     return F_none_eof;
   }
index bceee123ebe11beb6f2d2f10aae27a33a7965a3d..966d145d7e236cf1c7cce38e8159b213bc8e7580 100644 (file)
@@ -14,6 +14,8 @@ extern "C" {
 #endif // _di_fss_basic_list_read_program_name_
 
 #ifndef _di_fss_basic_list_read_defines_
+  const f_string_static_t fss_basic_list_read_pipe_name_s = macro_f_string_static_t_initialize(FSS_BASIC_LIST_READ_pipe_name_s, 0, FSS_BASIC_LIST_READ_pipe_name_s_length);
+
   const f_string_static_t fss_basic_list_read_pipe_content_end_s = macro_f_string_static_t_initialize(FSS_BASIC_LIST_READ_pipe_content_end_s, 0, FSS_BASIC_LIST_READ_pipe_content_end_s_length);
   const f_string_static_t fss_basic_list_read_pipe_content_ignore_s = macro_f_string_static_t_initialize(FSS_BASIC_LIST_READ_pipe_content_ignore_s, 0, FSS_BASIC_LIST_READ_pipe_content_ignore_s_length);
   const f_string_static_t fss_basic_list_read_pipe_content_start_s = macro_f_string_static_t_initialize(FSS_BASIC_LIST_READ_pipe_content_start_s, 0, FSS_BASIC_LIST_READ_pipe_content_start_s_length);
@@ -51,6 +53,14 @@ extern "C" {
   const f_string_static_t fss_basic_list_read_long_trim_s = macro_f_string_static_t_initialize(FSS_BASIC_LIST_READ_long_trim_s, 0, FSS_BASIC_LIST_READ_long_trim_s_length);
 #endif // _di_fss_basic_list_read_parameters_
 
+#ifndef _di_fss_basic_list_read_delimit_mode_
+  const f_string_static_t fss_basic_list_read_delimit_mode_name_none_s = macro_f_string_static_t_initialize(FSS_BASIC_LIST_READ_delimit_mode_name_none_s, 0, FSS_BASIC_LIST_READ_delimit_mode_name_none_s_length);
+  const f_string_static_t fss_basic_list_read_delimit_mode_name_all_s = macro_f_string_static_t_initialize(FSS_BASIC_LIST_READ_delimit_mode_name_all_s, 0, FSS_BASIC_LIST_READ_delimit_mode_name_all_s_length);
+  const f_string_static_t fss_basic_list_read_delimit_mode_name_object_s = macro_f_string_static_t_initialize(FSS_BASIC_LIST_READ_delimit_mode_name_object_s, 0, FSS_BASIC_LIST_READ_delimit_mode_name_object_s_length);
+  const f_string_static_t fss_basic_list_read_delimit_mode_name_greater_s = macro_f_string_static_t_initialize(FSS_BASIC_LIST_READ_delimit_mode_name_greater_s, 0, FSS_BASIC_LIST_READ_delimit_mode_name_greater_s_length);
+  const f_string_static_t fss_basic_list_read_delimit_mode_name_lesser_s = macro_f_string_static_t_initialize(FSS_BASIC_LIST_READ_delimit_mode_name_lesser_s, 0, FSS_BASIC_LIST_READ_delimit_mode_name_lesser_s_length);
+#endif // _di_fss_basic_list_read_delimit_mode_
+
 #ifndef _di_fss_basic_list_read_main_delete_
   f_status_t fss_basic_list_read_main_delete(fll_program_data_t * const main) {
 
index 38284050c4706fa1341f42bbfe8b4af196b9a030..83e71a1acb1646eeec2db578e37d4ff223e9bf01 100644 (file)
@@ -38,11 +38,11 @@ extern "C" {
     #define FSS_BASIC_LIST_READ_program_version_nano_s_length 0
   #endif // !(defined(FSS_BASIC_LIST_READ_program_version_nano_s) && defined(FSS_BASIC_LIST_READ_program_version_nano_s_length))
 
-  #define FSS_BASIC_LIST_READ_program_version_s FSS_BASIC_LIST_READ_program_version_major_s F_string_ascii_period_s FSS_BASIC_LIST_READ_program_version_minor_s F_string_ascii_period_s FSS_BASIC_LIST_READ_program_version_micro_s fss_basic_list_program_version_nano_prefix_s FSS_BASIC_LIST_READ_program_version_nano_s
+  #define FSS_BASIC_LIST_READ_program_version_s FSS_BASIC_LIST_READ_program_version_major_s F_string_ascii_period_s FSS_BASIC_LIST_READ_program_version_minor_s F_string_ascii_period_s FSS_BASIC_LIST_READ_program_version_micro_s FSS_BASIC_LIST_READ_program_version_nano_prefix_s FSS_BASIC_LIST_READ_program_version_nano_s
 
-  #define FSS_BASIC_LIST_READ_program_version_s_length FSS_BASIC_LIST_READ_program_version_major_s_length + F_string_ascii_period_s_length + FSS_BASIC_LIST_READ_program_version_minor_s_length + F_string_ascii_period_s_length + FSS_BASIC_LIST_READ_program_version_micro_s_length + fss_basic_list_program_version_nano_prefix_s_length + FSS_BASIC_LIST_READ_program_version_nano_s_length
+  #define FSS_BASIC_LIST_READ_program_version_s_length FSS_BASIC_LIST_READ_program_version_major_s_length + F_string_ascii_period_s_length + FSS_BASIC_LIST_READ_program_version_minor_s_length + F_string_ascii_period_s_length + FSS_BASIC_LIST_READ_program_version_micro_s_length + FSS_BASIC_LIST_READ_program_version_nano_prefix_s_length + FSS_BASIC_LIST_READ_program_version_nano_s_length
 
-  extern const f_string_static_t fss_basic_list_program_version_s;
+  extern const f_string_static_t fss_basic_list_read_program_version_s;
 #endif // _di_fss_basic_list_read_program_version_
 
 /**
@@ -55,24 +55,36 @@ extern "C" {
   #define FSS_BASIC_LIST_READ_program_name_s_length      19
   #define FSS_BASIC_LIST_READ_program_name_long_s_length 19
 
-  extern const f_string_static_t fss_basic_list_program_name_s;
-  extern const f_string_static_t fss_basic_list_program_name_long_s;
+  extern const f_string_static_t fss_basic_list_read_program_name_s;
+  extern const f_string_static_t fss_basic_list_read_program_name_long_s;
 #endif // _di_fss_basic_list_read_program_name_
 
 /**
  * The program defines.
+ *
+ * fss_basic_list_read_pipe_*:
+ *   - name:           A name used to represent the pipe when printing file names.
+ *   - content_end:    A code used to reprsent the end of Content for use in binary formats.
+ *   - content_ignore: A code used to reprsent the ignoring Content for use in binary formats.
+ *   - content_start:  A code used to reprsent the start of Content for use in binary formats.
  */
 #ifndef _di_fss_basic_list_read_defines_
   #define fss_basic_list_read_signal_check_d 10000
 
+  #define FSS_BASIC_LIST_READ_pipe_name_s "(pipe)"
+
   #define FSS_BASIC_LIST_READ_pipe_content_end_s    "\f"
   #define FSS_BASIC_LIST_READ_pipe_content_ignore_s "\v"
   #define FSS_BASIC_LIST_READ_pipe_content_start_s  "\b"
 
+  #define FSS_BASIC_LIST_READ_pipe_name_s_length 6
+
   #define FSS_BASIC_LIST_READ_pipe_content_end_s_length    1
   #define FSS_BASIC_LIST_READ_pipe_content_ignore_s_length 1
   #define FSS_BASIC_LIST_READ_pipe_content_start_s_length  1
 
+  extern const f_string_static_t fss_basic_list_read_pipe_name_s;
+
   extern const f_string_static_t fss_basic_list_read_pipe_content_end_s;
   extern const f_string_static_t fss_basic_list_read_pipe_content_ignore_s;
   extern const f_string_static_t fss_basic_list_read_pipe_content_start_s;
@@ -226,7 +238,7 @@ extern "C" {
       macro_f_console_parameter_t_initialize(fss_basic_list_read_short_trim_s.string, fss_basic_list_read_long_trim_s.string, 0, 0, f_console_type_normal_e), \
     }
 
-  #define fss_basic_list_total_parameters_d 23
+  #define fss_basic_list_read_total_parameters_d 23
 #endif // _di_fss_basic_list_read_parameters_
 
 /**
@@ -243,17 +255,23 @@ extern "C" {
  *   - object:                 Objects arre to have delimits applied.
  */
 #ifndef _di_fss_basic_list_read_delimit_mode_
-  #define fss_basic_list_read_delimit_mode_name_none_s    "none"
-  #define fss_basic_list_read_delimit_mode_name_all_s     "all"
-  #define fss_basic_list_read_delimit_mode_name_object_s  "object"
-  #define fss_basic_list_read_delimit_mode_name_greater_s "+"
-  #define fss_basic_list_read_delimit_mode_name_lesser_s  "-"
-
-  #define fss_basic_list_read_delimit_mode_name_none_s_length    4
-  #define fss_basic_list_read_delimit_mode_name_all_s_length     3
-  #define fss_basic_list_read_delimit_mode_name_object_s_length  6
-  #define fss_basic_list_read_delimit_mode_name_greater_s_length 1
-  #define fss_basic_list_read_delimit_mode_name_lesser_s_length  1
+  #define FSS_BASIC_LIST_READ_delimit_mode_name_none_s    "none"
+  #define FSS_BASIC_LIST_READ_delimit_mode_name_all_s     "all"
+  #define FSS_BASIC_LIST_READ_delimit_mode_name_object_s  "object"
+  #define FSS_BASIC_LIST_READ_delimit_mode_name_greater_s "+"
+  #define FSS_BASIC_LIST_READ_delimit_mode_name_lesser_s  "-"
+
+  #define FSS_BASIC_LIST_READ_delimit_mode_name_none_s_length    4
+  #define FSS_BASIC_LIST_READ_delimit_mode_name_all_s_length     3
+  #define FSS_BASIC_LIST_READ_delimit_mode_name_object_s_length  6
+  #define FSS_BASIC_LIST_READ_delimit_mode_name_greater_s_length 1
+  #define FSS_BASIC_LIST_READ_delimit_mode_name_lesser_s_length  1
+
+  extern const f_string_static_t fss_basic_list_read_delimit_mode_name_none_s;
+  extern const f_string_static_t fss_basic_list_read_delimit_mode_name_all_s;
+  extern const f_string_static_t fss_basic_list_read_delimit_mode_name_object_s;
+  extern const f_string_static_t fss_basic_list_read_delimit_mode_name_greater_s;
+  extern const f_string_static_t fss_basic_list_read_delimit_mode_name_lesser_s;
 
   enum {
     fss_basic_list_read_delimit_mode_none_e = 1,
index a3ced28508d8c4ea17b39c436757cc06a3fe14ef..91636e452b55f5a2b64adebdec20febd1cd7eedb 100644 (file)
@@ -12,7 +12,7 @@ extern "C" {
 
     flockfile(file.stream);
 
-    fll_program_print_help_header(file, context, fss_basic_list_program_name_long_s, fss_basic_list_program_version_s);
+    fll_program_print_help_header(file, context, fss_basic_list_read_program_name_long_s, fss_basic_list_read_program_version_s);
 
     fll_program_print_help_option(file, context, f_console_standard_short_help_s, f_console_standard_long_help_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, "    Print this help message.");
     fll_program_print_help_option(file, context, f_console_standard_short_dark_s, f_console_standard_long_dark_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, "    Output using colors that show up better on dark backgrounds.");
@@ -41,7 +41,7 @@ extern "C" {
     fll_program_print_help_option(file, context, fss_basic_list_read_short_total_s, fss_basic_list_read_long_total_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, "   Print the total number of lines.");
     fll_program_print_help_option(file, context, fss_basic_list_read_short_trim_s, fss_basic_list_read_long_trim_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, "    Trim Object names on select or print.");
 
-    fll_program_print_help_usage(file, context, fss_basic_list_program_name_s, fll_program_parameter_filenames_s);
+    fll_program_print_help_usage(file, context, fss_basic_list_read_program_name_s, fll_program_parameter_filenames_s);
 
     fl_print_format(" %[Notes:%]%r", file.stream, context.set.important, context.set.important, f_string_eol_s);
 
@@ -50,63 +50,63 @@ extern "C" {
     fl_print_format("  All numeric positions (indexes) start at 0 instead of 1.%r", file.stream, f_string_eol_s);
     fl_print_format("  For example, a file of 17 lines would range from 0 to 16.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  When using the %[%r%s%] option, an order of operations is enforced on the parameters.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_depth_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  When using the %[%r%r%] option, an order of operations is enforced on the parameters.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_depth_s, context.set.notable, f_string_eol_s);
 
     fl_print_format("  When this order of operations is in effect, parameters to the right of a depth parameter are influenced by that depth parameter:%r", file.stream, f_string_eol_s);
 
-    fl_print_format("    %[%r%s%]: An Object index at the specified depth.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_at_s, context.set.notable, f_string_eol_s);
-    fl_print_format("    %[%r%s%]: A new depth within the specified depth, indexed from the root.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_depth_s, context.set.notable, f_string_eol_s);
-    fl_print_format("    %[%r%s%]: An Object name at the specified depth.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_name_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("    %[%r%r%]: An Object index at the specified depth.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_at_s, context.set.notable, f_string_eol_s);
+    fl_print_format("    %[%r%r%]: A new depth within the specified depth, indexed from the root.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_depth_s, context.set.notable, f_string_eol_s);
+    fl_print_format("    %[%r%r%]: An Object name at the specified depth.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_name_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameter %[%r%s%] must be in numeric order, but values in between may be skipped.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_depth_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  The parameter %[%r%r%] must be in numeric order, but values in between may be skipped.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_depth_s, context.set.notable, f_string_eol_s);
     fl_print_format("    ('-d 0 -a 1 -d 2 -a 2' would specify index 1 at depth 0, any index at depth 1, and index 2 at depth 2.)%r", file.stream, f_string_eol_s);
     fl_print_format("    ('-d 2 -a 1 -d 0 -a 2' would be invalid because depth 2 is before depth 1.)%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameter %[%r%s%] selects a Content column.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_select_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  The parameter %[%r%r%] selects a Content column.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_select_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  Specify both %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_object_s, context.set.notable);
-    fl_print_format(" and the %[%r%s%] parameters to get the total objects.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_total_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  Specify both %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_object_s, context.set.notable);
+    fl_print_format(" and the %[%r%r%] parameters to get the total objects.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_total_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  When both %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_at_s, context.set.notable);
-    fl_print_format(" and %[%r%s%] parameters are specified (at the same depth),", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_name_s, context.set.notable);
-    fl_print_format(" the %[%r%s%] parameter value will be treated as a position relative to the specified", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_at_s, context.set.notable);
-    fl_print_format(" %[%s%s%] parameter value.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_name_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  When both %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_at_s, context.set.notable);
+    fl_print_format(" and %[%r%r%] parameters are specified (at the same depth),", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_name_s, context.set.notable);
+    fl_print_format(" the %[%r%r%] parameter value will be treated as a position relative to the specified", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_at_s, context.set.notable);
+    fl_print_format(" %[%r%r%] parameter value.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_name_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  This program may support parameters, such as %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_depth_s, context.set.notable);
-    fl_print_format(" or %[%r%s%], even if not supported by the standard.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_select_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  This program may support parameters, such as %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_depth_s, context.set.notable);
+    fl_print_format(" or %[%r%r%], even if not supported by the standard.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_select_s, context.set.notable, f_string_eol_s);
     fl_print_format("  This is done to help ensure consistency for scripting.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  For parameters like %[%r%s%],", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_depth_s, context.set.notable);
+    fl_print_format("  For parameters like %[%r%r%],", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_depth_s, context.set.notable);
     fl_print_format(" if the standard doesn't support nested Content, then only a depth of 0 would be valid.%r", file.stream, f_string_eol_s);
 
-    fl_print_format("  For parameters like %[%r%s%],", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_select_s, context.set.notable);
+    fl_print_format("  For parameters like %[%r%r%],", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_select_s, context.set.notable);
     fl_print_format(" if the standard doesn't support multiple Content groups, then only a select of 0 would be valid.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameter %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_trim_s, context.set.notable);
+    fl_print_format("  The parameter %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_trim_s, context.set.notable);
     fl_print_format(" will remove leading and trailing whitespaces when selecting objects or when printing objects.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  When specifying both the %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_object_s, context.set.notable);
-    fl_print_format(" parameter and the %[%r%s%] parameter, the entire Object and Content are printed, including the formatting.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_content_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  When specifying both the %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_object_s, context.set.notable);
+    fl_print_format(" parameter and the %[%r%r%] parameter, the entire Object and Content are printed, including the formatting.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_content_s, context.set.notable, f_string_eol_s);
     fl_print_format("  Both the Object and Content printed are already escaped.%r", file.stream, f_string_eol_s);
     fl_print_format("  Both the Object and Content are separated by an EOL.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameter %[%r%s%] accepts the following:%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_delimit_s, context.set.notable, f_string_eol_s);
-    fl_print_format("  - %[%s%]: Do not apply delimits.%r", file.stream, context.set.notable, fss_basic_list_read_delimit_mode_name_none_s, context.set.notable, f_string_eol_s);
-    fl_print_format("  - %[%s%]: (default) Apply all delimits.%r", file.stream, context.set.notable, fss_basic_list_read_delimit_mode_name_all_s, context.set.notable, f_string_eol_s);
-    fl_print_format("  - %[%s%]: Apply delimits for Objects.%r", file.stream, context.set.notable, fss_basic_list_read_delimit_mode_name_object_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  The parameter %[%r%r%] accepts the following:%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_delimit_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  - %[%r%]: Do not apply delimits.%r", file.stream, context.set.notable, fss_basic_list_read_delimit_mode_name_none_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  - %[%r%]: (default) Apply all delimits.%r", file.stream, context.set.notable, fss_basic_list_read_delimit_mode_name_all_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  - %[%r%]: Apply delimits for Objects.%r", file.stream, context.set.notable, fss_basic_list_read_delimit_mode_name_object_s, context.set.notable, f_string_eol_s);
     fl_print_format("  - A number, 0 or greater: apply delimits for Content at the specified depth.%r", file.stream, f_string_eol_s);
-    fl_print_format("  - A number, 0 or greater, followed by a %[%s%]: (such as '1+') apply delimits for Content at the specified depth and any greater depth (numerically).%r", file.stream, context.set.notable, fss_basic_list_read_delimit_mode_name_greater_s, context.set.notable, f_string_eol_s, f_string_eol_s);
-    fl_print_format("  - A number, 0 or lesser, followed by a %[%s%]: (such as '1-') apply delimits for Content at the specified depth and any lesser depth (numerically).%r%r", file.stream, context.set.notable, fss_basic_list_read_delimit_mode_name_lesser_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  - A number, 0 or greater, followed by a %[%r%]: (such as '1+') apply delimits for Content at the specified depth and any greater depth (numerically).%r", file.stream, context.set.notable, fss_basic_list_read_delimit_mode_name_greater_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  - A number, 0 or lesser, followed by a %[%r%]: (such as '1-') apply delimits for Content at the specified depth and any lesser depth (numerically).%r%r", file.stream, context.set.notable, fss_basic_list_read_delimit_mode_name_lesser_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The %[%r%s%] parameter may be specified multiple times to customize the delimit behavior.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_delimit_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  The %[%r%r%] parameter may be specified multiple times to customize the delimit behavior.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_delimit_s, context.set.notable, f_string_eol_s);
 
-    fl_print_format("  The %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_delimit_s, context.set.notable);
-    fl_print_format(" values %[%s%]", file.stream, context.set.notable, fss_basic_list_read_delimit_mode_name_none_s, context.set.notable);
-    fl_print_format(" and %[%s%],", file.stream, context.set.notable, fss_basic_list_read_delimit_mode_name_all_s, context.set.notable);
+    fl_print_format("  The %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_delimit_s, context.set.notable);
+    fl_print_format(" values %[%r%]", file.stream, context.set.notable, fss_basic_list_read_delimit_mode_name_none_s, context.set.notable);
+    fl_print_format(" and %[%r%],", file.stream, context.set.notable, fss_basic_list_read_delimit_mode_name_all_s, context.set.notable);
     fl_print_format(" overrule all other delimit values.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameters %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_columns_s, context.set.notable);
-    fl_print_format(" and %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_select_s, context.set.notable);
+    fl_print_format("  The parameters %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_columns_s, context.set.notable);
+    fl_print_format(" and %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_select_s, context.set.notable);
     fl_print_format(" refer to a Content column.%r", file.stream, f_string_eol_s);
     fl_print_format("  The word \"column\" is being loosely defined to refer to a specific Content.%r", file.stream, f_string_eol_s);
     fl_print_format("  This is not to be confused with a depth.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
@@ -195,8 +195,6 @@ extern "C" {
       }
     }
 
-    f_string_static_t * const argv = main->parameters.arguments.array;
-
     status = F_none;
 
     if (main->parameters.array[fss_basic_list_read_parameter_help_e].result == f_console_result_found_e) {
@@ -208,7 +206,7 @@ extern "C" {
     }
 
     if (main->parameters.array[fss_basic_list_read_parameter_version_e].result == f_console_result_found_e) {
-      fll_program_print_version(main->output.to, fss_basic_list_program_version_s);
+      fll_program_print_version(main->output.to, fss_basic_list_read_program_version_s);
 
       fss_basic_list_read_main_delete(main);
 
@@ -219,10 +217,11 @@ extern "C" {
     fss_basic_list_read_file_t files_array[main->parameters.remaining.used + 1];
     fss_basic_list_read_data_t data = fss_basic_list_read_data_t_initialize;
 
+    data.argv = main->parameters.arguments.array;
     data.files.array = files_array;
     data.files.used = 1;
     data.files.size = main->parameters.remaining.used + 1;
-    data.files.array[0].name = "(pipe)";
+    data.files.array[0].name = fss_basic_list_read_pipe_name_s;
     data.files.array[0].range.start = 1;
     data.files.array[0].range.stop = 0;
 
@@ -286,7 +285,7 @@ extern "C" {
           fss_basic_list_read_parameter_total_e,
         };
 
-        const f_string_t parameter_name[] = {
+        const f_string_static_t parameter_name[] = {
           fss_basic_list_read_long_depth_s,
           fss_basic_list_read_long_line_s,
           fss_basic_list_read_long_pipe_s,
@@ -372,7 +371,7 @@ extern "C" {
           }
 
           index = main->parameters.array[fss_basic_list_read_parameter_delimit_e].values.array[i];
-          length = argv[index].used;
+          length = data.argv[index].used;
 
           if (!length) {
             flockfile(main->error.to.stream);
@@ -387,13 +386,13 @@ extern "C" {
 
             break;
           }
-          else if (fl_string_dynamic_compare_string(fss_basic_list_read_delimit_mode_name_none_s.string, argv[index], fss_basic_list_read_delimit_mode_name_none_s.used) == F_equal_to) {
+          else if (fl_string_dynamic_compare_string(fss_basic_list_read_delimit_mode_name_none_s.string, data.argv[index], fss_basic_list_read_delimit_mode_name_none_s.used) == F_equal_to) {
             data.delimit_mode = fss_basic_list_read_delimit_mode_none_e;
           }
-          else if (fl_string_dynamic_compare_string(fss_basic_list_read_delimit_mode_name_all_s.string, argv[index], fss_basic_list_read_delimit_mode_name_all_s.used) == F_equal_to) {
+          else if (fl_string_dynamic_compare_string(fss_basic_list_read_delimit_mode_name_all_s.string, data.argv[index], fss_basic_list_read_delimit_mode_name_all_s.used) == F_equal_to) {
             data.delimit_mode = fss_basic_list_read_delimit_mode_all_e;
           }
-          else if (fl_string_dynamic_compare_string(fss_basic_list_read_delimit_mode_name_object_s.string, argv[index], fss_basic_list_read_delimit_mode_name_object_s.used) == F_equal_to) {
+          else if (fl_string_dynamic_compare_string(fss_basic_list_read_delimit_mode_name_object_s.string, data.argv[index], fss_basic_list_read_delimit_mode_name_object_s.used) == F_equal_to) {
             switch (data.delimit_mode) {
               case 0:
                 data.delimit_mode = fss_basic_list_read_delimit_mode_object_e;
@@ -430,7 +429,7 @@ extern "C" {
               data.delimit_mode = fss_basic_list_read_delimit_mode_content_object_e;
             }
 
-            if (argv[index][length - 1] == fss_basic_list_read_delimit_mode_name_greater_s.string[0]) {
+            if (data.argv[index].string[length - 1] == fss_basic_list_read_delimit_mode_name_greater_s.string[0]) {
               if (!(data.delimit_mode == fss_basic_list_read_delimit_mode_none_e || data.delimit_mode == fss_basic_list_read_delimit_mode_all_e)) {
                 if (data.delimit_mode == fss_basic_list_read_delimit_mode_content_object_e) {
                   data.delimit_mode = fss_basic_list_read_delimit_mode_content_greater_object_e;
@@ -443,7 +442,7 @@ extern "C" {
               // Shorten the length to better convert the remainder to a number.
               --length;
             }
-            else if (argv[index][length - 1] == fss_basic_list_read_delimit_mode_name_lesser_s.string[0]) {
+            else if (data.argv[index].string[length - 1] == fss_basic_list_read_delimit_mode_name_lesser_s.string[0]) {
               if (!(data.delimit_mode == fss_basic_list_read_delimit_mode_none_e || data.delimit_mode == fss_basic_list_read_delimit_mode_all_e)) {
                 if (data.delimit_mode == fss_basic_list_read_delimit_mode_content_object_e) {
                   data.delimit_mode = fss_basic_list_read_delimit_mode_content_lesser_object_e;
@@ -460,14 +459,14 @@ extern "C" {
             f_string_range_t range = macro_f_string_range_t_initialize(length);
 
             // Ignore leading plus sign.
-            if (argv[index][0] == f_string_ascii_plus_s[0]) {
+            if (data.argv[index].string[0] == f_string_ascii_plus_s.string[0]) {
               ++range.start;
             }
 
-            status = fl_conversion_string_to_number_unsigned(argv[index].string, range, &data.delimit_depth);
+            status = fl_conversion_string_to_number_unsigned(data.argv[index].string, range, &data.delimit_depth);
 
             if (F_status_is_error(status)) {
-              fll_error_parameter_integer_print(main->error, F_status_set_fine(status), "fl_conversion_string_to_number_unsigned", F_true, fss_basic_list_read_long_delimit_s, argv[index]);
+              fll_error_parameter_integer_print(main->error, F_status_set_fine(status), "fl_conversion_string_to_number_unsigned", F_true, fss_basic_list_read_long_delimit_s, data.argv[index]);
 
               break;
             }
@@ -493,11 +492,11 @@ extern "C" {
       }
 
       if (F_status_is_error_not(status)) {
-        status = fss_basic_list_read_depth_process(main, arguments, &data);
+        status = fss_basic_list_read_depth_process(main, &data);
       }
 
       // This standard does not support nesting, so any depth greater than 0 can be predicted without processing the file.
-      if (F_status_is_error_not(status) && data.depths.array[0].depth > 0) {
+      if (F_status_is_error_not(status) && data.depths.array[0].depth) {
         if (main->parameters.array[fss_basic_list_read_parameter_total_e].result == f_console_result_found_e) {
           fss_basic_list_read_print_zero(main);
         }
@@ -517,17 +516,9 @@ extern "C" {
 
         funlockfile(main->error.to.stream);
 
-        fss_basic_list_read_depths_resize(0, &data.depths);
-
         status = F_status_set_error(F_parameter);
       }
 
-      if (F_status_is_error_not(status)) {
-        for (f_array_length_t i = 0; i < data.files.used; ++i) {
-          macro_f_string_range_t_clear(data.files.array[i].range);
-        } // for
-      }
-
       if (F_status_is_error_not(status) && main->process_pipe) {
         f_file_t file = f_file_t_initialize;
 
@@ -557,7 +548,7 @@ extern "C" {
         }
       }
 
-      if (F_status_is_error_not(status) && main->parameters.remaining.used > 0) {
+      if (F_status_is_error_not(status) && main->parameters.remaining.used) {
         f_file_t file = f_file_t_initialize;
         f_array_length_t size_file = 0;
         uint16_t signal_check = 0;
@@ -574,14 +565,15 @@ extern "C" {
             signal_check = 0;
           }
 
+          data.files.array[data.files.used].name = data.argv[main->parameters.remaining.array[i]];
           data.files.array[data.files.used].range.start = data.buffer.used;
           file.stream = 0;
           file.id = -1;
 
-          status = f_file_stream_open(argv[main->parameters.remaining.array[i]], 0, &file);
+          status = f_file_stream_open(data.files.array[data.files.used].name, f_string_empty_s, &file);
 
           if (F_status_is_error(status)) {
-            fll_error_file_print(main->error, F_status_set_fine(status), "f_file_stream_open", F_true, argv[main->parameters.remaining.array[i]], f_file_operation_open_s, fll_error_file_type_file_e);
+            fll_error_file_print(main->error, F_status_set_fine(status), "f_file_stream_open", F_true, data.argv[main->parameters.remaining.array[i]], f_file_operation_open_s, fll_error_file_type_file_e);
 
             break;
           }
@@ -590,29 +582,22 @@ extern "C" {
           status = f_file_size_by_id(file.id, &size_file);
 
           if (F_status_is_error(status)) {
-            fll_error_file_print(main->error, F_status_set_fine(status), "f_file_size_by_id", F_true, argv[main->parameters.remaining.array[i]], f_file_operation_read_s, fll_error_file_type_file_e);
+            fll_error_file_print(main->error, F_status_set_fine(status), "f_file_size_by_id", F_true, data.argv[main->parameters.remaining.array[i]], f_file_operation_read_s, fll_error_file_type_file_e);
 
             break;
           }
 
           if (size_file) {
-            status = f_string_dynamic_resize(data.buffer.size + size_file, &data.buffer);
-
-            if (F_status_is_error(status)) {
-              fll_error_file_print(main->error, F_status_set_fine(status), "f_string_dynamic_resize", F_true, argv[main->parameters.remaining.array[i]], f_file_operation_read_s, fll_error_file_type_file_e);
-
-              break;
-            }
+            file.size_read = size_file + 1;
 
             status = f_file_stream_read(file, &data.buffer);
 
             if (F_status_is_error(status)) {
-              fll_error_file_print(main->error, F_status_set_fine(status), "f_file_stream_read", F_true, argv[main->parameters.remaining.array[i]], f_file_operation_read_s, fll_error_file_type_file_e);
+              fll_error_file_print(main->error, F_status_set_fine(status), "f_file_stream_read", F_true, data.argv[main->parameters.remaining.array[i]], f_file_operation_read_s, fll_error_file_type_file_e);
 
               break;
             }
             else if (data.buffer.used > data.files.array[data.files.used].range.start) {
-              data.files.array[data.files.used].name = argv[main->parameters.remaining.array[i]];
               data.files.array[data.files.used++].range.stop = data.buffer.used - 1;
 
               // This standard is newline sensitive, when appending files to the buffer if the file lacks a final newline then this could break the format for files appended thereafter.
@@ -635,7 +620,7 @@ extern "C" {
       }
 
       if (F_status_is_error_not(status)) {
-        status = fss_basic_list_read_process(main, arguments, &data);
+        status = fss_basic_list_read_process(main, &data);
       }
 
       fss_basic_list_read_data_delete_simple(&data);
index c758ed4ba9cf6aebfa179f90149327adaae77d73..29831b8122b14dbcb369e74877407aff4cf18fc5 100644 (file)
@@ -3,7 +3,7 @@
 int main(const int argc, const f_string_t *argv) {
 
   f_console_arguments_t arguments = { argc, argv };
-  fll_program_data_t data = fss_basic_list_read_main_t_initialize;
+  fll_program_data_t data = fll_program_data_t_initialize;
 
   if (f_pipe_input_exists()) {
     data.process_pipe = F_true;
index be183e595a02f3b2dfa1d68f1c84e28fdf76709d..46e122beb12625c17e923c25b0388dcb0e94d01d 100644 (file)
@@ -20,8 +20,8 @@ extern "C" {
  *   - small: An allocation step used for buffers that are anticipated to have small buffers.
  */
 #ifndef _di_fss_basic_list_read_common_
-  #define fss_basic_list_common_allocation_large_d 256
-  #define fss_basic_list_read_common_allocation_small_d 16
+  #define fss_basic_list_read_common_allocation_large_d 2048
+  #define fss_basic_list_read_common_allocation_small_d 128
 #endif // _di_fss_basic_list_read_common_
 
 /**
@@ -86,18 +86,18 @@ extern "C" {
 /**
  * A structure for designating where within the buffer a particular file exists, using a statically allocated array.
  *
- * name:  The name of the file representing the range. Set string to NULL to represent the STDIN pipe.
+ * name:  The name of the file representing the range.
  * range: A range within the buffer representing the file.
  */
 #ifndef _di_fss_basic_list_read_file_t_
   typedef struct {
-    f_string_t name;
+    f_string_static_t name;
     f_string_range_t range;
   } fss_basic_list_read_file_t;
 
   #define fss_basic_list_read_file_t_initialize \
     { \
-      f_string_t_initialize, \
+      f_string_static_t_initialize, \
       f_string_range_t_initialize, \
     }
 #endif // _di_fss_basic_list_read_file_t_
@@ -173,6 +173,8 @@ extern "C" {
     f_number_unsigned_t select;
     f_number_unsigned_t line;
 
+    f_string_static_t *argv;
+
     fss_basic_list_read_files_t files;
     fss_basic_list_read_depths_t depths;
 
@@ -192,6 +194,7 @@ extern "C" {
       0, \
       0, \
       0, \
+      0, \
       fss_basic_list_read_files_t_initialize, \
       fss_basic_list_read_depths_t_initialize, \
       f_string_dynamic_t_initialize, \
index 67a7339fa6c5caf40e30d13204bf6e6dd2b02a0f..3145a5838e19af2445fdfd98fc5c7bfb2a83a67e 100644 (file)
@@ -66,7 +66,7 @@ extern "C" {
   void fss_basic_list_read_print_content_ignore(fll_program_data_t * const main) {
 
     if (main->parameters.array[fss_basic_list_read_parameter_pipe_e].result == f_console_result_found_e) {
-      f_print_character(fss_basic_list_read_pipe_content_ignore_s, main->output.to.stream);
+      f_print_dynamic_raw(fss_basic_list_read_pipe_content_ignore_s, main->output.to.stream);
     }
   }
 #endif // _di_fss_basic_list_read_print_content_ignore_
@@ -75,15 +75,15 @@ extern "C" {
   void fss_basic_list_read_print_object_end(fll_program_data_t * const main) {
 
     if (main->parameters.array[fss_basic_list_read_parameter_pipe_e].result == f_console_result_found_e) {
-      f_print_character(fss_basic_list_read_pipe_content_start_s, main->output.to.stream);
+      f_print_dynamic_raw(fss_basic_list_read_pipe_content_start_s, main->output.to.stream);
     }
     else {
       if (main->parameters.array[fss_basic_list_read_parameter_content_e].result == f_console_result_found_e) {
-        f_print_character(f_fss_basic_list_open_s.string[0], main->output.to.stream);
-        f_print_character(f_fss_basic_list_open_end_s.string[0], main->output.to.stream);
+        f_print_dynamic_raw(f_fss_basic_list_open_s, main->output.to.stream);
+        f_print_dynamic_raw(f_fss_basic_list_open_end_s, main->output.to.stream);
       }
       else {
-        f_print_character(f_fss_eol_s.string[0], main->output.to.stream);
+        f_print_dynamic_raw(f_fss_eol_s, main->output.to.stream);
       }
     }
   }
@@ -93,7 +93,7 @@ extern "C" {
   void fss_basic_list_read_print_set_end(fll_program_data_t * const main) {
 
     if (main->parameters.array[fss_basic_list_read_parameter_pipe_e].result == f_console_result_found_e) {
-      f_print_character(fss_basic_list_read_pipe_content_end_s, main->output.to.stream);
+      f_print_dynamic_raw(fss_basic_list_read_pipe_content_end_s, main->output.to.stream);
     }
   }
 #endif // _di_fss_basic_list_read_print_set_end_
@@ -101,7 +101,7 @@ extern "C" {
 #ifndef _di_fss_basic_list_read_print_one_
   void fss_basic_list_read_print_one(fll_program_data_t * const main) {
 
-    f_print_character(f_string_ascii_1_s.string[0], main->output.to.stream);
+    f_print_dynamic_raw(f_string_ascii_1_s, main->output.to.stream);
     f_print_dynamic_raw(f_string_eol_s, main->output.to.stream);
   }
 #endif // _di_fss_basic_list_read_print_one_
@@ -109,7 +109,7 @@ extern "C" {
 #ifndef _di_fss_basic_list_read_print_zero_
   void fss_basic_list_read_print_zero(fll_program_data_t * const main) {
 
-    f_print_character(f_string_ascii_0_s.string[0], main->output.to.stream);
+    f_print_dynamic_raw(f_string_ascii_0_s, main->output.to.stream);
     f_print_dynamic_raw(f_string_eol_s, main->output.to.stream);
   }
 #endif // _di_fss_basic_list_read_print_zero_
index e26fbc57f0a8e0a868d70dff10f522afa6a7ebd8..aab60ae79909ad19a581622703705c011ed9f4fb 100644 (file)
@@ -8,7 +8,7 @@ extern "C" {
 #endif
 
 #ifndef _di_fss_basic_list_read_delimit_content_is_
-  f_status_t fss_basic_list_read_delimit_content_is(const f_array_length_t depth, fss_basic_list_read_data_t * const data) {
+  f_status_t fss_basic_list_read_delimit_content_is(fss_basic_list_read_data_t * const data, const f_array_length_t depth) {
 
     if (data->delimit_mode == fss_basic_list_read_delimit_mode_none_e) {
       return F_false;
@@ -31,7 +31,7 @@ extern "C" {
 #endif // _di_fss_basic_list_read_delimit_content_is_
 
 #ifndef _di_fss_basic_list_read_delimit_object_is_
-  f_status_t fss_basic_list_read_delimit_object_is(const f_array_length_t depth, fss_basic_list_read_data_t * const data) {
+  f_status_t fss_basic_list_read_delimit_object_is(fss_basic_list_read_data_t * const data, const f_array_length_t depth) {
 
     switch (data->delimit_mode) {
       case fss_basic_list_read_delimit_mode_none_e:
@@ -56,7 +56,7 @@ extern "C" {
 #endif // _di_fss_basic_list_read_delimit_object_is_
 
 #ifndef _di_fss_basic_list_read_depth_process_
-  f_status_t fss_basic_list_read_depth_process(fll_program_data_t * const main, const f_console_arguments_t *arguments, fss_basic_list_read_data_t *data) {
+  f_status_t fss_basic_list_read_depth_process(fll_program_data_t * const main, fss_basic_list_read_data_t * const data) {
 
     f_status_t status = F_none;
 
@@ -108,12 +108,12 @@ extern "C" {
       else {
         position_depth = main->parameters.array[fss_basic_list_read_parameter_depth_e].values.array[i];
 
-        const f_string_range_t range = macro_f_string_range_t_initialize(strlen(argv[position_depth]));
+        const f_string_range_t range = macro_f_string_range_t_initialize(data->argv[position_depth].used);
 
-        status = fl_conversion_string_to_number_unsigned(argv[position_depth].string, range, &data->depths.array[i].depth);
+        status = fl_conversion_string_to_number_unsigned(data->argv[position_depth].string, range, &data->depths.array[i].depth);
 
         if (F_status_is_error(status)) {
-          fll_error_parameter_integer_print(main->error, F_status_set_fine(status), "fl_conversion_string_to_number_unsigned", F_true, fss_basic_list_read_long_depth_s, argv[position_depth]);
+          fll_error_parameter_integer_print(main->error, F_status_set_fine(status), "fl_conversion_string_to_number_unsigned", F_true, fss_basic_list_read_long_depth_s, data->argv[position_depth]);
 
           return status;
         }
@@ -132,12 +132,12 @@ extern "C" {
 
           data->depths.array[i].index_at = main->parameters.array[fss_basic_list_read_parameter_at_e].values.array[position_at];
 
-          const f_string_range_t range = macro_f_string_range_t_initialize(argv[data->depths.array[i].index_at].used);
+          const f_string_range_t range = macro_f_string_range_t_initialize(data->argv[data->depths.array[i].index_at].used);
 
-          status = fl_conversion_string_to_number_unsigned(argv[data->depths.array[i].index_at].string, range, &data->depths.array[i].value_at);
+          status = fl_conversion_string_to_number_unsigned(data->argv[data->depths.array[i].index_at].string, range, &data->depths.array[i].value_at);
 
           if (F_status_is_error(status)) {
-            fll_error_parameter_integer_print(main->error, F_status_set_fine(status), "fl_conversion_string_to_number_unsigned", F_true, fss_basic_list_read_long_at_s, argv[data->depths.array[i].index_at]);
+            fll_error_parameter_integer_print(main->error, F_status_set_fine(status), "fl_conversion_string_to_number_unsigned", F_true, fss_basic_list_read_long_at_s, data->argv[data->depths.array[i].index_at]);
 
             return status;
           }
@@ -158,10 +158,10 @@ extern "C" {
           data->depths.array[i].index_name = main->parameters.array[fss_basic_list_read_parameter_name_e].values.array[position_name];
 
           if (main->parameters.array[fss_basic_list_read_parameter_trim_e].result == f_console_result_found_e) {
-            status = fl_string_dynamic_rip(argv[data->depths.array[i].index_name], &data->depths.array[i].value_name);
+            status = fl_string_rip(data->argv[data->depths.array[i].index_name].string, data->argv[data->depths.array[i].index_name].used, &data->depths.array[i].value_name);
           }
           else {
-            status = f_string_dynamic_append(argv[data->depths.array[i].index_name], &data->depths.array[i].value_name);
+            status = f_string_dynamic_append(data->argv[data->depths.array[i].index_name], &data->depths.array[i].value_name);
           }
 
           if (F_status_is_error(status)) {
@@ -226,7 +226,7 @@ extern "C" {
 #endif // _di_fss_basic_list_read_depth_process_
 
 #ifndef _di_fss_basic_list_read_file_identify_
-  f_string_t fss_basic_list_read_file_identify(const f_array_length_t at, const fss_basic_list_read_files_t files) {
+  f_string_static_t fss_basic_list_read_file_identify(const f_array_length_t at, const fss_basic_list_read_files_t files) {
 
     for (f_array_length_t i = 0; i < files.used; ++i) {
 
@@ -240,14 +240,14 @@ extern "C" {
       return files.array[files.used - 1].name;
     }
 
-    return "";
+    return f_string_empty_s;
   }
 #endif // _di_fss_basic_list_read_file_identify_
 
 #ifndef _di_fss_basic_list_read_load_
-  f_status_t fss_basic_list_read_load(fll_program_data_t * const main, fss_basic_list_read_data_t *data) {
+  f_status_t fss_basic_list_read_load(fll_program_data_t * const main, fss_basic_list_read_data_t * const data) {
 
-    f_state_t state = macro_f_state_t_initialize(fss_basic_list_common_allocation_large_d, fss_basic_list_read_common_allocation_small_d, 0, 0, 0, 0, 0);
+    f_state_t state = macro_f_state_t_initialize(fss_basic_list_read_common_allocation_large_d, fss_basic_list_read_common_allocation_small_d, 0, 0, 0, 0, 0);
     f_string_range_t input = macro_f_string_range_t_initialize(data->buffer.used);
 
     data->delimits_object.used = 0;
@@ -256,9 +256,7 @@ extern "C" {
     const f_status_t status = fll_fss_basic_list_read(data->buffer, state, &input, &data->objects, &data->contents, &data->delimits_object, &data->delimits_content, &data->comments);
 
     if (F_status_is_error(status)) {
-      const f_string_t file_name = fss_basic_list_read_file_identify(input.start, data->files);
-
-      fll_error_file_print(main->error, F_status_set_fine(status), "fll_fss_basic_list_read", F_true, file_name, f_file_operation_process_s, fll_error_file_type_file_e);
+      fll_error_file_print(main->error, F_status_set_fine(status), "fll_fss_basic_list_read", F_true, fss_basic_list_read_file_identify(input.start, data->files), f_file_operation_process_s, fll_error_file_type_file_e);
 
       return status;
     }
@@ -282,16 +280,16 @@ extern "C" {
 #endif // _di_fss_basic_list_read_load_
 
 #ifndef _di_fss_basic_list_read_load_number_
-  f_status_t fss_basic_list_read_load_number(fll_program_data_t * const main, const f_array_length_t parameter, const f_string_t name, const f_console_arguments_t *arguments, f_number_unsigned_t *number) {
+  f_status_t fss_basic_list_read_load_number(fll_program_data_t * const main, fss_basic_list_read_data_t * const data, const f_array_length_t parameter, const f_string_static_t name, f_number_unsigned_t *number) {
 
     if (main->parameters.array[parameter].result == f_console_result_additional_e) {
       const f_array_length_t index = main->parameters.array[parameter].values.array[main->parameters.array[parameter].values.used - 1];
-      const f_string_range_t range = macro_f_string_range_t_initialize(main->argv[index].used);
+      const f_string_range_t range = macro_f_string_range_t_initialize(data->argv[index].used);
 
-      const f_status_t status = fl_conversion_string_to_number_unsigned(main->argv[index].string, range, number);
+      const f_status_t status = fl_conversion_string_to_number_unsigned(data->argv[index].string, range, number);
 
       if (F_status_is_error(status)) {
-        fll_error_parameter_integer_print(main->error, F_status_set_fine(status), "fl_conversion_string_to_number_unsigned", F_true, name, main->argv[index]);
+        fll_error_parameter_integer_print(main->error, F_status_set_fine(status), "fl_conversion_string_to_number_unsigned", F_true, name, data->argv[index]);
 
         return status;
       }
@@ -304,9 +302,9 @@ extern "C" {
 #endif // _di_fss_basic_list_read_load_number_
 
 #ifndef _di_fss_basic_list_read_process_
-  f_status_t fss_basic_list_read_process(fll_program_data_t * const main, const f_console_arguments_t *arguments, fss_basic_list_read_data_t *data) {
+  f_status_t fss_basic_list_read_process(fll_program_data_t * const main, fss_basic_list_read_data_t * const data) {
 
-    f_status_t status = fss_basic_list_read_process_option(main, arguments, data);
+    f_status_t status = fss_basic_list_read_process_option(main, data);
     if (F_status_is_error(status)) return status;
 
     // This standard does not support multiple content groups.
@@ -347,8 +345,8 @@ extern "C" {
     }
 
     f_array_lengths_t except_none = f_array_lengths_t_initialize;
-    f_array_lengths_t *delimits_object = fss_basic_list_read_delimit_object_is(0, data) ? &data->delimits_object : &except_none;
-    f_array_lengths_t *delimits_content = fss_basic_list_read_delimit_content_is(0, data) ? &data->delimits_content : &except_none;
+    f_array_lengths_t *delimits_object = fss_basic_list_read_delimit_object_is(data, 0) ? &data->delimits_object : &except_none;
+    f_array_lengths_t *delimits_content = fss_basic_list_read_delimit_content_is(data, 0) ? &data->delimits_content : &except_none;
     uint16_t signal_check = 0;
 
     if (data->option & fss_basic_list_read_data_option_raw_d) {
@@ -376,7 +374,7 @@ extern "C" {
 #endif // _di_fss_basic_list_read_process_
 
 #ifndef _di_fss_basic_list_read_process_at_
-  f_status_t fss_basic_list_read_process_at(fll_program_data_t * const main, fss_basic_list_read_data_t *data, bool names[]) {
+  f_status_t fss_basic_list_read_process_at(fll_program_data_t * const main, fss_basic_list_read_data_t * const data, bool names[]) {
 
     if (data->depths.array[0].value_at >= data->objects.used) {
       if (data->option & (fss_basic_list_read_data_option_columns_d | fss_basic_list_read_data_option_total_d)) {
@@ -391,8 +389,8 @@ extern "C" {
     }
 
     f_array_lengths_t except_none = f_array_lengths_t_initialize;
-    f_array_lengths_t *delimits_object = fss_basic_list_read_delimit_object_is(0, data) ? &data->delimits_object : &except_none;
-    f_array_lengths_t *delimits_content = fss_basic_list_read_delimit_content_is(0, data) ? &data->delimits_content : &except_none;
+    f_array_lengths_t *delimits_object = fss_basic_list_read_delimit_object_is(data, 0) ? &data->delimits_object : &except_none;
+    f_array_lengths_t *delimits_content = fss_basic_list_read_delimit_content_is(data, 0) ? &data->delimits_content : &except_none;
 
     if (data->option & fss_basic_list_read_data_option_raw_d) {
       delimits_object = &except_none;
@@ -419,7 +417,7 @@ extern "C" {
         if (data->option & fss_basic_list_read_data_option_line_d) {
           f_array_length_t line = 0;
 
-          status = fss_basic_list_read_process_at_line(main, i, *delimits_object, *delimits_content, data, &line);
+          status = fss_basic_list_read_process_at_line(main, data, i, *delimits_object, *delimits_content, &line);
           if (status == F_success) return F_none;
         }
         else if (data->option & fss_basic_list_read_data_option_columns_d) {
@@ -460,7 +458,7 @@ extern "C" {
 #endif // _di_fss_basic_list_read_process_at_
 
 #ifndef _di_fss_basic_list_read_process_at_line_
-  f_status_t fss_basic_list_read_process_at_line(fll_program_data_t * const main, const f_array_length_t at, const f_array_lengths_t delimits_object, const f_array_lengths_t delimits_content, fss_basic_list_read_data_t *data, f_array_length_t *line) {
+  f_status_t fss_basic_list_read_process_at_line(fll_program_data_t * const main, fss_basic_list_read_data_t * const data, const f_array_length_t at, const f_array_lengths_t delimits_object, const f_array_lengths_t delimits_content, f_array_length_t *line) {
 
     if (data->option & fss_basic_list_read_data_option_object_d) {
       if (*line == data->line) {
@@ -487,13 +485,10 @@ extern "C" {
         return F_none;
       }
 
-      f_string_range_t range = f_string_range_t_initialize;
+      f_string_range_t range = data->contents.array[at].array[0];
       f_array_length_t i = 0;
       uint16_t signal_check = 0;
 
-      range.start = data->contents.array[at].array[0].start;
-      range.stop = data->contents.array[at].array[0].stop;
-
       // This content has no data, do not even check "include empty" because it cannot be counted as a line.
       if (range.start > range.stop) {
         return F_none;
@@ -564,7 +559,7 @@ extern "C" {
 #endif // _di_fss_basic_list_read_process_at_line_
 
 #ifndef _di_fss_basic_list_read_process_columns_
-  f_status_t fss_basic_list_read_process_columns(fll_program_data_t * const main, fss_basic_list_read_data_t *data, bool names[]) {
+  f_status_t fss_basic_list_read_process_columns(fll_program_data_t * const main, fss_basic_list_read_data_t * const data, bool names[]) {
 
     if (!(data->option & fss_basic_list_read_data_option_content_d)) {
       flockfile(main->output.to.stream);
@@ -579,9 +574,9 @@ extern "C" {
     f_array_length_t max = 0;
     uint16_t signal_check = 0;
 
-    for (f_array_length_t at = 0; at < data->contents.used; ++at) {
+    for (f_array_length_t i = 0; i < data->contents.used; ++i) {
 
-      if (!names[at]) continue;
+      if (!names[i]) continue;
 
       if (!((++signal_check) % fss_basic_list_read_signal_check_d)) {
         if (fss_basic_list_read_signal_received(main)) {
@@ -591,8 +586,8 @@ extern "C" {
         signal_check = 0;
       }
 
-      if (data->contents.array[at].used > max) {
-        max = data->contents.array[at].used;
+      if (data->contents.array[i].used > max) {
+        max = data->contents.array[i].used;
       }
     } // for
 
@@ -603,11 +598,11 @@ extern "C" {
 #endif // _di_fss_basic_list_read_process_columns_
 
 #ifndef _di_fss_basic_list_read_process_line_
-  f_status_t fss_basic_list_read_process_line(fll_program_data_t * const main, fss_basic_list_read_data_t *data, bool names[]) {
+  f_status_t fss_basic_list_read_process_line(fll_program_data_t * const main, fss_basic_list_read_data_t * const data, bool names[]) {
 
     f_array_lengths_t except_none = f_array_lengths_t_initialize;
-    f_array_lengths_t *delimits_object = fss_basic_list_read_delimit_object_is(0, data) ? &data->delimits_object : &except_none;
-    f_array_lengths_t *delimits_content = fss_basic_list_read_delimit_content_is(0, data) ? &data->delimits_content : &except_none;
+    f_array_lengths_t *delimits_object = fss_basic_list_read_delimit_object_is(data, 0) ? &data->delimits_object : &except_none;
+    f_array_lengths_t *delimits_content = fss_basic_list_read_delimit_content_is(data, 0) ? &data->delimits_content : &except_none;
 
     if (data->option & fss_basic_list_read_data_option_raw_d) {
       delimits_object = &except_none;
@@ -630,7 +625,7 @@ extern "C" {
         signal_check = 0;
       }
 
-      status = fss_basic_list_read_process_at_line(main, i, *delimits_object, *delimits_content, data, &line);
+      status = fss_basic_list_read_process_at_line(main, data, i, *delimits_object, *delimits_content, &line);
       if (status == F_success) break;
     } // for
 
@@ -644,12 +639,10 @@ extern "C" {
     f_array_lengths_t except_none = f_array_lengths_t_initialize;
 
     if (data->depths.array[0].index_name) {
-      f_array_length_t i = 0;
-
       memset(names, F_false, sizeof(bool) * data->objects.used);
 
       // This standard should always tread selected names as trimmed.
-      for (i = 0; i < data->objects.used; ++i) {
+      for (f_array_length_t i = 0; i < data->objects.used; ++i) {
 
         if (fl_string_dynamic_partial_compare_except_trim_dynamic(data->depths.array[0].value_name, data->buffer, data->objects.array[i], except_none, data->delimits_object) == F_equal_to) {
           names[i] = F_true;
@@ -665,7 +658,7 @@ extern "C" {
 #endif // _di_fss_basic_list_read_process_name_
 
 #ifndef _di_fss_basic_list_read_process_option_
-  f_status_t fss_basic_list_read_process_option(fll_program_data_t * const main, const f_console_arguments_t *arguments, fss_basic_list_read_data_t *data) {
+  f_status_t fss_basic_list_read_process_option(fll_program_data_t * const main, fss_basic_list_read_data_t * const data) {
 
     f_status_t status = F_none;
 
@@ -688,7 +681,7 @@ extern "C" {
     if (main->parameters.array[fss_basic_list_read_parameter_line_e].result == f_console_result_additional_e) {
       data->option |= fss_basic_list_read_data_option_line_d;
 
-      status = fss_basic_list_read_load_number(main, fss_basic_list_read_parameter_line_e, fss_basic_list_read_long_line_s, arguments, &data->line);
+      status = fss_basic_list_read_load_number(main, data, fss_basic_list_read_parameter_line_e, fss_basic_list_read_long_line_s, &data->line);
       if (F_status_is_error(status)) return status;
     }
 
@@ -707,7 +700,7 @@ extern "C" {
     if (main->parameters.array[fss_basic_list_read_parameter_select_e].result == f_console_result_additional_e) {
       data->option |= fss_basic_list_read_data_option_select_d;
 
-      status = fss_basic_list_read_load_number(main, fss_basic_list_read_parameter_select_e, fss_basic_list_read_long_select_s, arguments, &data->select);
+      status = fss_basic_list_read_load_number(main, data, fss_basic_list_read_parameter_select_e, fss_basic_list_read_long_select_s, &data->select);
       if (F_status_is_error(status)) return status;
     }
 
@@ -729,7 +722,7 @@ extern "C" {
 #endif // _di_fss_basic_list_read_process_option_
 
 #ifndef _di_fss_basic_list_read_process_total_
-  f_status_t fss_basic_list_read_process_total(fll_program_data_t * const main, fss_basic_list_read_data_t *data, bool names[]) {
+  f_status_t fss_basic_list_read_process_total(fll_program_data_t * const main, fss_basic_list_read_data_t * const data, bool names[]) {
 
     f_array_length_t total = 0;
     f_string_range_t range = f_string_range_t_initialize;
@@ -761,9 +754,7 @@ extern "C" {
         range.stop = data->contents.array[at].array[0].stop;
 
         // This content has no data, do not even check "include empty" because it cannot be counted as a line.
-        if (range.start > range.stop) {
-          continue;
-        }
+        if (range.start > range.stop) continue;
 
         for (i = range.start; i <= range.stop; ++i) {
 
index 5711d753454fed40d1b7d7ed39a1fc21034e30a4..3a21d7b3add5f52118bbd8edc3bd517843e0d960 100644 (file)
@@ -15,33 +15,33 @@ extern "C" {
 /**
  * Determine if the given depth is to be delimited or not for Content.
  *
- * @param depth
- *   The depth to check.
  * @param data
  *   The program data.
+ * @param depth
+ *   The depth to check.
  *
  * @return
  *   F_true if to apply delimits.
  *   F_false if to not apply delimits.
  */
 #ifndef _di_fss_basic_list_read_delimit_content_is_
-  extern f_status_t fss_basic_list_read_delimit_content_is(const f_array_length_t depth, fss_basic_list_read_data_t * const data) F_attribute_visibility_internal_d;
+  extern f_status_t fss_basic_list_read_delimit_content_is(fss_basic_list_read_data_t * const data, const f_array_length_t depth) F_attribute_visibility_internal_d;
 #endif // _di_fss_basic_list_read_delimit_content_is_
 
 /**
  * Determine if the given depth is to be delimited or not for an Object.
  *
- * @param depth
- *   The depth to check.
  * @param data
  *   The program data.
+ * @param depth
+ *   The depth to check.
  *
  * @return
  *   F_true if to apply delimits.
  *   F_false if to not apply delimits.
  */
 #ifndef _di_fss_basic_list_read_delimit_object_is_
-  extern f_status_t fss_basic_list_read_delimit_object_is(const f_array_length_t depth, fss_basic_list_read_data_t * const data) F_attribute_visibility_internal_d;
+  extern f_status_t fss_basic_list_read_delimit_object_is(fss_basic_list_read_data_t * const data, const f_array_length_t depth) F_attribute_visibility_internal_d;
 #endif // _di_fss_basic_list_read_delimit_object_is_
 
 /**
@@ -51,8 +51,6 @@ extern "C" {
  *
  * @param main
  *   The main program data.
- * @param arguments
- *   The parameters passed to the process.
  * @param data
  *   The program data.
  *
@@ -74,7 +72,7 @@ extern "C" {
  * @see fss_basic_list_read_depths_resize()
  */
 #ifndef _di_fss_basic_list_read_depth_process_
-  extern f_status_t fss_basic_list_read_depth_process(fll_program_data_t * const main, const f_console_arguments_t *arguments, fss_basic_list_read_data_t *data) F_attribute_visibility_internal_d;
+  extern f_status_t fss_basic_list_read_depth_process(fll_program_data_t * const main, fss_basic_list_read_data_t * const data) F_attribute_visibility_internal_d;
 #endif // _di_fss_basic_list_read_depth_process_
 
 /**
@@ -92,7 +90,7 @@ extern "C" {
  *   On failure to identify, an empty string is returned.
  */
 #ifndef _di_fss_basic_list_read_file_identify_
-  extern f_string_t fss_basic_list_read_file_identify(const f_array_length_t at, const fss_basic_list_read_files_t files) F_attribute_visibility_internal_d;
+  extern f_string_static_t fss_basic_list_read_file_identify(const f_array_length_t at, const fss_basic_list_read_files_t files) F_attribute_visibility_internal_d;
 #endif // _di_fss_basic_list_read_file_identify_
 
 /**
@@ -118,7 +116,7 @@ extern "C" {
  * @see fss_basic_list_read_process_option()
  */
 #ifndef _di_fss_basic_list_read_load_
-  extern f_status_t fss_basic_list_read_load(fll_program_data_t * const main, fss_basic_list_read_data_t *data) F_attribute_visibility_internal_d;
+  extern f_status_t fss_basic_list_read_load(fll_program_data_t * const main, fss_basic_list_read_data_t * const data) F_attribute_visibility_internal_d;
 #endif // _di_fss_basic_list_read_load_
 
 /**
@@ -128,12 +126,12 @@ extern "C" {
  *
  * @param main
  *   The main program data.
+ * @param data
+ *   The program data.
  * @param parameter
  *   An ID representing the parameter.
  * @param name
  *   The parameter name to print on error.
- * @param arguments
- *   The console arguments passed to the program.
  * @param number
  *   The location to store the loaded number.
  *
@@ -148,7 +146,7 @@ extern "C" {
  * @see fss_basic_list_read_depths_resize()
  */
 #ifndef _di_fss_basic_list_read_load_number_
-  extern f_status_t fss_basic_list_read_load_number(fll_program_data_t * const main, const f_array_length_t parameter, const f_string_t name, const f_console_arguments_t *arguments, f_number_unsigned_t *number) F_attribute_visibility_internal_d;
+  extern f_status_t fss_basic_list_read_load_number(fll_program_data_t * const main, fss_basic_list_read_data_t * const data, const f_array_length_t parameter, const f_string_static_t name, f_number_unsigned_t *number) F_attribute_visibility_internal_d;
 #endif // _di_fss_basic_list_read_load_number_
 
 /**
@@ -158,8 +156,6 @@ extern "C" {
  *
  * @param main
  *   The main program data.
- * @param arguments
- *   The parameters passed to the process.
  * @param data
  *   The program data.
  *
@@ -173,7 +169,7 @@ extern "C" {
  * @see fss_basic_list_read_process_option()
  */
 #ifndef _di_fss_basic_list_read_process_
-  extern f_status_t fss_basic_list_read_process(fll_program_data_t * const main, const f_console_arguments_t *arguments, fss_basic_list_read_data_t *data) F_attribute_visibility_internal_d;
+  extern f_status_t fss_basic_list_read_process(fll_program_data_t * const main, fss_basic_list_read_data_t * const data) F_attribute_visibility_internal_d;
 #endif // _di_fss_basic_list_read_process_
 
 /**
@@ -193,7 +189,7 @@ extern "C" {
  * @see fss_basic_list_read_process_at_line()
  */
 #ifndef _di_fss_basic_list_read_process_at_
-  extern f_status_t fss_basic_list_read_process_at(fll_program_data_t * const main, fss_basic_list_read_data_t *data, bool names[]) F_attribute_visibility_internal_d;
+  extern f_status_t fss_basic_list_read_process_at(fll_program_data_t * const main, fss_basic_list_read_data_t * const data, bool names[]) F_attribute_visibility_internal_d;
 #endif // _di_fss_basic_list_read_process_at_
 
 /**
@@ -201,12 +197,12 @@ extern "C" {
  *
  * @param main
  *   The main program data.
+ * @param data
+ *   The program data.
  * @param delimits_object
  *   The delimits to be applied to an Object.
  * @param delimits_content
  *   The delimits to be applied to Content.
- * @param data
- *   The program data.
  * @param line
  *   The current line being processed.
  *   This will be incremented as necessary.
@@ -216,7 +212,7 @@ extern "C" {
  *   F_success on success and the line was matched (and possibly printed).
  */
 #ifndef _di_fss_basic_list_read_process_at_line_
-  extern f_status_t fss_basic_list_read_process_at_line(fll_program_data_t * const main, const f_array_length_t at, const f_array_lengths_t delimits_object, const f_array_lengths_t delimits_content, fss_basic_list_read_data_t *data, f_array_length_t *line) F_attribute_visibility_internal_d;
+  extern f_status_t fss_basic_list_read_process_at_line(fll_program_data_t * const main, fss_basic_list_read_data_t * const data, const f_array_length_t at, const f_array_lengths_t delimits_object, const f_array_lengths_t delimits_content, f_array_length_t *line) F_attribute_visibility_internal_d;
 #endif // _di_fss_basic_list_read_process_at_line_
 
 /**
@@ -234,7 +230,7 @@ extern "C" {
  *   F_none on success.
  */
 #ifndef _di_fss_basic_list_read_process_columns_
-  extern f_status_t fss_basic_list_read_process_columns(fll_program_data_t * const main, fss_basic_list_read_data_t *data, bool names[]) F_attribute_visibility_internal_d;
+  extern f_status_t fss_basic_list_read_process_columns(fll_program_data_t * const main, fss_basic_list_read_data_t * const data, bool names[]) F_attribute_visibility_internal_d;
 #endif // _di_fss_basic_list_read_process_columns_
 
 /**
@@ -252,7 +248,7 @@ extern "C" {
  *   F_none on success.
  */
 #ifndef _di_fss_basic_list_read_process_line_
-  extern f_status_t fss_basic_list_read_process_line(fll_program_data_t * const main, fss_basic_list_read_data_t *data, bool names[]) F_attribute_visibility_internal_d;
+  extern f_status_t fss_basic_list_read_process_line(fll_program_data_t * const main, fss_basic_list_read_data_t * const data, bool names[]) F_attribute_visibility_internal_d;
 #endif // _di_fss_basic_list_read_process_line_
 
 /**
@@ -278,8 +274,6 @@ extern "C" {
  *
  * @param main
  *   The main program data.
- * @param arguments
- *   The parameters passed to the process.
  * @param data
  *   The program data.
  *
@@ -293,7 +287,7 @@ extern "C" {
  * @see fss_basic_list_read_load_setting()
  */
 #ifndef _di_fss_basic_list_read_process_option_
-  extern f_status_t fss_basic_list_read_process_option(fll_program_data_t * const main, const f_console_arguments_t *arguments, fss_basic_list_read_data_t *data) F_attribute_visibility_internal_d;
+  extern f_status_t fss_basic_list_read_process_option(fll_program_data_t * const main, fss_basic_list_read_data_t * const data) F_attribute_visibility_internal_d;
 #endif // _di_fss_basic_list_read_process_option_
 
 /**
@@ -311,7 +305,7 @@ extern "C" {
  *   F_none on success.
  */
 #ifndef _di_fss_basic_list_read_process_total_
-  extern f_status_t fss_basic_list_read_process_total(fll_program_data_t * const main, fss_basic_list_read_data_t *data, bool names[]) F_attribute_visibility_internal_d;
+  extern f_status_t fss_basic_list_read_process_total(fll_program_data_t * const main, fss_basic_list_read_data_t * const data, bool names[]) F_attribute_visibility_internal_d;
 #endif // _di_fss_basic_list_read_process_total_
 
 #ifdef __cplusplus
index b2dde6b87ea32501f167cba8ec229b35c7cb2d2a..692eee9009051a9ce70b2b62c350f72fd0b1e6a7 100644 (file)
@@ -44,10 +44,10 @@ extern "C" {
     fl_print_format(" or a Form Feed character '%[\\f%]' (%[U+000C%]).%r", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s);
     fl_print_format("  The end of the pipe represents the end of any Object or Content.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The FSS-0002 (Basic List) specification does not support quoted names, therefore the parameters '%[%s%s%]'", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_write_long_single_s, context.set.notable);
-    fl_print_format(" and '%[%r%s%]' do nothing.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_write_long_double_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  The FSS-0002 (Basic List) specification does not support quoted names, therefore the parameters '%[%r%r%]'", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_write_long_single_s, context.set.notable);
+    fl_print_format(" and '%[%r%r%]' do nothing.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_write_long_double_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  This program does not use the parameter '%[%r%s%]', which therefore does nothing.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_write_long_ignore_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  This program does not use the parameter '%[%r%r%]', which therefore does nothing.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_write_long_ignore_s, context.set.notable, f_string_eol_s);
     fl_print_format("  This parameter requires two values.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
     funlockfile(file.stream);
index ebf42c8a2ffef8d7a660ec35b22956033b4a4f9e..87aa39ad8b22162d911a92fc4a5a321f692d459a 100644 (file)
@@ -20,8 +20,8 @@ extern "C" {
  *   - small: An allocation step used for buffers that are anticipated to have small buffers.
  */
 #ifndef _di_fss_basic_list_write_common_
-  #define fss_basic_list_write_common_allocation_large_d 256
-  #define fss_basic_list_write_common_allocation_small_d 16
+  #define fss_basic_list_write_common_allocation_large_d 2048
+  #define fss_basic_list_write_common_allocation_small_d 128
 #endif // _di_fss_basic_list_write_common_
 
 /**
index bc287cd43fc69437718b94d1de62f11dce4a1e75..6c0f50ad08b8904d2c3f5480d85f5bbaaa3de78a 100644 (file)
@@ -51,6 +51,14 @@ extern "C" {
   const f_string_static_t fss_basic_read_long_trim_s = macro_f_string_static_t_initialize(FSS_BASIC_READ_long_trim_s, 0, FSS_BASIC_READ_long_trim_s_length);
 #endif // _di_fss_basic_read_parameters_
 
+#ifndef _di_fss_basic_read_delimit_mode_
+  const f_string_static_t fss_basic_read_delimit_mode_name_none_s = macro_f_string_static_t_initialize(FSS_BASIC_READ_delimit_mode_name_none_s, 0, FSS_BASIC_READ_delimit_mode_name_none_s_length);
+  const f_string_static_t fss_basic_read_delimit_mode_name_all_s = macro_f_string_static_t_initialize(FSS_BASIC_READ_delimit_mode_name_all_s, 0, FSS_BASIC_READ_delimit_mode_name_all_s_length);
+  const f_string_static_t fss_basic_read_delimit_mode_name_object_s = macro_f_string_static_t_initialize(FSS_BASIC_READ_delimit_mode_name_object_s, 0, FSS_BASIC_READ_delimit_mode_name_object_s_length);
+  const f_string_static_t fss_basic_read_delimit_mode_name_greater_s = macro_f_string_static_t_initialize(FSS_BASIC_READ_delimit_mode_name_greater_s, 0, FSS_BASIC_READ_delimit_mode_name_greater_s_length);
+  const f_string_static_t fss_basic_read_delimit_mode_name_lesser_s = macro_f_string_static_t_initialize(FSS_BASIC_READ_delimit_mode_name_lesser_s, 0, FSS_BASIC_READ_delimit_mode_name_lesser_s_length);
+#endif // _di_fss_basic_read_delimit_mode_
+
 #ifndef _di_fss_basic_read_main_delete_
   f_status_t fss_basic_read_main_delete(fll_program_data_t * const main) {
 
index be67b79941789361b64b5aadc3e81e5348e20973..1ab5079925429703f8701973ec886f7b3c5ab370 100644 (file)
@@ -243,17 +243,23 @@ extern "C" {
  *   - object:                 Objects arre to have delimits applied.
  */
 #ifndef _di_fss_basic_read_delimit_mode_
-  #define fss_basic_read_delimit_mode_name_none_s    "none"
-  #define fss_basic_read_delimit_mode_name_all_s     "all"
-  #define fss_basic_read_delimit_mode_name_object_s  "object"
-  #define fss_basic_read_delimit_mode_name_greater_s "+"
-  #define fss_basic_read_delimit_mode_name_lesser_s  "-"
-
-  #define fss_basic_read_delimit_mode_name_none_s_length    4
-  #define fss_basic_read_delimit_mode_name_all_s_length     3
-  #define fss_basic_read_delimit_mode_name_object_s_length  6
-  #define fss_basic_read_delimit_mode_name_greater_s_length 1
-  #define fss_basic_read_delimit_mode_name_lesser_s_length  1
+  #define FSS_BASIC_READ_delimit_mode_name_none_s    "none"
+  #define FSS_BASIC_READ_delimit_mode_name_all_s     "all"
+  #define FSS_BASIC_READ_delimit_mode_name_object_s  "object"
+  #define FSS_BASIC_READ_delimit_mode_name_greater_s "+"
+  #define FSS_BASIC_READ_delimit_mode_name_lesser_s  "-"
+
+  #define FSS_BASIC_READ_delimit_mode_name_none_s_length    4
+  #define FSS_BASIC_READ_delimit_mode_name_all_s_length     3
+  #define FSS_BASIC_READ_delimit_mode_name_object_s_length  6
+  #define FSS_BASIC_READ_delimit_mode_name_greater_s_length 1
+  #define FSS_BASIC_READ_delimit_mode_name_lesser_s_length  1
+
+  extern const f_string_static_t fss_basic_read_delimit_mode_name_none_s;
+  extern const f_string_static_t fss_basic_read_delimit_mode_name_all_s;
+  extern const f_string_static_t fss_basic_read_delimit_mode_name_object_s;
+  extern const f_string_static_t fss_basic_read_delimit_mode_name_greater_s;
+  extern const f_string_static_t fss_basic_read_delimit_mode_name_lesser_s;
 
   enum {
     fss_basic_read_delimit_mode_none_e = 1,
index 5febba1e339109af6a43eb44a1192591e5254c40..73a5009c3421e3f9313f0ef9b3397ac8a27470dd 100644 (file)
@@ -50,63 +50,63 @@ extern "C" {
     fl_print_format("  All numeric positions (indexes) start at 0 instead of 1.%r", file.stream, f_string_eol_s);
     fl_print_format("  For example, a file of 17 lines would range from 0 to 16.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  When using the %[%r%s%] option, an order of operations is enforced on the parameters.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_depth_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  When using the %[%r%r%] option, an order of operations is enforced on the parameters.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_depth_s, context.set.notable, f_string_eol_s);
 
     fl_print_format("  When this order of operations is in effect, parameters to the right of a depth parameter are influenced by that depth parameter:%r", file.stream, f_string_eol_s);
 
-    fl_print_format("    %[%r%s%]: An Object index at the specified depth.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_at_s, context.set.notable, f_string_eol_s);
-    fl_print_format("    %[%r%s%]: A new depth within the specified depth, indexed from the root.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_depth_s, context.set.notable, f_string_eol_s);
-    fl_print_format("    %[%r%s%]: An Object name at the specified depth.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_name_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("    %[%r%r%]: An Object index at the specified depth.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_at_s, context.set.notable, f_string_eol_s);
+    fl_print_format("    %[%r%r%]: A new depth within the specified depth, indexed from the root.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_depth_s, context.set.notable, f_string_eol_s);
+    fl_print_format("    %[%r%r%]: An Object name at the specified depth.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_name_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameter %[%r%s%] must be in numeric order, but values in between may be skipped.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_depth_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  The parameter %[%r%r%] must be in numeric order, but values in between may be skipped.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_depth_s, context.set.notable, f_string_eol_s);
     fl_print_format("    ('-d 0 -a 1 -d 2 -a 2' would specify index 1 at depth 0, any index at depth 1, and index 2 at depth 2.)%r", file.stream, f_string_eol_s);
     fl_print_format("    ('-d 2 -a 1 -d 0 -a 2' would be invalid because depth 2 is before depth 1.)%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameter %[%r%s%] selects a Content column.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_select_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  The parameter %[%r%r%] selects a Content column.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_select_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  Specify both %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_object_s, context.set.notable);
-    fl_print_format(" and the %[%r%s%] parameters to get the total objects.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_total_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  Specify both %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_object_s, context.set.notable);
+    fl_print_format(" and the %[%r%r%] parameters to get the total objects.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_total_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  When both %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_at_s, context.set.notable);
-    fl_print_format(" and %[%r%s%] parameters are specified (at the same depth),", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_name_s, context.set.notable);
-    fl_print_format(" the %[%r%s%] parameter value will be treated as a position relative to the specified", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_at_s, context.set.notable);
-    fl_print_format(" %[%r%s%] parameter value.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_name_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  When both %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_at_s, context.set.notable);
+    fl_print_format(" and %[%r%r%] parameters are specified (at the same depth),", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_name_s, context.set.notable);
+    fl_print_format(" the %[%r%r%] parameter value will be treated as a position relative to the specified", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_at_s, context.set.notable);
+    fl_print_format(" %[%r%r%] parameter value.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_name_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  This program may support parameters, such as %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_depth_s, context.set.notable);
-    fl_print_format(" or %[%r%s%], even if not supported by the standard.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_select_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  This program may support parameters, such as %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_depth_s, context.set.notable);
+    fl_print_format(" or %[%r%r%], even if not supported by the standard.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_select_s, context.set.notable, f_string_eol_s);
     fl_print_format("  This is done to help ensure consistency for scripting.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  For parameters like %[%r%s%],", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_depth_s, context.set.notable);
+    fl_print_format("  For parameters like %[%r%r%],", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_depth_s, context.set.notable);
     fl_print_format(" if the standard doesn't support nested Content, then only a depth of 0 would be valid.%r", file.stream, f_string_eol_s);
 
-    fl_print_format("  For parameters like %[%r%s%],", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_select_s, context.set.notable);
+    fl_print_format("  For parameters like %[%r%r%],", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_select_s, context.set.notable);
     fl_print_format(" if the standard doesn't support multiple Content groups, then only a select of 0 would be valid.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameter %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_trim_s, context.set.notable);
+    fl_print_format("  The parameter %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_trim_s, context.set.notable);
     fl_print_format(" will remove leading and trailing whitespaces when selecting objects or when printing objects.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  When specifying both the %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_object_s, context.set.notable);
-    fl_print_format(" parameter and the %[%r%s%] parameter, the entire Object and Content are printed, including the formatting.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_content_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  When specifying both the %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_object_s, context.set.notable);
+    fl_print_format(" parameter and the %[%r%r%] parameter, the entire Object and Content are printed, including the formatting.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_content_s, context.set.notable, f_string_eol_s);
     fl_print_format("  Both the Object and Content printed are already escaped.%r", file.stream, f_string_eol_s);
     fl_print_format("  Both the Object and Content are separated by a space.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameter %[%r%s%] accepts the following:%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_delimit_s, context.set.notable, f_string_eol_s);
-    fl_print_format("  - %[%s%]: Do not apply delimits.%r", file.stream, context.set.notable, fss_basic_read_delimit_mode_name_none_s, context.set.notable, f_string_eol_s);
-    fl_print_format("  - %[%s%]: (default) Apply all delimits.%r", file.stream, context.set.notable, fss_basic_read_delimit_mode_name_all_s, context.set.notable, f_string_eol_s);
-    fl_print_format("  - %[%s%]: Apply delimits for Objects.%r", file.stream, context.set.notable, fss_basic_read_delimit_mode_name_object_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  The parameter %[%r%r%] accepts the following:%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_delimit_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  - %[%r%]: Do not apply delimits.%r", file.stream, context.set.notable, fss_basic_read_delimit_mode_name_none_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  - %[%r%]: (default) Apply all delimits.%r", file.stream, context.set.notable, fss_basic_read_delimit_mode_name_all_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  - %[%r%]: Apply delimits for Objects.%r", file.stream, context.set.notable, fss_basic_read_delimit_mode_name_object_s, context.set.notable, f_string_eol_s);
     fl_print_format("  - A number, 0 or greater: apply delimits for Content at the specified depth.%r", file.stream, f_string_eol_s);
-    fl_print_format("  - A number, 0 or greater, followed by a %[%s%]: (such as '1+') apply delimits for Content at the specified depth and any greater depth (numerically).%r", file.stream, context.set.notable, fss_basic_read_delimit_mode_name_greater_s, context.set.notable, f_string_eol_s, f_string_eol_s);
-    fl_print_format("  - A number, 0 or lesser, followed by a %[%s%]: (such as '1-') apply delimits for Content at the specified depth and any lesser depth (numerically).%r%r", file.stream, context.set.notable, fss_basic_read_delimit_mode_name_lesser_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  - A number, 0 or greater, followed by a %[%r%]: (such as '1+') apply delimits for Content at the specified depth and any greater depth (numerically).%r", file.stream, context.set.notable, fss_basic_read_delimit_mode_name_greater_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  - A number, 0 or lesser, followed by a %[%r%]: (such as '1-') apply delimits for Content at the specified depth and any lesser depth (numerically).%r%r", file.stream, context.set.notable, fss_basic_read_delimit_mode_name_lesser_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The %[%r%s%] parameter may be specified multiple times to customize the delimit behavior.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_delimit_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  The %[%r%r%] parameter may be specified multiple times to customize the delimit behavior.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_delimit_s, context.set.notable, f_string_eol_s);
 
-    fl_print_format("  The %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_delimit_s, context.set.notable);
-    fl_print_format(" values %[%s%]", file.stream, context.set.notable, fss_basic_read_delimit_mode_name_none_s, context.set.notable);
-    fl_print_format(" and %[%s%],", file.stream, context.set.notable, fss_basic_read_delimit_mode_name_all_s, context.set.notable);
+    fl_print_format("  The %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_delimit_s, context.set.notable);
+    fl_print_format(" values %[%r%]", file.stream, context.set.notable, fss_basic_read_delimit_mode_name_none_s, context.set.notable);
+    fl_print_format(" and %[%r%],", file.stream, context.set.notable, fss_basic_read_delimit_mode_name_all_s, context.set.notable);
     fl_print_format(" overrule all other delimit values.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameters %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_columns_s, context.set.notable);
-    fl_print_format(" and %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_select_s, context.set.notable);
+    fl_print_format("  The parameters %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_columns_s, context.set.notable);
+    fl_print_format(" and %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_select_s, context.set.notable);
     fl_print_format(" refer to a Content column.%r", file.stream, f_string_eol_s);
     fl_print_format("  The word \"column\" is being loosely defined to refer to a specific Content.%r", file.stream, f_string_eol_s);
     fl_print_format("  This is not to be confused with a depth.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
@@ -586,13 +586,7 @@ extern "C" {
           }
 
           if (size_file) {
-            status = f_string_dynamic_resize(data.buffer.size + size_file, &data.buffer);
-
-            if (F_status_is_error(status)) {
-              fll_error_file_print(main->error, F_status_set_fine(status), "f_string_dynamic_resize", F_true, argv[main->parameters.remaining.array[i]], f_file_operation_read_s, fll_error_file_type_file_e);
-
-              break;
-            }
+            file.size_read = size_file + 1;
 
             status = f_file_stream_read(file, &data.buffer);
 
index 8cc0c3705cfdcb66dc9ae00af963566dd4229ac4..99955fead8a80fd9a2f5b9c043c87562909fed2e 100644 (file)
@@ -20,8 +20,8 @@ extern "C" {
  *   - small: An allocation step used for buffers that are anticipated to have small buffers.
  */
 #ifndef _di_fss_basic_read_common_
-  #define fss_basic_read_common_allocation_large_d 256
-  #define fss_basic_read_delimit_common_allocation_small_d 16
+  #define fss_basic_read_common_allocation_large_d 2048
+  #define fss_basic_read_common_allocation_small_d 128
 #endif // _di_fss_basic_read_common_
 
 /**
@@ -86,18 +86,18 @@ extern "C" {
 /**
  * A structure for designating where within the buffer a particular file exists, using a statically allocated array.
  *
- * name:  The name of the file representing the range. Set string to NULL to represent the STDIN pipe.
+ * name:  The name of the file representing the range.
  * range: A range within the buffer representing the file.
  */
 #ifndef _di_fss_basic_read_file_t_
   typedef struct {
-    f_string_t name;
+    f_string_static_t name;
     f_string_range_t range;
   } fss_basic_read_file_t;
 
   #define fss_basic_read_file_t_initialize \
     { \
-      f_string_t_initialize, \
+      f_string_static_t_initialize, \
       f_string_range_t_initialize, \
     }
 #endif // _di_fss_basic_read_file_t_
index 7b406c956990d32524608968312f89bcfcd27fb0..c0ab8d8eb2c950b42af733ea629e8311389e8b07 100644 (file)
@@ -20,13 +20,13 @@ extern "C" {
         if (data->option & fss_basic_read_data_option_trim_d) {
           if (data->option & fss_basic_read_data_option_raw_d) {
             if (data->quotes.array[at]) {
-              f_print_character_safely(data->quotes.array[at] == f_fss_quote_type_single_e ? f_fss_quote_single_s.string[0] : f_fss_quote_double_s.string[0], main->output.to.stream);
+              f_print_dynamic_raw(data->quotes.array[at] == f_fss_quote_type_single_e ? f_fss_quote_single_s : f_fss_quote_double_s, main->output.to.stream);
             }
 
             fl_print_trim_dynamic_partial(data->buffer, data->objects.array[at], main->output.to.stream);
 
             if (data->quotes.array[at]) {
-              f_print_character_safely(data->quotes.array[at] == f_fss_quote_type_single_e ? f_fss_quote_single_s.string[0] : f_fss_quote_double_s.string[0], main->output.to.stream);
+              f_print_dynamic_raw(data->quotes.array[at] == f_fss_quote_type_single_e ? f_fss_quote_single_s : f_fss_quote_double_s, main->output.to.stream);
             }
           }
           else {
@@ -36,13 +36,13 @@ extern "C" {
         else {
           if (data->option & fss_basic_read_data_option_raw_d) {
             if (data->quotes.array[at]) {
-              f_print_character_safely(data->quotes.array[at] == f_fss_quote_type_single_e ? f_fss_quote_single_s.string[0] : f_fss_quote_double_s.string[0], main->output.to.stream);
+              f_print_dynamic_raw(data->quotes.array[at] == f_fss_quote_type_single_e ? f_fss_quote_single_s : f_fss_quote_double_s, main->output.to.stream);
             }
 
             f_print_dynamic_partial(data->buffer, data->objects.array[at], main->output.to.stream);
 
             if (data->quotes.array[at]) {
-              f_print_character_safely(data->quotes.array[at] == f_fss_quote_type_single_e ? f_fss_quote_single_s.string[0] : f_fss_quote_double_s.string[0], main->output.to.stream);
+              f_print_dynamic_raw(data->quotes.array[at] == f_fss_quote_type_single_e ? f_fss_quote_single_s : f_fss_quote_double_s, main->output.to.stream);
             }
           }
           else {
@@ -75,10 +75,10 @@ extern "C" {
   void fss_basic_read_print_object_end(fll_program_data_t * const main) {
 
     if (main->parameters.array[fss_basic_read_parameter_pipe_e].result == f_console_result_found_e) {
-      f_print_character(fss_basic_read_pipe_content_start_s, main->output.to.stream);
+      f_print_dynamic_raw(fss_basic_read_pipe_content_start_s, main->output.to.stream);
     }
     else {
-      f_print_character(f_fss_space_s.string[0], main->output.to.stream);
+      f_print_dynamic_raw(f_fss_space_s, main->output.to.stream);
     }
   }
 #endif // _di_fss_basic_read_print_object_end_
@@ -86,7 +86,7 @@ extern "C" {
 #ifndef _di_fss_basic_read_print_one_
   void fss_basic_read_print_one(fll_program_data_t * const main) {
 
-    f_print_character(f_string_ascii_1_s.string[0], main->output.to.stream);
+    f_print_dynamic_raw(f_string_ascii_1_s, main->output.to.stream);
     f_print_dynamic_raw(f_string_eol_s, main->output.to.stream);
   }
 #endif // _di_fss_basic_read_print_one_
@@ -95,7 +95,7 @@ extern "C" {
   void fss_basic_read_print_set_end(fll_program_data_t * const main) {
 
     if (main->parameters.array[fss_basic_read_parameter_pipe_e].result == f_console_result_found_e) {
-      f_print_character(fss_basic_read_pipe_content_end_s, main->output.to.stream);
+      f_print_dynamic_raw(fss_basic_read_pipe_content_end_s, main->output.to.stream);
     }
     else {
       f_print_dynamic_raw(f_string_eol_s, main->output.to.stream);
@@ -106,7 +106,7 @@ extern "C" {
 #ifndef _di_fss_basic_read_print_zero_
   void fss_basic_read_print_zero(fll_program_data_t * const main) {
 
-    f_print_character(f_string_ascii_0_s.string[0], main->output.to.stream);
+    f_print_dynamic_raw(f_string_ascii_0_s, main->output.to.stream);
     f_print_dynamic_raw(f_string_eol_s, main->output.to.stream);
   }
 #endif // _di_fss_basic_read_print_zero_
index 7643acc2f6648be9f63e199eb98a19fd3aea666d..a0681d9e1b870139bc7bafe3b8cf8e74112dc80e 100644 (file)
@@ -194,7 +194,7 @@ extern "C" {
 #endif // _di_fss_basic_read_depth_process_
 
 #ifndef _di_fss_basic_read_file_identify_
-  f_string_t fss_basic_read_file_identify(const f_array_length_t at, const fss_basic_read_files_t files) {
+  f_string_static_t fss_basic_read_file_identify(const f_array_length_t at, const fss_basic_read_files_t files) {
 
     for (f_array_length_t i = 0; i < files.used; ++i) {
 
@@ -208,14 +208,14 @@ extern "C" {
       return files.array[files.used - 1].name;
     }
 
-    return "";
+    return f_string_empty_s;
   }
 #endif // _di_fss_basic_read_file_identify_
 
 #ifndef _di_fss_basic_read_load_
   f_status_t fss_basic_read_load(fll_program_data_t * const main, fss_basic_read_data_t *data) {
 
-    f_state_t state = macro_f_state_t_initialize(fss_basic_read_common_allocation_large_d, fss_basic_read_delimit_common_allocation_small_d, 0, 0, 0, 0, 0);
+    f_state_t state = macro_f_state_t_initialize(fss_basic_read_common_allocation_large_d, fss_basic_read_common_allocation_small_d, 0, 0, 0, 0, 0);
     f_string_range_t input = macro_f_string_range_t_initialize(data->buffer.used);
 
     data->delimits.used = 0;
index 5f2ae691a11f90012a5570161eedb1136fade744..c867b3eb95884f63509af840ca46e0877b85d928 100644 (file)
@@ -44,10 +44,10 @@ extern "C" {
     fl_print_format(" or a Form Feed character '%[\\f%]' (%[U+000C%]).%r", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s);
     fl_print_format("  The end of the pipe represents the end of any Object or Content.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The FSS-0000 (Basic) specification does not support multi-line Content, therefore the parameter '%[%r%s%]'", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_write_long_prepend_s, context.set.notable);
+    fl_print_format("  The FSS-0000 (Basic) specification does not support multi-line Content, therefore the parameter '%[%r%r%]'", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_write_long_prepend_s, context.set.notable);
     fl_print_format(" does nothing.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  This program does not use the parameter '%[%r%s%]', which therefore does nothing.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_write_long_ignore_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  This program does not use the parameter '%[%r%r%]', which therefore does nothing.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_write_long_ignore_s, context.set.notable, f_string_eol_s);
     fl_print_format("  This parameter requires two values.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
     funlockfile(file.stream);
index 2eb6cd717c6e76e5e7476e768b52c2600f34eee3..3eeac9c1df3385dc17de2e97a1d5609cd18b7d1e 100644 (file)
@@ -20,8 +20,8 @@ extern "C" {
  *   - small: An allocation step used for buffers that are anticipated to have small buffers.
  */
 #ifndef _di_fss_basic_write_common_
-  #define fss_basic_write_common_allocation_large_d 256
-  #define fss_basic_write_common_allocation_small_d 16
+  #define fss_basic_write_common_allocation_large_d 2048
+  #define fss_basic_write_common_allocation_small_d 128
 #endif // _di_fss_basic_write_common_
 
 /**
index 0d2ff7bf3bee469f277176eca2472f18174bfe7c..c0c599ffc9c330000be855b6025ba560e3bb41f9 100644 (file)
@@ -45,6 +45,14 @@ extern "C" {
   const f_string_static_t fss_embedded_list_read_long_trim_s = macro_f_string_static_t_initialize(FSS_EMBEDDED_LIST_READ_long_trim_s, 0, FSS_EMBEDDED_LIST_READ_long_trim_s_length);
 #endif // _di_fss_embedded_list_read_parameters_
 
+#ifndef _di_fss_embedded_list_read_delimit_mode_
+  const f_string_static_t fss_embedded_list_read_delimit_mode_name_none_s = macro_f_string_static_t_initialize(FSS_EMBEDDED_LIST_READ_delimit_mode_name_none_s, 0, FSS_EMBEDDED_LIST_READ_delimit_mode_name_none_s_length);
+  const f_string_static_t fss_embedded_list_read_delimit_mode_name_all_s = macro_f_string_static_t_initialize(FSS_EMBEDDED_LIST_READ_delimit_mode_name_all_s, 0, FSS_EMBEDDED_LIST_READ_delimit_mode_name_all_s_length);
+  const f_string_static_t fss_embedded_list_read_delimit_mode_name_object_s = macro_f_string_static_t_initialize(FSS_EMBEDDED_LIST_READ_delimit_mode_name_object_s, 0, FSS_EMBEDDED_LIST_READ_delimit_mode_name_object_s_length);
+  const f_string_static_t fss_embedded_list_read_delimit_mode_name_greater_s = macro_f_string_static_t_initialize(FSS_EMBEDDED_LIST_READ_delimit_mode_name_greater_s, 0, FSS_EMBEDDED_LIST_READ_delimit_mode_name_greater_s_length);
+  const f_string_static_t fss_embedded_list_read_delimit_mode_name_lesser_s = macro_f_string_static_t_initialize(FSS_EMBEDDED_LIST_READ_delimit_mode_name_lesser_s, 0, FSS_EMBEDDED_LIST_READ_delimit_mode_name_lesser_s_length);
+#endif // _di_fss_embedded_list_read_delimit_mode_
+
 #ifndef _di_fss_embedded_list_read_main_delete_
   f_status_t fss_embedded_list_read_main_delete(fss_embedded_list_read_main_t * const main) {
 
index c6ceb651d5d445d06fb8fe6c9e0c6bbdc5deebab..e50447948a3f8fb52bf9ef9dcefe598f3db98b00 100644 (file)
@@ -233,15 +233,20 @@ extern "C" {
  * Provide delimit management.
  */
 #ifndef _di_fss_embedded_list_read_delimit_mode_
-  #define fss_embedded_list_read_delimit_mode_name_none_s    "none"
-  #define fss_embedded_list_read_delimit_mode_name_all_s     "all"
-  #define fss_embedded_list_read_delimit_mode_name_greater_s "+"
-  #define fss_embedded_list_read_delimit_mode_name_lesser_s  "-"
-
-  #define fss_embedded_list_read_delimit_mode_name_none_s_length    4
-  #define fss_embedded_list_read_delimit_mode_name_all_s_length     3
-  #define fss_embedded_list_read_delimit_mode_name_greater_s_length 1
-  #define fss_embedded_list_read_delimit_mode_name_lesser_s_length  1
+  #define FSS_EMBEDDED_LIST_READ_delimit_mode_name_none_s    "none"
+  #define FSS_EMBEDDED_LIST_READ_delimit_mode_name_all_s     "all"
+  #define FSS_EMBEDDED_LIST_READ_delimit_mode_name_greater_s "+"
+  #define FSS_EMBEDDED_LIST_READ_delimit_mode_name_lesser_s  "-"
+
+  #define FSS_EMBEDDED_LIST_READ_delimit_mode_name_none_s_length    4
+  #define FSS_EMBEDDED_LIST_READ_delimit_mode_name_all_s_length     3
+  #define FSS_EMBEDDED_LIST_READ_delimit_mode_name_greater_s_length 1
+  #define FSS_EMBEDDED_LIST_READ_delimit_mode_name_lesser_s_length  1
+
+  extern const f_string_static_t fss_embedded_list_read_delimit_mode_name_none_s;
+  extern const f_string_static_t fss_embedded_list_read_delimit_mode_name_all_s;
+  extern const f_string_static_t fss_embedded_list_read_delimit_mode_name_greater_s;
+  extern const f_string_static_t fss_embedded_list_read_delimit_mode_name_lesser_s;
 
   enum {
     fss_embedded_list_read_delimit_mode_none_e = 1,
index dce59097eca20b54dd9efd9a978e925d22d31ac4..d37aa4747f5f6af19cb8a52da46f64cff1294a44 100644 (file)
@@ -50,64 +50,64 @@ extern "C" {
     fl_print_format("  All numeric positions (indexes) start at 0 instead of 1.%r", file.stream, f_string_eol_s);
     fl_print_format("  For example, a file of 17 lines would range from 0 to 16.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  When using the %[%r%s%] option, an order of operations is enforced on the parameters.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_depth_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  When using the %[%r%r%] option, an order of operations is enforced on the parameters.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_depth_s, context.set.notable, f_string_eol_s);
 
     fl_print_format("  When this order of operations is in effect, parameters to the right of a depth parameter are influenced by that depth parameter:%r", file.stream, f_string_eol_s);
 
-    fl_print_format("    %[%r%s%]: An Object index at the specified depth.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_at_s, context.set.notable, f_string_eol_s);
-    fl_print_format("    %[%r%s%]: A new depth within the specified depth, indexed from the root.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_depth_s, context.set.notable, f_string_eol_s);
-    fl_print_format("    %[%r%s%]: An Object name at the specified depth.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_name_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("    %[%r%r%]: An Object index at the specified depth.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_at_s, context.set.notable, f_string_eol_s);
+    fl_print_format("    %[%r%r%]: A new depth within the specified depth, indexed from the root.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_depth_s, context.set.notable, f_string_eol_s);
+    fl_print_format("    %[%r%r%]: An Object name at the specified depth.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_name_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameter %[%r%s%] must be in numeric order, but values in between may be skipped.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_depth_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  The parameter %[%r%r%] must be in numeric order, but values in between may be skipped.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_depth_s, context.set.notable, f_string_eol_s);
     fl_print_format("    ('-d 0 -a 1 -d 2 -a 2' would specify index 1 at depth 0, any index at depth 1, and index 2 at depth 2.)%r", file.stream, f_string_eol_s);
     fl_print_format("    ('-d 2 -a 1 -d 0 -a 2' would be invalid because depth 2 is before depth 1.)%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameter %[%r%s%] selects a Content column.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_select_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  The parameter %[%r%r%] selects a Content column.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_select_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  Specify both %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_object_s, context.set.notable);
-    fl_print_format(" and the %[%r%s%] parameters to get the total objects.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_total_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  Specify both %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_object_s, context.set.notable);
+    fl_print_format(" and the %[%r%r%] parameters to get the total objects.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_total_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  When both %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_at_s, context.set.notable);
-    fl_print_format(" and %[%r%s%] parameters are specified (at the same depth),", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_name_s, context.set.notable);
-    fl_print_format(" the %[%r%s%] parameter value will be treated as a position relative to the specified", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_at_s, context.set.notable);
-    fl_print_format(" %[%r%s%] parameter value.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_name_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  When both %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_at_s, context.set.notable);
+    fl_print_format(" and %[%r%r%] parameters are specified (at the same depth),", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_name_s, context.set.notable);
+    fl_print_format(" the %[%r%r%] parameter value will be treated as a position relative to the specified", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_at_s, context.set.notable);
+    fl_print_format(" %[%r%r%] parameter value.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_name_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  This program may support parameters, such as %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_depth_s, context.set.notable);
-    fl_print_format(" or %[%r%s%], even if not supported by the standard.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_select_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  This program may support parameters, such as %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_depth_s, context.set.notable);
+    fl_print_format(" or %[%r%r%], even if not supported by the standard.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_select_s, context.set.notable, f_string_eol_s);
     fl_print_format("  This is done to help ensure consistency for scripting.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  For parameters like %[%r%s%],", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_depth_s, context.set.notable);
+    fl_print_format("  For parameters like %[%r%r%],", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_depth_s, context.set.notable);
     fl_print_format(" if the standard doesn't support nested Content, then only a depth of 0 would be valid.%r", file.stream, f_string_eol_s);
 
-    fl_print_format("  For parameters like %[%r%s%],", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_select_s, context.set.notable);
+    fl_print_format("  For parameters like %[%r%r%],", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_select_s, context.set.notable);
     fl_print_format(" if the standard doesn't support multiple Content groups, then only a select of 0 would be valid.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameter %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_trim_s, context.set.notable);
+    fl_print_format("  The parameter %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_trim_s, context.set.notable);
     fl_print_format(" will remove leading and trailing whitespaces when selecting objects or when printing objects.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  When specifying both the %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_object_s, context.set.notable);
-    fl_print_format(" parameter and the %[%r%s%] parameter, the entire Object and Content are printed, including the formatting.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_content_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  When specifying both the %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_object_s, context.set.notable);
+    fl_print_format(" parameter and the %[%r%r%] parameter, the entire Object and Content are printed, including the formatting.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_content_s, context.set.notable, f_string_eol_s);
     fl_print_format("  Both the Object and Content printed are already escaped.%r", file.stream, f_string_eol_s);
     fl_print_format("  Both the Object and Content are separated by an EOL.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameter %[%r%s%] accepts the following:%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_delimit_s, context.set.notable, f_string_eol_s);
-    fl_print_format("  - %[%s%]: Do not apply delimits.%r", file.stream, context.set.notable, fss_embedded_list_read_delimit_mode_name_none_s, context.set.notable, f_string_eol_s);
-    fl_print_format("  - %[%s%]: (default) Apply all delimits.%r", file.stream, context.set.notable, fss_embedded_list_read_delimit_mode_name_all_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  The parameter %[%r%r%] accepts the following:%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_delimit_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  - %[%r%]: Do not apply delimits.%r", file.stream, context.set.notable, fss_embedded_list_read_delimit_mode_name_none_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  - %[%r%]: (default) Apply all delimits.%r", file.stream, context.set.notable, fss_embedded_list_read_delimit_mode_name_all_s, context.set.notable, f_string_eol_s);
     // @todo
-    //fl_print_format("  - %[%s%]: Apply delimits for Objects.%r", file.stream, context.set.notable, fss_embedded_list_read_delimit_mode_name_object, context.set.notable, f_string_eol_s);
+    //fl_print_format("  - %[%r%]: Apply delimits for Objects.%r", file.stream, context.set.notable, fss_embedded_list_read_delimit_mode_name_object, context.set.notable, f_string_eol_s);
     fl_print_format("  - A number, 0 or greater: apply delimits for Content at the specified depth.%r", file.stream, f_string_eol_s);
-    fl_print_format("  - A number, 0 or greater, followed by a %[%s%]: (such as '1+') apply delimits for Content at the specified depth and any greater depth (numerically).%r", file.stream, context.set.notable, fss_embedded_list_read_delimit_mode_name_greater_s, context.set.notable, f_string_eol_s, f_string_eol_s);
-    fl_print_format("  - A number, 0 or lesser, followed by a %[%s%]: (such as '1-') apply delimits for Content at the specified depth and any lesser depth (numerically).%r%r", file.stream, context.set.notable, fss_embedded_list_read_delimit_mode_name_lesser_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  - A number, 0 or greater, followed by a %[%r%]: (such as '1+') apply delimits for Content at the specified depth and any greater depth (numerically).%r", file.stream, context.set.notable, fss_embedded_list_read_delimit_mode_name_greater_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  - A number, 0 or lesser, followed by a %[%r%]: (such as '1-') apply delimits for Content at the specified depth and any lesser depth (numerically).%r%r", file.stream, context.set.notable, fss_embedded_list_read_delimit_mode_name_lesser_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The %[%r%s%] parameter may be specified multiple times to customize the delimit behavior.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_delimit_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  The %[%r%r%] parameter may be specified multiple times to customize the delimit behavior.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_delimit_s, context.set.notable, f_string_eol_s);
 
-    fl_print_format("  The %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_delimit_s, context.set.notable);
-    fl_print_format(" values %[%s%]", file.stream, context.set.notable, fss_embedded_list_read_delimit_mode_name_none_s, context.set.notable);
-    fl_print_format(" and %[%s%],", file.stream, context.set.notable, fss_embedded_list_read_delimit_mode_name_all_s, context.set.notable);
+    fl_print_format("  The %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_delimit_s, context.set.notable);
+    fl_print_format(" values %[%r%]", file.stream, context.set.notable, fss_embedded_list_read_delimit_mode_name_none_s, context.set.notable);
+    fl_print_format(" and %[%r%],", file.stream, context.set.notable, fss_embedded_list_read_delimit_mode_name_all_s, context.set.notable);
     fl_print_format(" overrule all other delimit values.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameters %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_columns_s, context.set.notable);
-    fl_print_format(" and %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_select_s, context.set.notable);
+    fl_print_format("  The parameters %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_columns_s, context.set.notable);
+    fl_print_format(" and %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_select_s, context.set.notable);
     fl_print_format(" refer to a Content column.%r", file.stream, f_string_eol_s);
     fl_print_format("  The word \"column\" is being loosely defined to refer to a specific Content.%r", file.stream, f_string_eol_s);
     fl_print_format("  This is not to be confused with a depth.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
index 819a97a4f08fb4d16c37620f2334deaa09206158..32a705ab4285993873884eb67666322eb6324f00 100644 (file)
@@ -20,8 +20,8 @@ extern "C" {
  *   - small: An allocation step used for buffers that are anticipated to have small buffers.
  */
 #ifndef _di_fss_embedded_list_read_common_
-  #define fss_embedded_list_read_common_allocation_large_d 256
-  #define fss_embedded_list_read_common_allocation_small_d 16
+  #define fss_embedded_list_read_common_allocation_large_d 2048
+  #define fss_embedded_list_read_common_allocation_small_d 128
 #endif // _di_fss_embedded_list_read_common_
 
 /**
index 2dec27267bbbd9008651663c935ca756009a1d5e..cfe3dd325cedc9496b33e878b5e0146881e25b56 100644 (file)
@@ -10,15 +10,15 @@ extern "C" {
   void fss_embedded_list_read_print_object_end(fss_embedded_list_read_main_t * const main) {
 
     if (main->parameters.array[fss_embedded_list_read_parameter_pipe_e].result == f_console_result_found_e) {
-      f_print_character(fss_embedded_list_read_pipe_content_start_s, main->output.to.stream);
+      f_print_dynamic_raw(fss_embedded_list_read_pipe_content_start_s, main->output.to.stream);
     }
     else {
       if (main->parameters.array[fss_embedded_list_read_parameter_object_e].result == f_console_result_found_e && main->parameters.array[fss_embedded_list_read_parameter_content_e].result == f_console_result_found_e) {
-        f_print_character(f_fss_embedded_list_open_s.string[0], main->output.to.stream);
-        f_print_character(f_fss_embedded_list_open_end_s.string[0], main->output.to.stream);
+        f_print_dynamic_raw(f_fss_embedded_list_open_s, main->output.to.stream);
+        f_print_dynamic_raw(f_fss_embedded_list_open_end_s, main->output.to.stream);
       }
       else {
-        f_print_character(f_fss_eol_s.string[0], main->output.to.stream);
+        f_print_dynamic_raw(f_fss_eol_s, main->output.to.stream);
       }
     }
   }
@@ -28,7 +28,7 @@ extern "C" {
   void fss_embedded_list_read_print_content_ignore(fss_embedded_list_read_main_t * const main) {
 
     if (main->parameters.array[fss_embedded_list_read_parameter_pipe_e].result == f_console_result_found_e) {
-      f_print_character(fss_embedded_list_read_pipe_content_ignore_s, main->output.to.stream);
+      f_print_dynamic_raw(fss_embedded_list_read_pipe_content_ignore_s, main->output.to.stream);
     }
   }
 #endif // _di_fss_embedded_list_read_print_content_ignore_
@@ -37,15 +37,15 @@ extern "C" {
   void fss_embedded_list_read_print_set_end(fss_embedded_list_read_main_t * const main) {
 
     if (main->parameters.array[fss_embedded_list_read_parameter_pipe_e].result == f_console_result_found_e) {
-      f_print_character(fss_embedded_list_read_pipe_content_end_s, main->output.to.stream);
+      f_print_dynamic_raw(fss_embedded_list_read_pipe_content_end_s, main->output.to.stream);
     }
     else {
       if (main->parameters.array[fss_embedded_list_read_parameter_object_e].result == f_console_result_found_e && main->parameters.array[fss_embedded_list_read_parameter_content_e].result == f_console_result_found_e) {
-        f_print_character(f_fss_embedded_list_close_s.string[0], main->output.to.stream);
-        f_print_character(f_fss_embedded_list_close_end_s.string[0], main->output.to.stream);
+        f_print_dynamic_raw(f_fss_embedded_list_close_s, main->output.to.stream);
+        f_print_dynamic_raw(f_fss_embedded_list_close_end_s, main->output.to.stream);
       }
       else {
-        f_print_character(f_fss_eol_s.string[0], main->output.to.stream);
+        f_print_dynamic_raw(f_fss_eol_s, main->output.to.stream);
       }
     }
   }
index 0e50f93ae9be57b8fb2d8c401c5fd82f84524dec..d7fdc8a635b9d3c7557eed0292ab65c5b9191fb7 100644 (file)
@@ -44,14 +44,14 @@ extern "C" {
     fl_print_format(" or a Form Feed character '%[\\f%]' (%[U+000C%]).%r", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s);
     fl_print_format("  The end of the pipe represents the end of any Object or Content.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The FSS-0008 (Embedded List) specification does not support quoted names, therefore the parameters '%[%r%s%]'", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_write_long_single_s, context.set.notable);
-    fl_print_format(" and '%[%r%s%]' do nothing.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_write_long_double_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  The FSS-0008 (Embedded List) specification does not support quoted names, therefore the parameters '%[%r%r%]'", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_write_long_single_s, context.set.notable);
+    fl_print_format(" and '%[%r%r%]' do nothing.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_write_long_double_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameter '%[%r%s%]' designates to not escape any valid nested Object or Content within some Content.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_write_long_ignore_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  The parameter '%[%r%r%]' designates to not escape any valid nested Object or Content within some Content.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_write_long_ignore_s, context.set.notable, f_string_eol_s);
     fl_print_format("  This parameter requires two values.%r", file.stream, f_string_eol_s);
     fl_print_format("  This parameter is not used for ignoring anything from the input pipe.%r", file.stream, f_string_eol_s);
-    fl_print_format("  This parameter must be specified after a '%[%r%s%]'", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_write_long_content_s, context.set.notable);
-    fl_print_format(" parameter and this applies only to the Content represented by that specific '%[%r%s%]' parameter.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_write_long_content_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  This parameter must be specified after a '%[%r%r%]'", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_write_long_content_s, context.set.notable);
+    fl_print_format(" parameter and this applies only to the Content represented by that specific '%[%r%r%]' parameter.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_write_long_content_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
     funlockfile(file.stream);
 
index 4ff4b1cdd43461c1048926d432f65dab2dac883f..60f996fea8f098dc38da3606e9c284732cee7c0e 100644 (file)
@@ -21,8 +21,8 @@ extern "C" {
  *   - small: An allocation step used for buffers that are anticipated to have small buffers.
  */
 #ifndef _di_fss_embedded_list_write_common_
-  #define fss_embedded_list_write_common_allocation_large_d 256
-  #define fss_embedded_list_write_common_allocation_small_d 16
+  #define fss_embedded_list_write_common_allocation_large_d 2048
+  #define fss_embedded_list_write_common_allocation_small_d 128
 #endif // _di_fss_embedded_list_write_common_
 
 /**
index 9bbe35ed411cd00a14b5e90f3cb1b074179885af..6c95bd6ab0851a4ef7ee2cc3b0bf14eceafad9f8 100644 (file)
@@ -51,6 +51,14 @@ extern "C" {
   const f_string_static_t fss_extended_list_read_long_trim_s = macro_f_string_static_t_initialize(FSS_EXTENDED_LIST_READ_long_trim_s, 0, FSS_EXTENDED_LIST_READ_long_trim_s_length);
 #endif // _di_fss_extended_list_read_parameters_
 
+#ifndef _di_fss_extended_list_read_delimit_mode_
+  const f_string_static_t fss_extended_list_read_delimit_mode_name_none_s = macro_f_string_static_t_initialize(FSS_EXTENDED_LIST_READ_delimit_mode_name_none_s, 0, FSS_EXTENDED_LIST_READ_delimit_mode_name_none_s_length);
+  const f_string_static_t fss_extended_list_read_delimit_mode_name_all_s = macro_f_string_static_t_initialize(FSS_EXTENDED_LIST_READ_delimit_mode_name_all_s, 0, FSS_EXTENDED_LIST_READ_delimit_mode_name_all_s_length);
+  const f_string_static_t fss_extended_list_read_delimit_mode_name_object_s = macro_f_string_static_t_initialize(FSS_EXTENDED_LIST_READ_delimit_mode_name_object_s, 0, FSS_EXTENDED_LIST_READ_delimit_mode_name_object_s_length);
+  const f_string_static_t fss_extended_list_read_delimit_mode_name_greater_s = macro_f_string_static_t_initialize(FSS_EXTENDED_LIST_READ_delimit_mode_name_greater_s, 0, FSS_EXTENDED_LIST_READ_delimit_mode_name_greater_s_length);
+  const f_string_static_t fss_extended_list_read_delimit_mode_name_lesser_s = macro_f_string_static_t_initialize(FSS_EXTENDED_LIST_READ_delimit_mode_name_lesser_s, 0, FSS_EXTENDED_LIST_READ_delimit_mode_name_lesser_s_length);
+#endif // _di_fss_extended_list_read_delimit_mode_
+
 #ifndef _di_fss_extended_list_read_main_delete_
   f_status_t fss_extended_list_read_main_delete(fll_program_data_t *main) {
 
index 0369ea78ab13517ce25f18a2dd420bb182a9710d..3e23909419b15c8052e7f8c5b946e836a9d38397 100644 (file)
@@ -243,17 +243,23 @@ extern "C" {
  *   - object:                 Objects arre to have delimits applied.
  */
 #ifndef _di_fss_extended_list_read_delimit_mode_
-  #define fss_extended_list_read_delimit_mode_name_none_s    "none"
-  #define fss_extended_list_read_delimit_mode_name_all_s     "all"
-  #define fss_extended_list_read_delimit_mode_name_object_s  "object"
-  #define fss_extended_list_read_delimit_mode_name_greater_s "+"
-  #define fss_extended_list_read_delimit_mode_name_lesser_s  "-"
-
-  #define fss_extended_list_read_delimit_mode_name_none_s_length    4
-  #define fss_extended_list_read_delimit_mode_name_all_s_length     3
-  #define fss_extended_list_read_delimit_mode_name_object_s_length  6
-  #define fss_extended_list_read_delimit_mode_name_greater_s_length 1
-  #define fss_extended_list_read_delimit_mode_name_lesser_s_length  1
+  #define FSS_EXTENDED_LIST_READ_delimit_mode_name_none_s    "none"
+  #define FSS_EXTENDED_LIST_READ_delimit_mode_name_all_s     "all"
+  #define FSS_EXTENDED_LIST_READ_delimit_mode_name_object_s  "object"
+  #define FSS_EXTENDED_LIST_READ_delimit_mode_name_greater_s "+"
+  #define FSS_EXTENDED_LIST_READ_delimit_mode_name_lesser_s  "-"
+
+  #define FSS_EXTENDED_LIST_READ_delimit_mode_name_none_s_length    4
+  #define FSS_EXTENDED_LIST_READ_delimit_mode_name_all_s_length     3
+  #define FSS_EXTENDED_LIST_READ_delimit_mode_name_object_s_length  6
+  #define FSS_EXTENDED_LIST_READ_delimit_mode_name_greater_s_length 1
+  #define FSS_EXTENDED_LIST_READ_delimit_mode_name_lesser_s_length  1
+
+  extern const f_string_static_t fss_extended_list_read_delimit_mode_name_none_s;
+  extern const f_string_static_t fss_extended_list_read_delimit_mode_name_all_s;
+  extern const f_string_static_t fss_extended_list_read_delimit_mode_name_object_s;
+  extern const f_string_static_t fss_extended_list_read_delimit_mode_name_greater_s;
+  extern const f_string_static_t fss_extended_list_read_delimit_mode_name_lesser_s;
 
   enum {
     fss_extended_list_read_delimit_mode_none_e = 1,
index 9dcb7482147504b550cbd047bdd28f0a10d11805..070e494d46a6a73eddc6725bbecf18d7ad3cfa60 100644 (file)
@@ -50,63 +50,63 @@ extern "C" {
     fl_print_format("  All numeric positions (indexes) start at 0 instead of 1.%r", file.stream, f_string_eol_s);
     fl_print_format("  For example, a file of 17 lines would range from 0 to 16.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  When using the %[%r%s%] option, an order of operations is enforced on the parameters.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_depth_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  When using the %[%r%r%] option, an order of operations is enforced on the parameters.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_depth_s, context.set.notable, f_string_eol_s);
 
     fl_print_format("  When this order of operations is in effect, parameters to the right of a depth parameter are influenced by that depth parameter:%r", file.stream, f_string_eol_s);
 
-    fl_print_format("    %[%r%s%]: An Object index at the specified depth.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_at_s, context.set.notable, f_string_eol_s);
-    fl_print_format("    %[%r%s%]: A new depth within the specified depth, indexed from the root.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_depth_s, context.set.notable, f_string_eol_s);
-    fl_print_format("    %[%r%s%]: An Object name at the specified depth.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_name_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("    %[%r%r%]: An Object index at the specified depth.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_at_s, context.set.notable, f_string_eol_s);
+    fl_print_format("    %[%r%r%]: A new depth within the specified depth, indexed from the root.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_depth_s, context.set.notable, f_string_eol_s);
+    fl_print_format("    %[%r%r%]: An Object name at the specified depth.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_name_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameter %[%r%s%] must be in numeric order, but values in between may be skipped.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_depth_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  The parameter %[%r%r%] must be in numeric order, but values in between may be skipped.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_depth_s, context.set.notable, f_string_eol_s);
     fl_print_format("    ('-d 0 -a 1 -d 2 -a 2' would specify index 1 at depth 0, any index at depth 1, and index 2 at depth 2.)%r", file.stream, f_string_eol_s);
     fl_print_format("    ('-d 2 -a 1 -d 0 -a 2' would be invalid because depth 2 is before depth 1.)%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameter %[%r%s%] selects a Content column.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_select_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  The parameter %[%r%r%] selects a Content column.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_select_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  Specify both %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_object_s, context.set.notable);
-    fl_print_format(" and the %[%r%s%] parameters to get the total objects.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_total_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  Specify both %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_object_s, context.set.notable);
+    fl_print_format(" and the %[%r%r%] parameters to get the total objects.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_total_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  When both %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_at_s, context.set.notable);
-    fl_print_format(" and %[%r%s%] parameters are specified (at the same depth),", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_name_s, context.set.notable);
-    fl_print_format(" the %[%r%s%] parameter value will be treated as a position relative to the specified", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_at_s, context.set.notable);
-    fl_print_format(" %[%r%s%] parameter value.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_name_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  When both %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_at_s, context.set.notable);
+    fl_print_format(" and %[%r%r%] parameters are specified (at the same depth),", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_name_s, context.set.notable);
+    fl_print_format(" the %[%r%r%] parameter value will be treated as a position relative to the specified", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_at_s, context.set.notable);
+    fl_print_format(" %[%r%r%] parameter value.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_name_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  This program may support parameters, such as %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_depth_s, context.set.notable);
-    fl_print_format(" or %[%r%s%], even if not supported by the standard.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_select_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  This program may support parameters, such as %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_depth_s, context.set.notable);
+    fl_print_format(" or %[%r%r%], even if not supported by the standard.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_select_s, context.set.notable, f_string_eol_s);
     fl_print_format("  This is done to help ensure consistency for scripting.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  For parameters like %[%s%s%],", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_depth_s, context.set.notable);
+    fl_print_format("  For parameters like %[%r%r%],", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_depth_s, context.set.notable);
     fl_print_format(" if the standard doesn't support nested Content, then only a depth of 0 would be valid.%r", file.stream, f_string_eol_s);
 
-    fl_print_format("  For parameters like %[%r%s%],", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_select_s, context.set.notable);
+    fl_print_format("  For parameters like %[%r%r%],", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_select_s, context.set.notable);
     fl_print_format(" if the standard doesn't support multiple Content groups, then only a select of 0 would be valid.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameter %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_trim_s, context.set.notable);
+    fl_print_format("  The parameter %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_trim_s, context.set.notable);
     fl_print_format(" will remove leading and trailing whitespaces when selecting objects or when printing objects.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  When specifying both the %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_object_s, context.set.notable);
-    fl_print_format(" parameter and the %[%r%s%] parameter, the entire Object and Content are printed, including the formatting.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_content_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  When specifying both the %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_object_s, context.set.notable);
+    fl_print_format(" parameter and the %[%r%r%] parameter, the entire Object and Content are printed, including the formatting.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_content_s, context.set.notable, f_string_eol_s);
     fl_print_format("  Both the Object and Content printed are already escaped.%r", file.stream, f_string_eol_s);
     fl_print_format("  Both the Object and Content are separated by an EOL.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameter %[%r%s%] accepts the following:%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_delimit_s, context.set.notable, f_string_eol_s);
-    fl_print_format("  - %[%s%]: Do not apply delimits.%r", file.stream, context.set.notable, fss_extended_list_read_delimit_mode_name_none_s, context.set.notable, f_string_eol_s);
-    fl_print_format("  - %[%s%]: (default) Apply all delimits.%r", file.stream, context.set.notable, fss_extended_list_read_delimit_mode_name_all_s, context.set.notable, f_string_eol_s);
-    fl_print_format("  - %[%s%]: Apply delimits for Objects.%r", file.stream, context.set.notable, fss_extended_list_read_delimit_mode_name_object_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  The parameter %[%r%r%] accepts the following:%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_delimit_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  - %[%r%]: Do not apply delimits.%r", file.stream, context.set.notable, fss_extended_list_read_delimit_mode_name_none_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  - %[%r%]: (default) Apply all delimits.%r", file.stream, context.set.notable, fss_extended_list_read_delimit_mode_name_all_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  - %[%r%]: Apply delimits for Objects.%r", file.stream, context.set.notable, fss_extended_list_read_delimit_mode_name_object_s, context.set.notable, f_string_eol_s);
     fl_print_format("  - A number, 0 or greater: apply delimits for Content at the specified depth.%r", file.stream, f_string_eol_s);
-    fl_print_format("  - A number, 0 or greater, followed by a %[%s%]: (such as '1+') apply delimits for Content at the specified depth and any greater depth (numerically).%r", file.stream, context.set.notable, fss_extended_list_read_delimit_mode_name_greater_s, context.set.notable, f_string_eol_s, f_string_eol_s);
-    fl_print_format("  - A number, 0 or lesser, followed by a %[%s%]: (such as '1-') apply delimits for Content at the specified depth and any lesser depth (numerically).%r%r", file.stream, context.set.notable, fss_extended_list_read_delimit_mode_name_lesser_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  - A number, 0 or greater, followed by a %[%r%]: (such as '1+') apply delimits for Content at the specified depth and any greater depth (numerically).%r", file.stream, context.set.notable, fss_extended_list_read_delimit_mode_name_greater_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  - A number, 0 or lesser, followed by a %[%r%]: (such as '1-') apply delimits for Content at the specified depth and any lesser depth (numerically).%r%r", file.stream, context.set.notable, fss_extended_list_read_delimit_mode_name_lesser_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The %[%s%s%] parameter may be specified multiple times to customize the delimit behavior.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_delimit_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  The %[%r%r%] parameter may be specified multiple times to customize the delimit behavior.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_delimit_s, context.set.notable, f_string_eol_s);
 
-    fl_print_format("  The %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_delimit_s, context.set.notable);
-    fl_print_format(" values %[%s%]", file.stream, context.set.notable, fss_extended_list_read_delimit_mode_name_none_s, context.set.notable);
-    fl_print_format(" and %[%s%],", file.stream, context.set.notable, fss_extended_list_read_delimit_mode_name_all_s, context.set.notable);
+    fl_print_format("  The %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_delimit_s, context.set.notable);
+    fl_print_format(" values %[%r%]", file.stream, context.set.notable, fss_extended_list_read_delimit_mode_name_none_s, context.set.notable);
+    fl_print_format(" and %[%r%],", file.stream, context.set.notable, fss_extended_list_read_delimit_mode_name_all_s, context.set.notable);
     fl_print_format(" overrule all other delimit values.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameters %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_columns_s, context.set.notable);
-    fl_print_format(" and %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_select_s, context.set.notable);
+    fl_print_format("  The parameters %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_columns_s, context.set.notable);
+    fl_print_format(" and %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_select_s, context.set.notable);
     fl_print_format(" refer to a Content column.%r", file.stream, f_string_eol_s);
     fl_print_format("  The word \"column\" is being loosely defined to refer to a specific Content.%r", file.stream, f_string_eol_s);
     fl_print_format("  This is not to be confused with a depth.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
@@ -586,13 +586,7 @@ extern "C" {
           }
 
           if (size_file) {
-            status = f_string_dynamic_resize(data.buffer.size + size_file, &data.buffer);
-
-            if (F_status_is_error(status)) {
-              fll_error_file_print(main->error, F_status_set_fine(status), "f_string_dynamic_resize", F_true, argv[main->parameters.remaining.array[i]], f_file_operation_read_s, fll_error_file_type_file_e);
-
-              break;
-            }
+            file.size_read = size_file + 1;
 
             status = f_file_stream_read(file, &data.buffer);
 
index 3a773654622afaeedead7364be5befad359d9d53..4d4679f91481b9dbe52bb0c5dc044467a96cae5e 100644 (file)
@@ -21,8 +21,8 @@ extern "C" {
  *   - small: An allocation step used for buffers that are anticipated to have small buffers.
  */
 #ifndef _di_fss_extended_list_read_common_
-  #define fss_extended_list_read_common_allocation_large_d 256
-  #define fss_extended_list_read_common_allocation_small_d 16
+  #define fss_extended_list_read_common_allocation_large_d 2048
+  #define fss_extended_list_read_common_allocation_small_d 128
 #endif // _di_fss_extended_list_read_common_
 
 /**
@@ -87,18 +87,18 @@ extern "C" {
 /**
  * A structure for designating where within the buffer a particular file exists, using a statically allocated array.
  *
- * name:  The name of the file representing the range. Set string to NULL to represent the STDIN pipe.
+ * name:  The name of the file representing the range.
  * range: A range within the buffer representing the file.
  */
 #ifndef _di_fss_extended_list_read_file_t_
   typedef struct {
-    f_string_t name;
+    f_string_static_t name;
     f_string_range_t range;
   } fss_extended_list_read_file_t;
 
   #define fss_extended_list_read_file_t_initialize \
     { \
-      f_string_t_initialize, \
+      f_string_static_t_initialize, \
       f_string_range_t_initialize, \
     }
 #endif // _di_fss_extended_list_read_file_t_
index d8380dcdc005ca8aa94079f22c0648d99398396e..48e524d671978d96d51023d51e209094bcee9568 100644 (file)
@@ -68,7 +68,7 @@ extern "C" {
   void fss_extended_list_read_print_content_ignore(fll_program_data_t * const main) {
 
     if (main->parameters.array[fss_extended_list_read_parameter_pipe_e].result == f_console_result_found_e) {
-      f_print_character(fss_extended_list_read_pipe_content_ignore, main->output.to.stream);
+      f_print_dynamic_raw(fss_extended_list_read_pipe_content_ignore, main->output.to.stream);
     }
   }
 #endif // _di_fss_extended_list_read_print_content_ignore_
@@ -77,12 +77,12 @@ extern "C" {
   void fss_extended_list_read_print_object_end(fll_program_data_t * const main, fss_extended_list_read_data_t * const data) {
 
     if (main->parameters.array[fss_extended_list_read_parameter_pipe_e].result == f_console_result_found_e) {
-      f_print_character(fss_extended_list_read_pipe_content_start, main->output.to.stream);
+      f_print_dynamic_raw(fss_extended_list_read_pipe_content_start, main->output.to.stream);
     }
     else {
       if ((data->option & fss_extended_list_read_data_option_object_d) && (data->option & fss_extended_list_read_data_option_content_d)) {
-        f_print_character(f_fss_extended_list_open_s.string[0], main->output.to.stream);
-        f_print_character(f_fss_extended_list_open_end_s.string[0], main->output.to.stream);
+        f_print_dynamic_raw(f_fss_extended_list_open_s, main->output.to.stream);
+        f_print_dynamic_raw(f_fss_extended_list_open_end_s, main->output.to.stream);
       }
     }
   }
@@ -97,11 +97,11 @@ extern "C" {
     else {
       if (data->option & fss_extended_list_read_data_option_object_d) {
         if (data->option & fss_extended_list_read_data_option_content_d) {
-          f_print_character(f_fss_extended_list_close_s.string[0], main->output.to.stream);
-          f_print_character(f_fss_extended_list_close_end_s.string[0], main->output.to.stream);
+          f_print_dynamic_raw(f_fss_extended_list_close_s, main->output.to.stream);
+          f_print_dynamic_raw(f_fss_extended_list_close_end_s, main->output.to.stream);
         }
         else if (!(data->option & fss_extended_list_read_data_option_content_d)) {
-          f_print_character(f_fss_eol_s.string[0], main->output.to.stream);
+          f_print_dynamic_raw(f_fss_eol_s, main->output.to.stream);
         }
       }
     }
@@ -111,7 +111,7 @@ extern "C" {
 #ifndef _di_fss_extended_list_read_print_one_
   void fss_extended_list_read_print_one(fll_program_data_t * const main) {
 
-    f_print_character(f_string_ascii_1_s.string[0], main->output.to.stream);
+    f_print_dynamic_raw(f_string_ascii_1_s, main->output.to.stream);
     f_print_dynamic_raw(f_string_eol_s, main->output.to.stream);
   }
 #endif // _di_fss_extended_list_read_print_one_
@@ -119,7 +119,7 @@ extern "C" {
 #ifndef _di_fss_extended_list_read_print_zero_
   void fss_extended_list_read_print_zero(fll_program_data_t * const main) {
 
-    f_print_character(f_string_ascii_0_s.string[0], main->output.to.stream);
+    f_print_dynamic_raw(f_string_ascii_0_s, main->output.to.stream);
     f_print_dynamic_raw(f_string_eol_s, main->output.to.stream);
   }
 #endif // _di_fss_extended_list_read_print_zero_
index b8f813b65ee6a873699c81612a26f8975abed196..7f7972acd002f7f3b2996cd9a897849f5de860c1 100644 (file)
@@ -216,7 +216,7 @@ extern "C" {
 #endif // _di_fss_extended_list_read_depth_process_
 
 #ifndef _di_fss_extended_list_read_file_identify_
-  f_string_t fss_extended_list_read_file_identify(const f_array_length_t at, const fss_extended_list_read_files_t files) {
+  f_string_static_t fss_extended_list_read_file_identify(const f_array_length_t at, const fss_extended_list_read_files_t files) {
 
     for (f_array_length_t i = 0; i < files.used; ++i) {
 
@@ -230,7 +230,7 @@ extern "C" {
       return files.array[files.used - 1].name;
     }
 
-    return "";
+    return f_string_empty_s;
   }
 #endif // _di_fss_extended_list_read_file_identify_
 
index 77b60eaf27661b37f931d1a57be921d190a19716..b301d3fc2f183badefb241842a1efa6b33ad2112 100644 (file)
@@ -44,14 +44,14 @@ extern "C" {
     fl_print_format(" or a Form Feed character '%[\\f%]' (%[U+000C%]).%r", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s);
     fl_print_format("  The end of the pipe represents the end of any Object or Content.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The FSS-0003 (Extended List) specification does not support quoted names, therefore the parameters '%[%r%s%]'", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_write_long_single_s, context.set.notable);
-    fl_print_format(" and '%[%r%s%]' do nothing.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_write_long_double_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  The FSS-0003 (Extended List) specification does not support quoted names, therefore the parameters '%[%r%r%]'", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_write_long_single_s, context.set.notable);
+    fl_print_format(" and '%[%r%r%]' do nothing.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_write_long_double_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameter '%[%r%s%]' designates to not escape any valid nested Object or Content within some Content.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_write_long_ignore_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  The parameter '%[%r%r%]' designates to not escape any valid nested Object or Content within some Content.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_write_long_ignore_s, context.set.notable, f_string_eol_s);
     fl_print_format("  This parameter requires two values.%r", file.stream, f_string_eol_s);
     fl_print_format("  This parameter is not used for ignoring anything from the input pipe.%r", file.stream, f_string_eol_s);
-    fl_print_format("  This parameter must be specified after a '%[%r%s%]'", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_write_long_content_s, context.set.notable);
-    fl_print_format(" parameter and this applies only to the Content represented by that specific '%[%r%s%]' parameter.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_write_long_content_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  This parameter must be specified after a '%[%r%r%]'", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_write_long_content_s, context.set.notable);
+    fl_print_format(" parameter and this applies only to the Content represented by that specific '%[%r%r%]' parameter.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_write_long_content_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
     funlockfile(file.stream);
 
index ad7c928d5694167b0a7c583b2c9f504d44a8a0f5..f9ffa03cdbf50713e97554b8252c56e9c0de23fe 100644 (file)
@@ -20,8 +20,8 @@ extern "C" {
  *   - small: An allocation step used for buffers that are anticipated to have small buffers.
  */
 #ifndef _di_fss_extended_list_write_common_
-  #define fss_extended_list_write_common_allocation_large_d 256
-  #define fss_extended_list_write_common_allocation_small_d 16
+  #define fss_extended_list_write_common_allocation_large_d 2048
+  #define fss_extended_list_write_common_allocation_small_d 128
 #endif // _di_fss_extended_list_write_common_
 
 /**
index b92e376cc7e4ff5317bfdeaee7a2e92f7fb8c985..ddf08ccd51ba841e126611aec76c2abc1a5da7e0 100644 (file)
@@ -51,6 +51,14 @@ extern "C" {
   const f_string_static_t fss_extended_read_long_trim_s = macro_f_string_static_t_initialize(FSS_EXTENDED_READ_long_trim_s, 0, FSS_EXTENDED_READ_long_trim_s_length);
 #endif // _di_fss_extended_read_parameters_
 
+#ifndef _di_fss_extended_read_delimit_mode_
+  const f_string_static_t fss_extended_read_delimit_mode_name_none_s = macro_f_string_static_t_initialize(FSS_EXTENDED_READ_delimit_mode_name_none_s, 0, FSS_EXTENDED_READ_delimit_mode_name_none_s_length);
+  const f_string_static_t fss_extended_read_delimit_mode_name_all_s = macro_f_string_static_t_initialize(FSS_EXTENDED_READ_delimit_mode_name_all_s, 0, FSS_EXTENDED_READ_delimit_mode_name_all_s_length);
+  const f_string_static_t fss_extended_read_delimit_mode_name_object_s = macro_f_string_static_t_initialize(FSS_EXTENDED_READ_delimit_mode_name_object_s, 0, FSS_EXTENDED_READ_delimit_mode_name_object_s_length);
+  const f_string_static_t fss_extended_read_delimit_mode_name_greater_s = macro_f_string_static_t_initialize(FSS_EXTENDED_READ_delimit_mode_name_greater_s, 0, FSS_EXTENDED_READ_delimit_mode_name_greater_s_length);
+  const f_string_static_t fss_extended_read_delimit_mode_name_lesser_s = macro_f_string_static_t_initialize(FSS_EXTENDED_READ_delimit_mode_name_lesser_s, 0, FSS_EXTENDED_READ_delimit_mode_name_lesser_s_length);
+#endif // _di_fss_extended_read_delimit_mode_
+
 #ifndef _di_fss_extended_read_main_delete_
   f_status_t fss_extended_read_main_delete(fll_program_data_t * const main) {
 
index f73ee23f96d77357b384432a2477e0cded2aab73..dd66d09ca1ed79cfbbe4dab674d9e3e5671b9f73 100644 (file)
@@ -243,17 +243,23 @@ extern "C" {
  *   - object:                 Objects arre to have delimits applied.
  */
 #ifndef _di_fss_extended_read_delimit_mode_
-  #define fss_extended_read_delimit_mode_name_none    "none"
-  #define fss_extended_read_delimit_mode_name_all     "all"
-  #define fss_extended_read_delimit_mode_name_object  "object"
-  #define fss_extended_read_delimit_mode_name_greater "+"
-  #define fss_extended_read_delimit_mode_name_lesser  "-"
-
-  #define fss_extended_read_delimit_mode_name_none_length    4
-  #define fss_extended_read_delimit_mode_name_all_length     3
-  #define fss_extended_read_delimit_mode_name_object_length  6
-  #define fss_extended_read_delimit_mode_name_greater_length 1
-  #define fss_extended_read_delimit_mode_name_lesser_length  1
+  #define FSS_EXTENDED_READ_delimit_mode_name_none    "none"
+  #define FSS_EXTENDED_READ_delimit_mode_name_all     "all"
+  #define FSS_EXTENDED_READ_delimit_mode_name_object  "object"
+  #define FSS_EXTENDED_READ_delimit_mode_name_greater "+"
+  #define FSS_EXTENDED_READ_delimit_mode_name_lesser  "-"
+
+  #define FSS_EXTENDED_READ_delimit_mode_name_none_length    4
+  #define FSS_EXTENDED_READ_delimit_mode_name_all_length     3
+  #define FSS_EXTENDED_READ_delimit_mode_name_object_length  6
+  #define FSS_EXTENDED_READ_delimit_mode_name_greater_length 1
+  #define FSS_EXTENDED_READ_delimit_mode_name_lesser_length  1
+
+  extern const f_string_static_t fss_extended_read_delimit_mode_name_none_s;
+  extern const f_string_static_t fss_extended_read_delimit_mode_name_all_s;
+  extern const f_string_static_t fss_extended_read_delimit_mode_name_object_s;
+  extern const f_string_static_t fss_extended_read_delimit_mode_name_greater_s;
+  extern const f_string_static_t fss_extended_read_delimit_mode_name_lesser_s;
 
   enum {
     fss_extended_read_delimit_mode_none_e = 1,
index c303b3df911148e6f2ebe59418da6b18649cabb6..d3f24b54a23fad67c364e0b1544af80d41e90952 100644 (file)
@@ -50,63 +50,63 @@ extern "C" {
     fl_print_format("  All numeric positions (indexes) start at 0 instead of 1.%r", file.stream, f_string_eol_s);
     fl_print_format("  For example, a file of 17 lines would range from 0 to 16.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  When using the %[%r%s%] option, an order of operations is enforced on the parameters.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_depth_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  When using the %[%r%r%] option, an order of operations is enforced on the parameters.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_depth_s, context.set.notable, f_string_eol_s);
 
     fl_print_format("  When this order of operations is in effect, parameters to the right of a depth parameter are influenced by that depth parameter:%r", file.stream, f_string_eol_s);
 
-    fl_print_format("    %[%r%s%]: An Object index at the specified depth.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_at_s, context.set.notable, f_string_eol_s);
-    fl_print_format("    %[%r%s%]: A new depth within the specified depth, indexed from the root.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_depth_s, context.set.notable, f_string_eol_s);
-    fl_print_format("    %[%r%s%]: An Object name at the specified depth.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_name_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("    %[%r%r%]: An Object index at the specified depth.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_at_s, context.set.notable, f_string_eol_s);
+    fl_print_format("    %[%r%r%]: A new depth within the specified depth, indexed from the root.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_depth_s, context.set.notable, f_string_eol_s);
+    fl_print_format("    %[%r%r%]: An Object name at the specified depth.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_name_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameter %[%r%s%] must be in numeric order, but values in between may be skipped.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_depth_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  The parameter %[%r%r%] must be in numeric order, but values in between may be skipped.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_depth_s, context.set.notable, f_string_eol_s);
     fl_print_format("    ('-d 0 -a 1 -d 2 -a 2' would specify index 1 at depth 0, any index at depth 1, and index 2 at depth 2.)%r", file.stream, f_string_eol_s);
     fl_print_format("    ('-d 2 -a 1 -d 0 -a 2' would be invalid because depth 2 is before depth 1.)%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameter %[%r%s%] selects a Content column.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_select_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  The parameter %[%r%r%] selects a Content column.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_select_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  Specify both %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_object_s, context.set.notable);
-    fl_print_format(" and the %[%r%s%] parameters to get the total objects.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_total_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  Specify both %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_object_s, context.set.notable);
+    fl_print_format(" and the %[%r%r%] parameters to get the total objects.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_total_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  When both %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_at_s, context.set.notable);
-    fl_print_format(" and %[%r%s%] parameters are specified (at the same depth),", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_name_s, context.set.notable);
-    fl_print_format(" the %[%r%s%] parameter value will be treated as a position relative to the specified", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_at_s, context.set.notable);
-    fl_print_format(" %[%r%s%] parameter value.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_name_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  When both %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_at_s, context.set.notable);
+    fl_print_format(" and %[%r%r%] parameters are specified (at the same depth),", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_name_s, context.set.notable);
+    fl_print_format(" the %[%r%r%] parameter value will be treated as a position relative to the specified", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_at_s, context.set.notable);
+    fl_print_format(" %[%r%r%] parameter value.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_name_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  This program may support parameters, such as %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_depth_s, context.set.notable);
-    fl_print_format(" or %[%r%s%], even if not supported by the standard.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_select_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  This program may support parameters, such as %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_depth_s, context.set.notable);
+    fl_print_format(" or %[%r%r%], even if not supported by the standard.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_select_s, context.set.notable, f_string_eol_s);
     fl_print_format("  This is done to help ensure consistency for scripting.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  For parameters like %[%r%s%],", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_depth_s, context.set.notable);
+    fl_print_format("  For parameters like %[%r%r%],", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_depth_s, context.set.notable);
     fl_print_format(" if the standard doesn't support nested Content, then only a depth of 0 would be valid.%r", file.stream, f_string_eol_s);
 
-    fl_print_format("  For parameters like %[%r%s%],", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_select_s, context.set.notable);
+    fl_print_format("  For parameters like %[%r%r%],", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_select_s, context.set.notable);
     fl_print_format(" if the standard doesn't support multiple Content groups, then only a select of 0 would be valid.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameter %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_trim_s, context.set.notable);
+    fl_print_format("  The parameter %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_trim_s, context.set.notable);
     fl_print_format(" will remove leading and trailing whitespaces when selecting objects or when printing objects.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  When specifying both the %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_object_s, context.set.notable);
-    fl_print_format(" parameter and the %[%r%s%] parameter, the entire Object and Content are printed, including the formatting.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_content_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  When specifying both the %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_object_s, context.set.notable);
+    fl_print_format(" parameter and the %[%r%r%] parameter, the entire Object and Content are printed, including the formatting.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_content_s, context.set.notable, f_string_eol_s);
     fl_print_format("  Both the Object and Content printed are already escaped.%r", file.stream, f_string_eol_s);
     fl_print_format("  Both the Object and Content are separated by a space.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameter %[%r%s%] accepts the following:%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_delimit_s, context.set.notable, f_string_eol_s);
-    fl_print_format("  - %[%s%]: Do not apply delimits.%r", file.stream, context.set.notable, fss_extended_read_delimit_mode_name_none, context.set.notable, f_string_eol_s);
-    fl_print_format("  - %[%s%]: (default) Apply all delimits.%r", file.stream, context.set.notable, fss_extended_read_delimit_mode_name_all, context.set.notable, f_string_eol_s);
-    fl_print_format("  - %[%s%]: Apply delimits for Objects.%r", file.stream, context.set.notable, fss_extended_read_delimit_mode_name_object, context.set.notable, f_string_eol_s);
+    fl_print_format("  The parameter %[%r%r%] accepts the following:%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_delimit_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  - %[%r%]: Do not apply delimits.%r", file.stream, context.set.notable, fss_extended_read_delimit_mode_name_none, context.set.notable, f_string_eol_s);
+    fl_print_format("  - %[%r%]: (default) Apply all delimits.%r", file.stream, context.set.notable, fss_extended_read_delimit_mode_name_all, context.set.notable, f_string_eol_s);
+    fl_print_format("  - %[%r%]: Apply delimits for Objects.%r", file.stream, context.set.notable, fss_extended_read_delimit_mode_name_object, context.set.notable, f_string_eol_s);
     fl_print_format("  - A number, 0 or greater: apply delimits for Content at the specified depth.%r", file.stream, f_string_eol_s);
-    fl_print_format("  - A number, 0 or greater, followed by a %[%s%]: (such as '1+') apply delimits for Content at the specified depth and any greater depth (numerically).%r", file.stream, context.set.notable, fss_extended_read_delimit_mode_name_greater, context.set.notable, f_string_eol_s, f_string_eol_s);
-    fl_print_format("  - A number, 0 or lesser, followed by a %[%s%]: (such as '1-') apply delimits for Content at the specified depth and any lesser depth (numerically).%r%r", file.stream, context.set.notable, fss_extended_read_delimit_mode_name_lesser, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  - A number, 0 or greater, followed by a %[%r%]: (such as '1+') apply delimits for Content at the specified depth and any greater depth (numerically).%r", file.stream, context.set.notable, fss_extended_read_delimit_mode_name_greater, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  - A number, 0 or lesser, followed by a %[%r%]: (such as '1-') apply delimits for Content at the specified depth and any lesser depth (numerically).%r%r", file.stream, context.set.notable, fss_extended_read_delimit_mode_name_lesser, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The %[%r%s%] parameter may be specified multiple times to customize the delimit behavior.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_delimit_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  The %[%r%r%] parameter may be specified multiple times to customize the delimit behavior.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_delimit_s, context.set.notable, f_string_eol_s);
 
-    fl_print_format("  The %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_delimit_s, context.set.notable);
-    fl_print_format(" values %[%s%]", file.stream, context.set.notable, fss_extended_read_delimit_mode_name_none, context.set.notable);
-    fl_print_format(" and %[%s%],", file.stream, context.set.notable, fss_extended_read_delimit_mode_name_all, context.set.notable);
+    fl_print_format("  The %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_delimit_s, context.set.notable);
+    fl_print_format(" values %[%r%]", file.stream, context.set.notable, fss_extended_read_delimit_mode_name_none, context.set.notable);
+    fl_print_format(" and %[%r%],", file.stream, context.set.notable, fss_extended_read_delimit_mode_name_all, context.set.notable);
     fl_print_format(" overrule all other delimit values.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameters %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_columns_s, context.set.notable);
-    fl_print_format(" and %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_select_s, context.set.notable);
+    fl_print_format("  The parameters %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_columns_s, context.set.notable);
+    fl_print_format(" and %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_select_s, context.set.notable);
     fl_print_format(" refer to a Content column.%r", file.stream, f_string_eol_s);
     fl_print_format("  The word \"column\" is being loosely defined to refer to a specific Content.%r", file.stream, f_string_eol_s);
     fl_print_format("  This is not to be confused with a depth.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
@@ -592,13 +592,7 @@ extern "C" {
           }
 
           if (size_file) {
-            status = f_string_dynamic_resize(data.buffer.size + size_file, &data.buffer);
-
-            if (F_status_is_error(status)) {
-              fll_error_file_print(main->error, F_status_set_fine(status), "f_string_dynamic_resize", F_true, argv[main->parameters.remaining.array[i]], f_file_operation_read_s, fll_error_file_type_file_e);
-
-              break;
-            }
+            file.size_read = size_file + 1;
 
             status = f_file_stream_read(file, &data.buffer);
 
index 492c3bcc179df25ec85ace7600d8ce2667ca935e..e6ba9bd8b1dc82a00f5b5fba6238219e669920ce 100644 (file)
@@ -3,7 +3,7 @@
 int main(const int argc, const f_string_t *argv) {
 
   f_console_arguments_t arguments = { argc, argv };
-  fll_program_data_t data = fss_extended_read_main_t_initialize;
+  fll_program_data_t data = fll_program_data_t_initialize;
 
   if (f_pipe_input_exists()) {
     data.process_pipe = F_true;
index 0094e54514bf3ed53b6f69f3d6e444ecc48a2ad9..b9211a0c7098aa76c6d50008fc8c99729dab3579 100644 (file)
@@ -20,8 +20,8 @@ extern "C" {
  *   - small: An allocation step used for buffers that are anticipated to have small buffers.
  */
 #ifndef _di_fss_extended_read_common_
-  #define fss_extended_read_common_allocation_large_d 256
-  #define fss_extended_read_common_allocation_small_d 16
+  #define fss_extended_read_common_allocation_large_d 2048
+  #define fss_extended_read_common_allocation_small_d 128
 #endif // _di_fss_extended_read_common_
 
 /**
@@ -86,18 +86,18 @@ extern "C" {
 /**
  * A structure for designating where within the buffer a particular file exists, using a statically allocated array.
  *
- * name:  The name of the file representing the range. Set string to NULL to represent the STDIN pipe.
+ * name:  The name of the file representing the range.
  * range: A range within the buffer representing the file.
  */
 #ifndef _di_fss_extended_read_file_t_
   typedef struct {
-    f_string_t name;
+    f_string_static_t name;
     f_string_range_t range;
   } fss_extended_read_file_t;
 
   #define fss_extended_read_file_t_initialize \
     { \
-      f_string_t_initialize, \
+      f_string_static_t_initialize, \
       f_string_range_t_initialize, \
     }
 #endif // _di_fss_extended_read_file_t_
index 9b1edb7278e7d4bdf46e0a4825657f027be5e728..788974b9fbb6532ed9f7a9c9c8a77dced4c615ca 100644 (file)
@@ -20,24 +20,24 @@ extern "C" {
       if (data->option & fss_extended_read_data_option_object_d) {
         if (data->option & fss_extended_read_data_option_trim_d) {
           if ((data->option & fss_extended_read_data_option_raw_d) && data->quotes_object.array[at]) {
-            f_print_character_safely(data->quotes_object.array[at] == f_fss_quote_type_single_e ? f_fss_quote_single_s.string[0] : f_fss_quote_double_s.string[0], main->output.to.stream);
+            f_print_dynamic_raw(data->quotes_object.array[at] == f_fss_quote_type_single_e ? f_fss_quote_single_s : f_fss_quote_double_s, main->output.to.stream);
           }
 
           fl_print_trim_except_dynamic_partial(data->buffer, data->objects.array[at], delimits_object, main->output.to.stream);
 
           if ((data->option & fss_extended_read_data_option_raw_d) && data->quotes_object.array[at]) {
-            f_print_character_safely(data->quotes_object.array[at] == f_fss_quote_type_single_e ? f_fss_quote_single_s.string[0] : f_fss_quote_double_s.string[0], main->output.to.stream);
+            f_print_dynamic_raw(data->quotes_object.array[at] == f_fss_quote_type_single_e ? f_fss_quote_single_s : f_fss_quote_double_s, main->output.to.stream);
           }
         }
         else {
           if ((data->option & fss_extended_read_data_option_raw_d) && data->quotes_object.array[at]) {
-            f_print_character_safely(data->quotes_object.array[at] == f_fss_quote_type_single_e ? f_fss_quote_single_s.string[0] : f_fss_quote_double_s.string[0], main->output.to.stream);
+            f_print_dynamic_raw(data->quotes_object.array[at] == f_fss_quote_type_single_e ? f_fss_quote_single_s : f_fss_quote_double_s, main->output.to.stream);
           }
 
           f_print_except_dynamic_partial(data->buffer, data->objects.array[at], delimits_object, main->output.to.stream);
 
           if ((data->option & fss_extended_read_data_option_raw_d) && data->quotes_object.array[at]) {
-            f_print_character_safely(data->quotes_object.array[at] == f_fss_quote_type_single_e ? f_fss_quote_single_s.string[0] : f_fss_quote_double_s.string[0], main->output.to.stream);
+            f_print_dynamic_raw(data->quotes_object.array[at] == f_fss_quote_type_single_e ? f_fss_quote_single_s : f_fss_quote_double_s, main->output.to.stream);
           }
         }
 
@@ -54,13 +54,13 @@ extern "C" {
             content_printed = F_true;
 
             if ((data->option & fss_extended_read_data_option_raw_d) && data->quotes_content.array[at].array[data->select]) {
-              f_print_character_safely(data->quotes_content.array[at].array[data->select] == f_fss_quote_type_single_e ? f_fss_quote_single_s.string[0] : f_fss_quote_double_s.string[0], main->output.to.stream);
+              f_print_dynamic_raw(data->quotes_content.array[at].array[data->select] == f_fss_quote_type_single_e ? f_fss_quote_single_s : f_fss_quote_double_s, main->output.to.stream);
             }
 
             f_print_except_dynamic_partial(data->buffer, data->contents.array[at].array[data->select], delimits_content, main->output.to.stream);
 
             if ((data->option & fss_extended_read_data_option_raw_d) && data->quotes_content.array[at].array[data->select]) {
-              f_print_character_safely(data->quotes_content.array[at].array[data->select] == f_fss_quote_type_single_e ? f_fss_quote_single_s.string[0] : f_fss_quote_double_s.string[0], main->output.to.stream);
+              f_print_dynamic_raw(data->quotes_content.array[at].array[data->select] == f_fss_quote_type_single_e ? f_fss_quote_single_s : f_fss_quote_double_s, main->output.to.stream);
             }
           }
         }
@@ -74,13 +74,13 @@ extern "C" {
             content_printed = F_true;
 
             if ((data->option & fss_extended_read_data_option_raw_d) && data->quotes_content.array[at].array[i]) {
-              f_print_character_safely(data->quotes_content.array[at].array[i] == f_fss_quote_type_single_e ? f_fss_quote_single_s.string[0] : f_fss_quote_double_s.string[0], main->output.to.stream);
+              f_print_dynamic_raw(data->quotes_content.array[at].array[i] == f_fss_quote_type_single_e ? f_fss_quote_single_s : f_fss_quote_double_s, main->output.to.stream);
             }
 
             f_print_except_dynamic_partial(data->buffer, data->contents.array[at].array[i], delimits_content, main->output.to.stream);
 
             if ((data->option & fss_extended_read_data_option_raw_d) && data->quotes_content.array[at].array[i]) {
-              f_print_character_safely(data->quotes_content.array[at].array[i] == f_fss_quote_type_single_e ? f_fss_quote_single_s.string[0] : f_fss_quote_double_s.string[0], main->output.to.stream);
+              f_print_dynamic_raw(data->quotes_content.array[at].array[i] == f_fss_quote_type_single_e ? f_fss_quote_single_s : f_fss_quote_double_s, main->output.to.stream);
             }
 
             if (i + 1 < data->contents.array[at].used && data->contents.array[at].array[i + 1].start <= data->contents.array[at].array[i + 1].stop) {
@@ -157,10 +157,10 @@ extern "C" {
   void fss_extended_read_print_content_end(fll_program_data_t * const main) {
 
     if (main->parameters.array[fss_extended_read_parameter_pipe_e].result == f_console_result_found_e) {
-      f_print_character(fss_extended_read_pipe_content_start_s, main->output.to.stream);
+      f_print_dynamic_raw(fss_extended_read_pipe_content_start_s, main->output.to.stream);
     }
     else {
-      f_print_character(f_fss_space_s.string[0], main->output.to.stream);
+      f_print_dynamic_raw(f_fss_space_s, main->output.to.stream);
     }
   }
 #endif // _di_fss_extended_read_print_content_end_
@@ -169,10 +169,10 @@ extern "C" {
   void fss_extended_read_print_object_end(fll_program_data_t * const main) {
 
     if (main->parameters.array[fss_extended_read_parameter_pipe_e].result == f_console_result_found_e) {
-      f_print_character(fss_extended_read_pipe_content_end_s, main->output.to.stream);
+      f_print_dynamic_raw(fss_extended_read_pipe_content_end_s, main->output.to.stream);
     }
     else {
-      f_print_character(f_fss_space_s.string[0], main->output.to.stream);
+      f_print_dynamic_raw(f_fss_space_s, main->output.to.stream);
     }
   }
 #endif // _di_fss_extended_read_print_object_end_
@@ -180,7 +180,7 @@ extern "C" {
 #ifndef _di_fss_extended_read_print_one_
   void fss_extended_read_print_one(fll_program_data_t * const main) {
 
-    f_print_character(f_string_ascii_1_s.string[0], main->output.to.stream);
+    f_print_dynamic_raw(f_string_ascii_1_s, main->output.to.stream);
     f_print_dynamic_raw(f_string_eol_s, main->output.to.stream);
   }
 #endif // _di_fss_extended_read_print_one_
@@ -189,10 +189,10 @@ extern "C" {
   void fss_extended_read_print_set_end(fll_program_data_t * const main) {
 
     if (main->parameters.array[fss_extended_read_parameter_pipe_e].result == f_console_result_found_e) {
-      f_print_character(fss_extended_read_pipe_content_end_s, main->output.to.stream);
+      f_print_dynamic_raw(fss_extended_read_pipe_content_end_s, main->output.to.stream);
     }
     else {
-      f_print_character(f_fss_eol_s.string[0], main->output.to.stream);
+      f_print_dynamic_raw(f_fss_eol_s, main->output.to.stream);
     }
   }
 #endif // _di_fss_extended_read_print_set_end_
@@ -200,7 +200,7 @@ extern "C" {
 #ifndef _di_fss_extended_read_print_zero_
   void fss_extended_read_print_zero(fll_program_data_t * const main) {
 
-    f_print_character(f_string_ascii_0_s.string[0], main->output.to.stream);
+    f_print_dynamic_raw(f_string_ascii_0_s, main->output.to.stream);
     f_print_dynamic_raw(f_string_eol_s, main->output.to.stream);
   }
 #endif // _di_fss_extended_read_print_zero_
index 7dced40951ecb88736846faccb3b88bf4fb2592f..eb35b5160e6f3a3d8840d0f3d2433d50295632b3 100644 (file)
@@ -229,7 +229,7 @@ extern "C" {
 #endif // _di_fss_extended_read_depth_process_
 
 #ifndef _di_fss_extended_read_file_identify_
-  f_string_t fss_extended_read_file_identify(const f_array_length_t at, const fss_extended_read_files_t files) {
+  f_string_static_t fss_extended_read_file_identify(const f_array_length_t at, const fss_extended_read_files_t files) {
 
     for (f_array_length_t i = 0; i < files.used; ++i) {
 
@@ -243,7 +243,7 @@ extern "C" {
       return files.array[files.used - 1].name;
     }
 
-    return "";
+    return f_string_empty_s;
   }
 #endif // _di_fss_extended_read_file_identify_
 
index 0cb75cf40e9dfbd31bef4e6ce17675eaa819519c..72aad1bd6e4677cc1bd0a9b36de7fe00813ed913 100644 (file)
@@ -44,10 +44,10 @@ extern "C" {
     fl_print_format(" or a Form Feed character '%[\\f%]' (%[U+000C%]).%r", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s);
     fl_print_format("  The end of the pipe represents the end of any Object or Content.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The FSS-0001 (Extended) specification does not support multi-line Content, therefore the parameter '%[%r%s%]'", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_write_long_prepend_s, context.set.notable);
+    fl_print_format("  The FSS-0001 (Extended) specification does not support multi-line Content, therefore the parameter '%[%r%r%]'", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_write_long_prepend_s, context.set.notable);
     fl_print_format(" does nothing.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  This program does not use the parameter '%[%r%s%]', which therefore does nothing.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_write_long_ignore_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  This program does not use the parameter '%[%r%r%]', which therefore does nothing.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_write_long_ignore_s, context.set.notable, f_string_eol_s);
     fl_print_format("  This parameter requires two values.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
     funlockfile(file.stream);
index 4b439d90713e19a450fbfbf15a8d57525054477a..2020deddbe3d5081e02234a9356cbb313e4feb3d 100644 (file)
@@ -20,8 +20,8 @@ extern "C" {
  *   - small: An allocation step used for buffers that are anticipated to have small buffers.
  */
 #ifndef _di_fss_extended_write_common_
-  #define fss_extended_write_common_allocation_large_d 256
-  #define fss_extended_write_common_allocation_small_d 16
+  #define fss_extended_write_common_allocation_large_d 2048
+  #define fss_extended_write_common_allocation_small_d 128
 #endif // _di_fss_extended_write_common_
 
 /**
index 4a118fea6676417f6dc7d6c0c48baac5e148216d..5cf85f819d7cc01ec93861d9295bd1dca8b8ac0d 100644 (file)
@@ -36,14 +36,14 @@ extern "C" {
 
     fll_program_print_help_usage(file, context, fss_identify_program_name_s, fll_program_parameter_filenames_s);
 
-    fl_print_format("  The %[%r%s%] parameter refers to the file lines and not the lines in a given file.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_identify_long_line_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  The %[%r%r%] parameter refers to the file lines and not the lines in a given file.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_identify_long_line_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  If neither the %[%r%s%] nor", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_identify_long_object_s, context.set.notable);
-    fl_print_format(" %[%r%s%] are specified, then the default behavior is to print both.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_identify_long_content_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  If neither the %[%r%r%] nor", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_identify_long_object_s, context.set.notable);
+    fl_print_format(" %[%r%r%] are specified, then the default behavior is to print both.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_identify_long_content_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  When specifying the %[%r%s%] parameter, neither the", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_identify_long_total_s, context.set.notable);
-    fl_print_format(" %[%r%s%] nor the", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_identify_long_object_s, context.set.notable);
-    fl_print_format(" %[%r%s%] parameter may be specified.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_identify_long_content_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  When specifying the %[%r%r%] parameter, neither the", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_identify_long_total_s, context.set.notable);
+    fl_print_format(" %[%r%r%] nor the", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_identify_long_object_s, context.set.notable);
+    fl_print_format(" %[%r%r%] parameter may be specified.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_identify_long_content_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
     fl_print_format("  An FSS file is identified by the following format: '%[# Object-Content%]'", file.stream, context.set.notable, context.set.notable);
     fl_print_format(" where the Object, is a machine-name representing the name and may only consist of \"word\" characters and the Content is a 4-digit hexidecimal number representing a particular variant of the Object.%r", file.stream, f_string_eol_s);
index 5ed08659ece2ead51dd58cfe75d5a12947ba5ea0..61f353e0b73b293e245f3d718b364ad8359c8b04 100644 (file)
@@ -42,6 +42,14 @@ extern "C" {
   const f_string_static_t fss_payload_read_long_trim_s = macro_f_string_static_t_initialize(FSS_PAYLOAD_READ_long_trim_s, 0, FSS_PAYLOAD_READ_long_trim_s_length);
 #endif // _di_fss_payload_read_parameters_
 
+#ifndef _di_fss_payload_read_delimit_mode_
+  const f_string_static_t fss_payload_read_delimit_mode_name_none_s = macro_f_string_static_t_initialize(FSS_PAYLOAD_READ_delimit_mode_name_none_s, 0, FSS_PAYLOAD_READ_delimit_mode_name_none_s_length);
+  const f_string_static_t fss_payload_read_delimit_mode_name_all_s = macro_f_string_static_t_initialize(FSS_PAYLOAD_READ_delimit_mode_name_all_s, 0, FSS_PAYLOAD_READ_delimit_mode_name_all_s_length);
+  const f_string_static_t fss_payload_read_delimit_mode_name_object_s = macro_f_string_static_t_initialize(FSS_PAYLOAD_READ_delimit_mode_name_object_s, 0, FSS_PAYLOAD_READ_delimit_mode_name_object_s_length);
+  const f_string_static_t fss_payload_read_delimit_mode_name_greater_s = macro_f_string_static_t_initialize(FSS_PAYLOAD_READ_delimit_mode_name_greater_s, 0, FSS_PAYLOAD_READ_delimit_mode_name_greater_s_length);
+  const f_string_static_t fss_payload_read_delimit_mode_name_lesser_s = macro_f_string_static_t_initialize(FSS_PAYLOAD_READ_delimit_mode_name_lesser_s, 0, FSS_PAYLOAD_READ_delimit_mode_name_lesser_s_length);
+#endif // _di_fss_payload_read_delimit_mode_
+
 #ifndef _di_fss_payload_read_main_delete_
   f_status_t fss_payload_read_main_delete(fll_program_data_t * const main) {
 
index bbab7eed581ef151303be1a7a5cd488be5762a93..9ffe69822474677fa0c603f8f861d25d8414f46b 100644 (file)
@@ -243,17 +243,23 @@ extern "C" {
  *   - object:                 Objects arre to have delimits applied.
  */
 #ifndef _di_fss_payload_read_delimit_mode_
-  #define fss_payload_read_delimit_mode_name_none_s    "none"
-  #define fss_payload_read_delimit_mode_name_all_s     "all"
-  #define fss_payload_read_delimit_mode_name_object_s  "object"
-  #define fss_payload_read_delimit_mode_name_greater_s "+"
-  #define fss_payload_read_delimit_mode_name_lesser_s  "-"
-
-  #define fss_payload_read_delimit_mode_name_none_s_length    4
-  #define fss_payload_read_delimit_mode_name_all_s_length     3
-  #define fss_payload_read_delimit_mode_name_object_s_length  6
-  #define fss_payload_read_delimit_mode_name_greater_s_length 1
-  #define fss_payload_read_delimit_mode_name_lesser_s_length  1
+  #define FSS_PAYLOAD_READ_delimit_mode_name_none_s    "none"
+  #define FSS_PAYLOAD_READ_delimit_mode_name_all_s     "all"
+  #define FSS_PAYLOAD_READ_delimit_mode_name_object_s  "object"
+  #define FSS_PAYLOAD_READ_delimit_mode_name_greater_s "+"
+  #define FSS_PAYLOAD_READ_delimit_mode_name_lesser_s  "-"
+
+  #define FSS_PAYLOAD_READ_delimit_mode_name_none_s_length    4
+  #define FSS_PAYLOAD_READ_delimit_mode_name_all_s_length     3
+  #define FSS_PAYLOAD_READ_delimit_mode_name_object_s_length  6
+  #define FSS_PAYLOAD_READ_delimit_mode_name_greater_s_length 1
+  #define FSS_PAYLOAD_READ_delimit_mode_name_lesser_s_length  1
+
+  extern const f_string_static_t fss_payload_read_delimit_mode_name_none_s;
+  extern const f_string_static_t fss_payload_read_delimit_mode_name_all_s;
+  extern const f_string_static_t fss_payload_read_delimit_mode_name_object_s;
+  extern const f_string_static_t fss_payload_read_delimit_mode_name_greater_s;
+  extern const f_string_static_t fss_payload_read_delimit_mode_name_lesser_s;
 
   enum {
     fss_payload_read_delimit_mode_none_e = 1,
index f97622646b93cfbe059560159aa683762361437e..6c8c4d56baeb1dcbd9a386a6f5689962f8899a56 100644 (file)
@@ -59,68 +59,68 @@ extern "C" {
     fl_print_format("  All numeric positions (indexes) start at 0 instead of 1.%r", file.stream, f_string_eol_s);
     fl_print_format("  For example, a file of 17 lines would range from 0 to 16.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  When using the %[%r%s%] option, an order of operations is enforced on the parameters.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_depth_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  When using the %[%r%r%] option, an order of operations is enforced on the parameters.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_depth_s, context.set.notable, f_string_eol_s);
 
     fl_print_format("  When this order of operations is in effect, parameters to the right of a depth parameter are influenced by that depth parameter:%r", file.stream, f_string_eol_s);
 
-    fl_print_format("    %[%r%s%]: An Object index at the specified depth.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_at_s, context.set.notable, f_string_eol_s);
-    fl_print_format("    %[%r%s%]: A new depth within the specified depth, indexed from the root.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_depth_s, context.set.notable, f_string_eol_s);
-    fl_print_format("    %[%r%s%]: An Object name at the specified depth.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_name_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("    %[%r%r%]: An Object index at the specified depth.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_at_s, context.set.notable, f_string_eol_s);
+    fl_print_format("    %[%r%r%]: A new depth within the specified depth, indexed from the root.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_depth_s, context.set.notable, f_string_eol_s);
+    fl_print_format("    %[%r%r%]: An Object name at the specified depth.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_name_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameter %[%r%s%] must be in numeric order, but values in between may be skipped.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_depth_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  The parameter %[%r%r%] must be in numeric order, but values in between may be skipped.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_depth_s, context.set.notable, f_string_eol_s);
     fl_print_format("    ('-d 0 -a 1 -d 2 -a 2' would specify index 1 at depth 0, any index at depth 1, and index 2 at depth 2.)%r", file.stream, f_string_eol_s);
     fl_print_format("    ('-d 2 -a 1 -d 0 -a 2' would be invalid because depth 2 is before depth 1.)%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameter %[%r%s%] selects a Content column.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_select_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  The parameter %[%r%r%] selects a Content column.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_select_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  Specify both %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_object_s, context.set.notable);
-    fl_print_format(" and the %[%r%s%] parameters to get the total objects.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_total_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  Specify both %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_object_s, context.set.notable);
+    fl_print_format(" and the %[%r%r%] parameters to get the total objects.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_total_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  When both %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_at_s, context.set.notable);
-    fl_print_format(" and %[%r%s%] parameters are specified (at the same depth),", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_name_s, context.set.notable);
-    fl_print_format(" the %[%r%s%] parameter value will be treated as a position relative to the specified", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_at_s, context.set.notable);
-    fl_print_format(" %[%r%s%] parameter value.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_name_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  When both %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_at_s, context.set.notable);
+    fl_print_format(" and %[%r%r%] parameters are specified (at the same depth),", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_name_s, context.set.notable);
+    fl_print_format(" the %[%r%r%] parameter value will be treated as a position relative to the specified", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_at_s, context.set.notable);
+    fl_print_format(" %[%r%r%] parameter value.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_name_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  This program may support parameters, such as %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_depth_s, context.set.notable);
-    fl_print_format(" or %[%r%s%], even if not supported by the standard.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_select_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  This program may support parameters, such as %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_depth_s, context.set.notable);
+    fl_print_format(" or %[%r%r%], even if not supported by the standard.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_select_s, context.set.notable, f_string_eol_s);
     fl_print_format("  This is done to help ensure consistency for scripting.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  For parameters like %[%r%s%],", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_depth_s, context.set.notable);
+    fl_print_format("  For parameters like %[%r%r%],", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_depth_s, context.set.notable);
     fl_print_format(" if the standard doesn't support nested Content, then only a depth of 0 would be valid.%r", file.stream, f_string_eol_s);
 
-    fl_print_format("  For parameters like %[%r%s%],", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_select_s, context.set.notable);
+    fl_print_format("  For parameters like %[%r%r%],", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_select_s, context.set.notable);
     fl_print_format(" if the standard doesn't support multiple Content groups, then only a select of 0 would be valid.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameter %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_trim_s, context.set.notable);
+    fl_print_format("  The parameter %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_trim_s, context.set.notable);
     fl_print_format(" will remove leading and trailing whitespaces when selecting objects or when printing objects.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  When specifying both the %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_object_s, context.set.notable);
-    fl_print_format(" parameter and the %[%r%s%] parameter, the entire Object and Content are printed, including the formatting.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_content_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  When specifying both the %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_object_s, context.set.notable);
+    fl_print_format(" parameter and the %[%r%r%] parameter, the entire Object and Content are printed, including the formatting.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_content_s, context.set.notable, f_string_eol_s);
     fl_print_format("  Both the Object and Content printed are already escaped.%r", file.stream, f_string_eol_s);
     fl_print_format("  Both the Object and Content are separated by an EOL.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameter %[%r%s%] accepts the following:%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_delimit_s, context.set.notable, f_string_eol_s);
-    fl_print_format("  - %[%s%]: Do not apply delimits.%r", file.stream, context.set.notable, fss_payload_read_delimit_mode_name_none_s, context.set.notable, f_string_eol_s);
-    fl_print_format("  - %[%s%]: (default) Apply all delimits.%r", file.stream, context.set.notable, fss_payload_read_delimit_mode_name_all_s, context.set.notable, f_string_eol_s);
-    fl_print_format("  - %[%s%]: Apply delimits for Objects.%r", file.stream, context.set.notable, fss_payload_read_delimit_mode_name_object_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  The parameter %[%r%r%] accepts the following:%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_delimit_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  - %[%r%]: Do not apply delimits.%r", file.stream, context.set.notable, fss_payload_read_delimit_mode_name_none_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  - %[%r%]: (default) Apply all delimits.%r", file.stream, context.set.notable, fss_payload_read_delimit_mode_name_all_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  - %[%r%]: Apply delimits for Objects.%r", file.stream, context.set.notable, fss_payload_read_delimit_mode_name_object_s, context.set.notable, f_string_eol_s);
     fl_print_format("  - A number, 0 or greater: apply delimits for Content at the specified depth.%r", file.stream, f_string_eol_s);
-    fl_print_format("  - A number, 0 or greater, followed by a %[%s%]: (such as '1+') apply delimits for Content at the specified depth and any greater depth (numerically).%r", file.stream, context.set.notable, fss_payload_read_delimit_mode_name_greater_s, context.set.notable, f_string_eol_s, f_string_eol_s);
-    fl_print_format("  - A number, 0 or lesser, followed by a %[%s%]: (such as '1-') apply delimits for Content at the specified depth and any lesser depth (numerically).%r%r", file.stream, context.set.notable, fss_payload_read_delimit_mode_name_lesser_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  - A number, 0 or greater, followed by a %[%r%]: (such as '1+') apply delimits for Content at the specified depth and any greater depth (numerically).%r", file.stream, context.set.notable, fss_payload_read_delimit_mode_name_greater_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  - A number, 0 or lesser, followed by a %[%r%]: (such as '1-') apply delimits for Content at the specified depth and any lesser depth (numerically).%r%r", file.stream, context.set.notable, fss_payload_read_delimit_mode_name_lesser_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The %[%r%s%] parameter may be specified multiple times to customize the delimit behavior.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_delimit_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  The %[%r%r%] parameter may be specified multiple times to customize the delimit behavior.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_delimit_s, context.set.notable, f_string_eol_s);
 
-    fl_print_format("  The %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_delimit_s, context.set.notable);
-    fl_print_format(" values %[%s%]", file.stream, context.set.notable, fss_payload_read_delimit_mode_name_none_s, context.set.notable);
-    fl_print_format(" and %[%s%],", file.stream, context.set.notable, fss_payload_read_delimit_mode_name_all_s, context.set.notable);
+    fl_print_format("  The %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_delimit_s, context.set.notable);
+    fl_print_format(" values %[%r%]", file.stream, context.set.notable, fss_payload_read_delimit_mode_name_none_s, context.set.notable);
+    fl_print_format(" and %[%r%],", file.stream, context.set.notable, fss_payload_read_delimit_mode_name_all_s, context.set.notable);
     fl_print_format(" overrule all other delimit values.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The parameters %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_columns_s, context.set.notable);
-    fl_print_format(" and %[%r%s%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_select_s, context.set.notable);
+    fl_print_format("  The parameters %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_columns_s, context.set.notable);
+    fl_print_format(" and %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_select_s, context.set.notable);
     fl_print_format(" refer to a Content column.%r", file.stream, f_string_eol_s);
     fl_print_format("  The word \"column\" is being loosely defined to refer to a specific Content.%r", file.stream, f_string_eol_s);
     fl_print_format("  This is not to be confused with a depth.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  As an exceptional case, a %[%r%s%] of", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_depth_s, context.set.notable);
+    fl_print_format("  As an exceptional case, a %[%r%r%] of", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_depth_s, context.set.notable);
     fl_print_format(" %[1%] applies only to the explicit Object of", file.stream, context.set.notable, context.set.notable);
     fl_print_format(" '%[%r%]'.%r", file.stream, context.set.notable, f_fss_string_header_s, context.set.notable, f_string_eol_s);
     fl_print_format("  Content at this depth is processed as FSS-0001 Extended.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
@@ -128,7 +128,7 @@ extern "C" {
     fl_print_format("  The Content of the explicit Object of", file.stream);
     fl_print_format(" '%[%r%]'", file.stream, context.set.notable, f_fss_string_payload_s, context.set.notable, f_string_eol_s);
     fl_print_format(" will not contain any Content close pipe control codes when using", file.stream);
-    fl_print_format(" %[%r%s%].%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_pipe_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format(" %[%r%r%].%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_pipe_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
     funlockfile(file.stream);
 
@@ -623,14 +623,7 @@ extern "C" {
           }
 
           if (size_file) {
-            status = f_string_dynamic_resize(data.buffer.size + size_file, &data.buffer);
-
-            if (F_status_is_error(status)) {
-              fll_error_file_print(main->error, F_status_set_fine(status), "f_string_dynamic_resize", F_true, arguments->argv[main->parameters.remaining.array[i]], f_file_operation_read_s, fll_error_file_type_file_e);
-
-              break;
-            }
-
+            file.size_read = size_file + 1;
 
             // This standard is newline sensitive, when appending files to the buffer if the file lacks a final newline then this could break the format for files appended thereafter.
             // Guarantee that a newline exists at the end of the buffer.
index badfb20175add41c0323aaa8a0bff8253ab5bbc8..8e3ea3e991f627926b1fcbd33f0b44106e03b097 100644 (file)
@@ -20,8 +20,8 @@ extern "C" {
  *   - small: An allocation step used for buffers that are anticipated to have small buffers.
  */
 #ifndef _di_fss_payload_read_common_
-  #define fss_payload_common_allocation_large_d 256
-  #define fss_payload_read_common_allocation_small_d 16
+  #define fss_payload_read_common_allocation_large_d 2048
+  #define fss_payload_read_common_allocation_small_d 128
 #endif // _di_fss_payload_read_common_
 
 /**
@@ -86,18 +86,18 @@ extern "C" {
 /**
  * A structure for designating where within the buffer a particular file exists, using a statically allocated array.
  *
- * name:  The name of the file representing the range. Set string to NULL to represent the STDIN pipe.
+ * name:  The name of the file representing the range.
  * range: A range within the buffer representing the file.
  */
 #ifndef _di_fss_payload_read_file_t_
   typedef struct {
-    f_string_t name;
+    f_string_static_t name;
     f_string_range_t range;
   } fss_payload_read_file_t;
 
   #define fss_payload_read_file_t_initialize \
     { \
-      f_string_t_initialize, \
+      f_string_static_t_initialize, \
       f_string_range_t_initialize, \
     }
 #endif // _di_fss_payload_read_file_t_
index 66b5af0b0422977d68879e3437bb30224e3404ed..5e1ee2a5ecc5a312e977bc981506fb75c4c61f61 100644 (file)
@@ -68,24 +68,24 @@ extern "C" {
       if (data->option & fss_payload_read_data_option_object_d) {
         if (data->option & fss_payload_read_data_option_trim_d) {
           if ((data->option & fss_payload_read_data_option_raw_d) && data->quotes_object_header.array[at]) {
-            f_print_character_safely(data->quotes_object_header.array[at] == f_fss_quote_type_single_e ? f_fss_quote_single_s.string[0] : f_fss_quote_double_s.string[0], main->output.to.stream);
+            f_print_dynamic_raw(data->quotes_object_header.array[at] == f_fss_quote_type_single_e ? f_fss_quote_single_s : f_fss_quote_double_s, main->output.to.stream);
           }
 
           fl_print_trim_except_dynamic_partial(data->buffer, data->objects_header.array[at], delimits_object, main->output.to.stream);
 
           if ((data->option & fss_payload_read_data_option_raw_d) && data->quotes_object_header.array[at]) {
-            f_print_character_safely(data->quotes_object_header.array[at] == f_fss_quote_type_single_e ? f_fss_quote_single_s.string[0] : f_fss_quote_double_s.string[0], main->output.to.stream);
+            f_print_dynamic_raw(data->quotes_object_header.array[at] == f_fss_quote_type_single_e ? f_fss_quote_single_s : f_fss_quote_double_s, main->output.to.stream);
           }
         }
         else {
           if ((data->option & fss_payload_read_data_option_raw_d) && data->quotes_object_header.array[at]) {
-            f_print_character_safely(data->quotes_object_header.array[at] == f_fss_quote_type_single_e ? f_fss_quote_single_s.string[0] : f_fss_quote_double_s.string[0], main->output.to.stream);
+            f_print_dynamic_raw(data->quotes_object_header.array[at] == f_fss_quote_type_single_e ? f_fss_quote_single_s : f_fss_quote_double_s, main->output.to.stream);
           }
 
           f_print_except_dynamic_partial(data->buffer, data->objects_header.array[at], delimits_object, main->output.to.stream);
 
           if ((data->option & fss_payload_read_data_option_raw_d) && data->quotes_object_header.array[at]) {
-            f_print_character_safely(data->quotes_object_header.array[at] == f_fss_quote_type_single_e ? f_fss_quote_single_s.string[0] : f_fss_quote_double_s.string[0], main->output.to.stream);
+            f_print_dynamic_raw(data->quotes_object_header.array[at] == f_fss_quote_type_single_e ? f_fss_quote_single_s : f_fss_quote_double_s, main->output.to.stream);
           }
         }
 
@@ -102,13 +102,13 @@ extern "C" {
             content_printed = F_true;
 
             if ((data->option & fss_payload_read_data_option_raw_d) && data->quotes_content_header.array[at].array[data->select]) {
-              f_print_character_safely(data->quotes_content_header.array[at].array[data->select] == f_fss_quote_type_single_e ? f_fss_quote_single_s.string[0] : f_fss_quote_double_s.string[0], main->output.to.stream);
+              f_print_dynamic_raw(data->quotes_content_header.array[at].array[data->select] == f_fss_quote_type_single_e ? f_fss_quote_single_s : f_fss_quote_double_s, main->output.to.stream);
             }
 
             f_print_except_dynamic_partial(data->buffer, data->contents_header.array[at].array[data->select], delimits_content, main->output.to.stream);
 
             if ((data->option & fss_payload_read_data_option_raw_d) && data->quotes_content_header.array[at].array[data->select]) {
-              f_print_character_safely(data->quotes_content_header.array[at].array[data->select] == f_fss_quote_type_single_e ? f_fss_quote_single_s.string[0] : f_fss_quote_double_s.string[0], main->output.to.stream);
+              f_print_dynamic_raw(data->quotes_content_header.array[at].array[data->select] == f_fss_quote_type_single_e ? f_fss_quote_single_s : f_fss_quote_double_s, main->output.to.stream);
             }
           }
         }
@@ -122,13 +122,13 @@ extern "C" {
             content_printed = F_true;
 
             if ((data->option & fss_payload_read_data_option_raw_d) && data->quotes_content_header.array[at].array[i]) {
-              f_print_character_safely(data->quotes_content_header.array[at].array[i] == f_fss_quote_type_single_e ? f_fss_quote_single_s.string[0] : f_fss_quote_double_s.string[0], main->output.to.stream);
+              f_print_dynamic_raw(data->quotes_content_header.array[at].array[i] == f_fss_quote_type_single_e ? f_fss_quote_single_s : f_fss_quote_double_s, main->output.to.stream);
             }
 
             f_print_except_dynamic_partial(data->buffer, data->contents_header.array[at].array[i], delimits_content, main->output.to.stream);
 
             if ((data->option & fss_payload_read_data_option_raw_d) && data->quotes_content_header.array[at].array[i]) {
-              f_print_character_safely(data->quotes_content_header.array[at].array[i] == f_fss_quote_type_single_e ? f_fss_quote_single_s.string[0] : f_fss_quote_double_s.string[0], main->output.to.stream);
+              f_print_dynamic_raw(data->quotes_content_header.array[at].array[i] == f_fss_quote_type_single_e ? f_fss_quote_single_s : f_fss_quote_double_s, main->output.to.stream);
             }
 
             if (i + 1 < data->contents_header.array[at].used && data->contents_header.array[at].array[i + 1].start <= data->contents_header.array[at].array[i + 1].stop) {
@@ -223,7 +223,7 @@ extern "C" {
   void fss_payload_read_print_content_end_extended(fll_program_data_t * const main) {
 
     if (main->parameters.array[fss_payload_read_parameter_pipe_e].result == f_console_result_found_e) {
-      f_print_character(fss_payload_read_pipe_content_start_s, main->output.to.stream);
+      f_print_dynamic_raw(fss_payload_read_pipe_content_start_s, main->output.to.stream);
     }
     else {
       f_print_dynamic_raw(f_fss_space_s, main->output.to.stream);
@@ -235,7 +235,7 @@ extern "C" {
   void fss_payload_read_print_content_ignore(fll_program_data_t * const main) {
 
     if (main->parameters.array[fss_payload_read_parameter_pipe_e].result == f_console_result_found_e) {
-      f_print_character(fss_payload_read_pipe_content_ignore_s, main->output.to.stream);
+      f_print_dynamic_raw(fss_payload_read_pipe_content_ignore_s, main->output.to.stream);
     }
   }
 #endif // _di_fss_payload_read_print_content_ignore_
@@ -244,7 +244,7 @@ extern "C" {
   void fss_payload_read_print_object_end(fll_program_data_t * const main) {
 
     if (main->parameters.array[fss_payload_read_parameter_pipe_e].result == f_console_result_found_e) {
-      f_print_character(fss_payload_read_pipe_content_start_s, main->output.to.stream);
+      f_print_dynamic_raw(fss_payload_read_pipe_content_start_s, main->output.to.stream);
     }
     else {
       if (main->parameters.array[fss_payload_read_parameter_content_e].result == f_console_result_found_e) {
@@ -262,7 +262,7 @@ extern "C" {
   void fss_payload_read_print_object_end_extended(fll_program_data_t * const main) {
 
     if (main->parameters.array[fss_payload_read_parameter_pipe_e].result == f_console_result_found_e) {
-      f_print_character(fss_payload_read_pipe_content_end_s, main->output.to.stream);
+      f_print_dynamic_raw(fss_payload_read_pipe_content_end_s, main->output.to.stream);
     }
     else {
       f_print_dynamic_raw(f_fss_space_s, main->output.to.stream);
@@ -274,7 +274,7 @@ extern "C" {
   void fss_payload_read_print_set_end(fll_program_data_t * const main) {
 
     if (main->parameters.array[fss_payload_read_parameter_pipe_e].result == f_console_result_found_e) {
-      f_print_character(fss_payload_read_pipe_content_end_s, main->output.to.stream);
+      f_print_dynamic_raw(fss_payload_read_pipe_content_end_s, main->output.to.stream);
     }
   }
 #endif // _di_fss_payload_read_print_set_end_
@@ -283,7 +283,7 @@ extern "C" {
   void fss_payload_read_print_set_end_extended(fll_program_data_t * const main) {
 
     if (main->parameters.array[fss_payload_read_parameter_pipe_e].result == f_console_result_found_e) {
-      f_print_character(fss_payload_read_pipe_content_end_s, main->output.to.stream);
+      f_print_dynamic_raw(fss_payload_read_pipe_content_end_s, main->output.to.stream);
     }
     else {
       f_print_dynamic_raw(f_fss_eol_s, main->output.to.stream);
index af307aee8baa06fecad16beffdd90c4152f845ce..2506fd7651d053494bf13a526caa8dfab407b81b 100644 (file)
@@ -225,7 +225,7 @@ extern "C" {
 #endif // _di_fss_payload_read_depth_process_
 
 #ifndef _di_fss_payload_read_file_identify_
-  f_string_t fss_payload_read_file_identify(const f_array_length_t at, const fss_payload_read_files_t files) {
+  f_string_static_t fss_payload_read_file_identify(const f_array_length_t at, const fss_payload_read_files_t files) {
 
     for (f_array_length_t i = 0; i < files.used; ++i) {
 
@@ -239,14 +239,14 @@ extern "C" {
       return files.array[files.used - 1].name;
     }
 
-    return "";
+    return f_string_empty_s;
   }
 #endif // _di_fss_payload_read_file_identify_
 
 #ifndef _di_fss_payload_read_load_
   f_status_t fss_payload_read_load(fll_program_data_t * const main, fss_payload_read_data_t *data) {
 
-    f_state_t state = macro_f_state_t_initialize(fss_payload_common_allocation_large_d, fss_payload_read_common_allocation_small_d, 0, 0, 0, 0, 0);
+    f_state_t state = macro_f_state_t_initialize(fss_payload_read_common_allocation_large_d, fss_payload_read_common_allocation_small_d, 0, 0, 0, 0, 0);
     f_string_range_t input = macro_f_string_range_t_initialize(data->buffer.used);
 
     data->delimits_object.used = 0;
index 302bc1ef077db9276a1d9bb77f2f8eef4e694510..8b88fa656b386128c95850aa632a5ceb4a1724e0 100644 (file)
@@ -53,10 +53,10 @@ extern "C" {
     fl_print_format(" or a Form Feed character '%[\\f%]' (%[U+000C%]).%r", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s);
     fl_print_format("  The end of the pipe represents the end of any Object or Content.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  The FSS-000E (Payload) specification does not support quoted names, therefore the parameters '%[%r%s%]'", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_write_long_single_s, context.set.notable);
-    fl_print_format(" and '%[%r%s%]' do nothing.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_write_long_double_s, context.set.notable, f_string_eol_s, f_string_eol_s);
+    fl_print_format("  The FSS-000E (Payload) specification does not support quoted names, therefore the parameters '%[%r%r%]'", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_write_long_single_s, context.set.notable);
+    fl_print_format(" and '%[%r%r%]' do nothing.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_write_long_double_s, context.set.notable, f_string_eol_s, f_string_eol_s);
 
-    fl_print_format("  This program does not use the parameter '%[%r%s%]', which therefore does nothing.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_write_long_ignore_s, context.set.notable, f_string_eol_s);
+    fl_print_format("  This program does not use the parameter '%[%r%r%]', which therefore does nothing.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_write_long_ignore_s, context.set.notable, f_string_eol_s);
     fl_print_format("  This parameter requires two values.%r%r", file.stream, f_string_eol_s, f_string_eol_s);
 
     funlockfile(file.stream);
index a612a4016c7fbd0eaeb2401c5ecc93d952a0c35d..b5cfa64c91cc0cfdc7b1b04815cf801679473e90 100644 (file)
@@ -20,8 +20,8 @@ extern "C" {
  *   - small: An allocation step used for buffers that are anticipated to have small buffers.
  */
 #ifndef _di_fss_payload_write_common_
-  #define fss_payload_write_common_allocation_large_d 256
-  #define fss_payload_write_common_allocation_small_d 16
+  #define fss_payload_write_common_allocation_large_d 2048
+  #define fss_payload_write_common_allocation_small_d 128
 #endif // _di_fss_payload_write_common_
 
 /**
index 39ba5a20ae5298b785385c7a7eab50b3b655a3ab..6b861322ef97fe4322a51bda12c438ad34889c26 100644 (file)
@@ -437,7 +437,6 @@ extern "C" {
 
       if (F_status_is_fine(status) && main->parameters.remaining.used > 0) {
         uint16_t signal_check = 0;
-        f_array_length_t total = 0;
         f_file_t file = f_file_t_initialize;
 
         for (f_array_length_t i = 0; i < main->parameters.remaining.used; ++i) {
@@ -453,7 +452,7 @@ extern "C" {
           }
 
           macro_f_file_t_reset(file);
-          total = 0;
+          file.size_read = 0;
 
           status = f_file_open(argv[main->parameters.remaining.array[i]], 0, &file);
 
@@ -463,7 +462,7 @@ extern "C" {
             break;
           }
 
-          status = f_file_size_by_id(file.id, &total);
+          status = f_file_size_by_id(file.id, &file.size_read);
 
           if (F_status_is_error(status)) {
             fll_error_file_print(main->error, F_status_set_fine(status), "f_file_size_by_id", F_true, argv[main->parameters.remaining.array[i]], f_file_operation_process_s, fll_error_file_type_file_e);
@@ -474,18 +473,20 @@ extern "C" {
           }
 
           // Skip past empty files.
-          if (!total) {
+          if (!file.size_read) {
             f_file_stream_close(F_true, &file);
 
             continue;
           }
 
-          status = f_file_read_until(file, total, &main->buffer);
+          ++file.size_read;
+
+          status = f_file_read(file, &main->buffer);
 
           f_file_stream_close(F_true, &file);
 
           if (F_status_is_error(status)) {
-            fll_error_file_print(main->error, F_status_set_fine(status), "f_file_read_until", F_true, argv[main->parameters.remaining.array[i]], f_file_operation_process_s, fll_error_file_type_file_e);
+            fll_error_file_print(main->error, F_status_set_fine(status), "f_file_read", F_true, argv[main->parameters.remaining.array[i]], f_file_operation_process_s, fll_error_file_type_file_e);
 
             break;
           }