]> Kevux Git Server - fll/commitdiff
Bugfix: The FSS Payload Read is not treating the Payload as raw when printing.
authorKevin Day <Kevin@kevux.org>
Sat, 12 Oct 2024 03:28:04 +0000 (22:28 -0500)
committerKevin Day <Kevin@kevux.org>
Sat, 12 Oct 2024 03:28:04 +0000 (22:28 -0500)
Special handling is needed to process the `payload` section.
The content functions all need to have the `at` position to determine this.
Update the callbacks to allow for this.

The function `fss_read_print_content_empty()` is defined and used but it is used only for the `print_object_end_empty()` callback.
Add a `print_content_empty()` callback to provide this.

These changes allow for removing redundant functions.

23 files changed:
level_3/fss_read/c/basic/main.c
level_3/fss_read/c/basic/print.c
level_3/fss_read/c/basic/print.h
level_3/fss_read/c/basic_list/main.c
level_3/fss_read/c/basic_list/print.c
level_3/fss_read/c/basic_list/print.h
level_3/fss_read/c/embedded_list/main.c
level_3/fss_read/c/embedded_list/print.c
level_3/fss_read/c/embedded_list/print.h
level_3/fss_read/c/extended/main.c
level_3/fss_read/c/extended/print.c
level_3/fss_read/c/extended/print.h
level_3/fss_read/c/extended_list/main.c
level_3/fss_read/c/extended_list/print.c
level_3/fss_read/c/extended_list/print.h
level_3/fss_read/c/main/common/type.h
level_3/fss_read/c/main/main.c
level_3/fss_read/c/main/print/data.c
level_3/fss_read/c/main/print/data.h
level_3/fss_read/c/main/process_normal.c
level_3/fss_read/c/payload/main.c
level_3/fss_read/c/payload/print.c
level_3/fss_read/c/payload/print.h

index fa41f1dde2d8a517d8aabee69a103e48b6c91be7..0aaa8db6ab4f36d4e9ad2b96ccbce44d337a4694 100644 (file)
@@ -37,11 +37,12 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
 
   data.callback.print_at = &fss_read_print_at;
   data.callback.print_content = &fss_read_print_content;
+  data.callback.print_content_empty = &fss_read_print_content_empty;
   data.callback.print_content_ignore = 0;
   data.callback.print_content_next = 0;
   data.callback.print_object = &fss_read_print_object;
   data.callback.print_object_end = &fss_read_basic_print_object_end;
-  data.callback.print_object_end_content = &fss_read_basic_print_object_end_content;
+  data.callback.print_object_end_content = &fss_read_print_object_end_content;
   data.callback.print_object_end_empty = &fss_read_print_content_empty;
   data.callback.print_set_end = &fss_read_print_set_end;
 
index f7dfd2054c6ba0d5144a93f1ff7a763e3a1b99af..b452f826cd0bceb56e407c92ad1e5163dfa40bb8 100644 (file)
@@ -22,18 +22,6 @@ extern "C" {
   }
 #endif // _di_fss_read_basic_print_object_end_
 
-#ifndef _di_fss_read_basic_print_object_end_content_
-  f_status_t fss_read_basic_print_object_end_content(fl_print_t * const print, const f_range_t range, const uint8_t quote, const f_number_unsigneds_t delimits) {
-
-    {
-      const f_status_t status = fss_read_basic_print_object_end(print);
-      if (F_status_is_error(status) || status == F_output_not) return status;
-    }
-
-    return fss_read_print_content(print, range, quote, delimits);
-  }
-#endif // _di_fss_read_basic_print_object_end_content_
-
 #ifndef _di_fss_read_basic_print_message_help_
   f_status_t fss_read_basic_print_message_help(fl_print_t * const print) {
 
index 8e6b0957490f0db34e23dd8cd952015b1159443b..de7238785e45eb3cc8d9ba5d4896e35c5e846728 100644 (file)
@@ -35,37 +35,6 @@ extern "C" {
 #endif // _di_fss_read_basic_print_object_end_
 
 /**
- * Print the end of an Object (which is often the start of Content) and the Content.
- *
- * This locks, uses, and unlocks the file stream.
- *
- * This processes single Content range.
- * This does not print a new line after the Content.
- *
- * @param print
- *   The output structure to print to.
- *
- *   The print.custom is expected to be of type fss_read_main_t.
- *
- *   This does not alter print.custom.setting.state.status.
- * @param range
- *   The range within the buffer representing the Content to print.
- * @param quote
- *   The quote type representing the character to use (from the f_fss_quote_type_*_e).
- * @param delimits
- *   The delimits array representing a delimited Content.
- *
- * @return
- *   F_okay on success.
- *   F_output_not on success, but no printing is performed.
- *
- *   F_output_not (with error bit) if a parameter is NULL.
- */
-#ifndef _di_fss_read_basic_print_object_end_content_
-  extern f_status_t fss_read_basic_print_object_end_content(fl_print_t * const print, const f_range_t range, const uint8_t quote, const f_number_unsigneds_t delimits);
-#endif // _di_fss_read_basic_print_object_end_content_
-
-/**
  * Print help for FSS-0000 (Basic).
  *
  * @param print
index 9b0024348c1445296dd87b906f4173e0374d8bf2..6b85e52217e654ea6dd04b8641f3ef70a0f86ee2 100644 (file)
@@ -41,8 +41,8 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
   data.callback.print_content_next = 0;
   data.callback.print_object = &fss_read_print_object;
   data.callback.print_object_end = &fss_read_basic_list_print_object_end;
-  data.callback.print_object_end_content = &fss_read_basic_list_print_object_end_content;
-  data.callback.print_object_end_empty = &fss_read_basic_list_print_object_end_empty;
+  data.callback.print_object_end_content = &fss_read_print_object_end_content;
+  data.callback.print_object_end_empty = &fss_read_print_object_end_empty;
   data.callback.print_set_end = &fss_read_print_set_end_no_eol;
 
   f_console_parameter_t parameters[] = fss_read_console_parameter_t_initialize;
index 8ee1d002a91d1e7d8e05ffde466f1338179c1e69..4dae7c675e71a6f41c8b55af68dd6b2de5c9f289 100644 (file)
@@ -30,33 +30,6 @@ extern "C" {
   }
 #endif // _di_fss_read_basic_list_print_object_end_
 
-#ifndef _di_fss_read_basic_list_print_object_end_content_
-  f_status_t fss_read_basic_list_print_object_end_content(fl_print_t * const print, const f_range_t range, const uint8_t quote, const f_number_unsigneds_t delimits) {
-
-    {
-      const f_status_t status = fss_read_basic_list_print_object_end(print);
-      if (F_status_is_error(status) || status == F_output_not) return status;
-    }
-
-    return fss_read_print_content(print, range, quote, delimits);
-  }
-#endif // _di_fss_read_basic_list_print_object_end_content_
-
-#ifndef _di_fss_read_basic_list_print_object_end_empty_
-  f_status_t fss_read_basic_list_print_object_end_empty(fl_print_t * const print) {
-
-    if (!print) return F_status_set_error(F_output_not);
-
-    const f_status_t status_1 = fss_read_basic_list_print_object_end(print);
-    const f_status_t status_2 = fss_read_print_content_empty(print);
-
-    if (F_status_is_error(status_1)) return status_1;
-    if (F_status_is_error(status_2)) return status_2;
-
-    return (status_1 == F_okay || status_2 == F_okay) ? F_okay: F_output_not;
-  }
-#endif // _di_fss_read_basic_list_print_object_end_empty_
-
 #ifndef _di_fss_read_basic_list_print_message_help_
   f_status_t fss_read_basic_list_print_message_help(fl_print_t * const print) {
 
index 62324200bddb98e4e5a4e92d1bcf5310e5fcefde..d54b304cfffdfbe8a6110328dc393844f1792360 100644 (file)
@@ -35,61 +35,6 @@ extern "C" {
 #endif // _di_fss_read_basic_list_print_object_end_
 
 /**
- * Print the end of an Object (which is often the start of Content) and the Content.
- *
- * This locks, uses, and unlocks the file stream.
- *
- * This processes single Content range.
- * This does not print a new line after the Content.
- *
- * @param print
- *   The output structure to print to.
- *
- *   The print.custom is expected to be of type fss_read_main_t.
- *
- *   This does not alter print.custom.setting.state.status.
- * @param range
- *   The range within the buffer representing the Content to print.
- * @param quote
- *   The quote type representing the character to use (from the f_fss_quote_type_*_e).
- * @param delimits
- *   The delimits array representing a delimited Content.
- *
- * @return
- *   F_okay on success.
- *   F_output_not on success, but no printing is performed.
- *
- *   F_output_not (with error bit) if a parameter is NULL.
- */
-#ifndef _di_fss_read_basic_list_print_object_end_content_
-  extern f_status_t fss_read_basic_list_print_object_end_content(fl_print_t * const print, const f_range_t range, const uint8_t quote, const f_number_unsigneds_t delimits);
-#endif // _di_fss_read_basic_list_print_object_end_content_
-
-/**
- * Print the end of an Object (which is often the start of Content) and the end of the Content when no Content.
- *
- * This locks, uses, and unlocks the file stream.
- *
- * @param print
- *   The output structure to print to.
- *
- *   The print.custom is expected to be of type fss_read_main_t.
- *
- *   This does not alter print.custom.setting.state.status.
- *
- * @return
- *   F_okay on success.
- *   F_output_not on success, but no printing is performed.
- *
- *   F_output_not (with error bit) if a parameter is NULL.
- *
- * @see fss_read_print_content_empty()
- */
-#ifndef _di_fss_read_basic_list_print_object_end_empty_
-  extern f_status_t fss_read_basic_list_print_object_end_empty(fl_print_t * const print);
-#endif // _di_fss_read_basic_list_print_object_end_empty_
-
-/**
  * Print help for FSS-0002 (Basic List).
  *
  * @param print
index aa8dabe722b08aa1db22de3426ee20bcecc486f2..7855085f3de32a4d6155df862a9c2df158460f87 100644 (file)
@@ -42,8 +42,8 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
   data.callback.print_content_next = 0;
   data.callback.print_object = &fss_read_print_object;
   data.callback.print_object_end = &fss_read_embedded_list_print_object_end;
-  data.callback.print_object_end_content = &fss_read_embedded_list_print_object_end_content;
-  data.callback.print_object_end_empty = &fss_read_embedded_list_print_object_end_empty;
+  data.callback.print_object_end_content = &fss_read_print_object_end_content;
+  data.callback.print_object_end_empty = &fss_read_print_object_end_empty;
   data.callback.print_set_end = &fss_read_embedded_list_print_set_end;
 
   f_console_parameter_t parameters[] = fss_read_console_parameter_t_initialize;
index cec5896425899d5b176d085e6da42cb7f56568ed..442a30c13e50ed174168734a29d3defd65e7bac5 100644 (file)
@@ -30,33 +30,6 @@ extern "C" {
   }
 #endif // _di_fss_read_embedded_list_print_object_end_
 
-#ifndef _di_fss_read_embedded_list_print_object_end_content_
-  f_status_t fss_read_embedded_list_print_object_end_content(fl_print_t * const print, const f_range_t range, const uint8_t quote, const f_number_unsigneds_t delimits) {
-
-    {
-      const f_status_t status = fss_read_embedded_list_print_object_end(print);
-      if (F_status_is_error(status) || status == F_output_not) return status;
-    }
-
-    return fss_read_print_content(print, range, quote, delimits);
-  }
-#endif // _di_fss_read_embedded_list_print_object_end_content_
-
-#ifndef _di_fss_read_embedded_list_print_object_end_empty_
-  f_status_t fss_read_embedded_list_print_object_end_empty(fl_print_t * const print) {
-
-    if (!print) return F_status_set_error(F_output_not);
-
-    const f_status_t status_1 = fss_read_embedded_list_print_object_end(print);
-    const f_status_t status_2 = fss_read_print_content_empty(print);
-
-    if (F_status_is_error(status_1)) return status_1;
-    if (F_status_is_error(status_2)) return status_2;
-
-    return (status_1 == F_okay || status_2 == F_okay) ? F_okay: F_output_not;
-  }
-#endif // _di_fss_read_embedded_list_print_object_end_empty_
-
 #ifndef _di_fss_read_embedded_list_print_set_end_
   f_status_t fss_read_embedded_list_print_set_end(fl_print_t * const print, const f_number_unsigned_t close) {
 
index 8b5a415f054c1391fe6f0384b01da1d66c1d8171..6e7b4bf891335352a560b66442459e0e7807cbf1 100644 (file)
@@ -35,61 +35,6 @@ extern "C" {
 #endif // _di_fss_read_embedded_list_print_object_end_
 
 /**
- * Print the end of an Object (which is often the start of Content) and the Content.
- *
- * This locks, uses, and unlocks the file stream.
- *
- * This processes single Content range.
- * This does not print a new line after the Content.
- *
- * @param print
- *   The output structure to print to.
- *
- *   The print.custom is expected to be of type fss_read_main_t.
- *
- *   This does not alter print.custom.setting.state.status.
- * @param range
- *   The range within the buffer representing the Content to print.
- * @param quote
- *   The quote type representing the character to use (from the f_fss_quote_type_*_e).
- * @param delimits
- *   The delimits array representing a delimited Content.
- *
- * @return
- *   F_okay on success.
- *   F_output_not on success, but no printing is performed.
- *
- *   F_output_not (with error bit) if a parameter is NULL.
- */
-#ifndef _di_fss_read_embedded_list_print_object_end_content_
-  extern f_status_t fss_read_embedded_list_print_object_end_content(fl_print_t * const print, const f_range_t range, const uint8_t quote, const f_number_unsigneds_t delimits);
-#endif // _di_fss_read_embedded_list_print_object_end_content_
-
-/**
- * Print the end of an Object (which is often the start of Content) and the end of the Content when no Content.
- *
- * This locks, uses, and unlocks the file stream.
- *
- * @param print
- *   The output structure to print to.
- *
- *   The print.custom is expected to be of type fss_read_main_t.
- *
- *   This does not alter print.custom.setting.state.status.
- *
- * @return
- *   F_okay on success.
- *   F_output_not on success, but no printing is performed.
- *
- *   F_output_not (with error bit) if a parameter is NULL.
- *
- * @see fss_read_print_content_empty()
- */
-#ifndef _di_fss_read_embedded_list_print_object_end_empty_
-  extern f_status_t fss_read_embedded_list_print_object_end_empty(fl_print_t * const print);
-#endif // _di_fss_read_embedded_list_print_object_end_empty_
-
-/**
  * Print the end of an Object/Content set.
  *
  * This locks, uses, and unlocks the file stream.
index 8b61dc1421f4e1303bb9f584e6ebbf0e04bd8148..325bdbce9e95784ed88f5b90a08f9a68be7b482b 100644 (file)
@@ -37,11 +37,12 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
 
   data.callback.print_at = &fss_read_print_at;
   data.callback.print_content = &fss_read_print_content;
+  data.callback.print_content_empty = &fss_read_print_content_empty;
   data.callback.print_content_ignore = &fss_read_print_content_ignore;
   data.callback.print_content_next = &fss_read_extended_print_content_next;
   data.callback.print_object = &fss_read_print_object;
   data.callback.print_object_end = &fss_read_extended_print_object_end;
-  data.callback.print_object_end_content = &fss_read_extended_print_object_end_content;
+  data.callback.print_object_end_content = &fss_read_print_object_end_content;
   data.callback.print_object_end_empty = &fss_read_print_content_empty;
   data.callback.print_set_end = &fss_read_print_set_end;
 
index 98d07307fa6638dca9d1bb73560e307ec5f4c38c..e1a50fb32b7cf53e6b3d50241c4fd962d58f413e 100644 (file)
@@ -40,18 +40,6 @@ extern "C" {
   }
 #endif // _di_fss_read_extended_print_object_end_
 
-#ifndef _di_fss_read_extended_print_object_end_content_
-  f_status_t fss_read_extended_print_object_end_content(fl_print_t * const print, const f_range_t range, const uint8_t quote, const f_number_unsigneds_t delimits) {
-
-    {
-      const f_status_t status = fss_read_extended_print_object_end(print);
-      if (F_status_is_error(status) || status == F_output_not) return status;
-    }
-
-    return fss_read_print_content(print, range, quote, delimits);
-  }
-#endif // _di_fss_read_extended_print_object_end_content_
-
 #ifndef _di_fss_read_extended_print_message_help_
   f_status_t fss_read_extended_print_message_help(fl_print_t * const print) {
 
index 5c02ffb8fe4d53e7fe3bc2c48d1730bbe9fe4089..cfd62ec7acc36c852650aca0a418e35bdf36399a 100644 (file)
@@ -59,37 +59,6 @@ extern "C" {
 #endif // _di_fss_read_extended_print_object_end_
 
 /**
- * Print the end of an Object (which is often the start of Content) and the Content.
- *
- * This locks, uses, and unlocks the file stream.
- *
- * This processes single Content range.
- * This does not print a new line after the Content.
- *
- * @param print
- *   The output structure to print to.
- *
- *   The print.custom is expected to be of type fss_read_main_t.
- *
- *   This does not alter print.custom.setting.state.status.
- * @param range
- *   The range within the buffer representing the Content to print.
- * @param quote
- *   The quote type representing the character to use (from the f_fss_quote_type_*_e).
- * @param delimits
- *   The delimits array representing a delimited Content.
- *
- * @return
- *   F_okay on success.
- *   F_output_not on success, but no printing is performed.
- *
- *   F_output_not (with error bit) if a parameter is NULL.
- */
-#ifndef _di_fss_read_extended_print_object_end_content_
-  extern f_status_t fss_read_extended_print_object_end_content(fl_print_t * const print, const f_range_t range, const uint8_t quote, const f_number_unsigneds_t delimits);
-#endif // _di_fss_read_extended_print_object_end_content_
-
-/**
  * Print help for FSS-0001 (Extended).
  *
  * @param print
index 25f335bde567ec1e830691a1b9ddb0fd63b35b33..aabf6abf8a6aaad6224a76cf5f74b8591117f476 100644 (file)
@@ -41,8 +41,8 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
   data.callback.print_content_next = 0;
   data.callback.print_object = &fss_read_print_object;
   data.callback.print_object_end = &fss_read_extended_list_print_object_end;
-  data.callback.print_object_end_content = &fss_read_extended_list_print_object_end_content;
-  data.callback.print_object_end_empty = &fss_read_extended_list_print_object_end_empty;
+  data.callback.print_object_end_content = &fss_read_print_object_end_content;
+  data.callback.print_object_end_empty = &fss_read_print_object_end_empty;
   data.callback.print_set_end = &fss_read_extended_list_print_set_end;
 
   f_console_parameter_t parameters[] = fss_read_console_parameter_t_initialize;
index eeaf18b407cbb5da88fc2780e28723562bd857c9..e18931f485d73c172ac5130c07e67b98ad9eb828 100644 (file)
@@ -30,33 +30,6 @@ extern "C" {
   }
 #endif // _di_fss_read_extended_list_print_object_end_
 
-#ifndef _di_fss_read_extended_list_print_object_end_empty_
-  f_status_t fss_read_extended_list_print_object_end_empty(fl_print_t * const print) {
-
-    if (!print) return F_status_set_error(F_output_not);
-
-    const f_status_t status_1 = fss_read_extended_list_print_object_end(print);
-    const f_status_t status_2 = fss_read_print_content_empty(print);
-
-    if (F_status_is_error(status_1)) return status_1;
-    if (F_status_is_error(status_2)) return status_2;
-
-    return (status_1 == F_okay || status_2 == F_okay) ? F_okay: F_output_not;
-  }
-#endif // _di_fss_read_extended_list_print_object_end_empty_
-
-#ifndef _di_fss_read_extended_list_print_object_end_content_
-  f_status_t fss_read_extended_list_print_object_end_content(fl_print_t * const print, const f_range_t range, const uint8_t quote, const f_number_unsigneds_t delimits) {
-
-    {
-      const f_status_t status = fss_read_extended_list_print_object_end(print);
-      if (F_status_is_error(status) || status == F_output_not) return status;
-    }
-
-    return fss_read_print_content(print, range, quote, delimits);
-  }
-#endif // _di_fss_read_extended_list_print_object_end_content_
-
 #ifndef _di_fss_read_extended_list_print_set_end_
   f_status_t fss_read_extended_list_print_set_end(fl_print_t * const print, const f_number_unsigned_t close) {
 
index 59d896c5d5f7765586f943627b08f6f91328b08d..86926dd783d65607265627cc08662b548c0aa5bc 100644 (file)
@@ -35,62 +35,6 @@ extern "C" {
 #endif // _di_fss_read_extended_list_print_object_end_
 
 /**
- * Print the end of an Object (which is often the start of Content) and the Content.
- *
- * This locks, uses, and unlocks the file stream.
- *
- * This processes single Content range.
- * This does not print a new line after the Content.
- *
- * @param print
- *   The output structure to print to.
- *
- *   The print.custom is expected to be of type fss_read_main_t.
- *
- *   This does not alter print.custom.setting.state.status.
- * @param range
- *   The range within the buffer representing the Content to print.
- * @param quote
- *   The quote type representing the character to use (from the f_fss_quote_type_*_e).
- * @param delimits
- *   The delimits array representing a delimited Content.
- *
- * @return
- *   F_okay on success.
- *   F_output_not on success, but no printing is performed.
- *
- *   F_output_not (with error bit) if a parameter is NULL.
- */
-#ifndef _di_fss_read_extended_list_print_object_end_content_
-  extern f_status_t fss_read_extended_list_print_object_end_content(fl_print_t * const print, const f_range_t range, const uint8_t quote, const f_number_unsigneds_t delimits);
-#endif // _di_fss_read_extended_list_print_object_end_content_
-
-/**
- * Print the end of an Object (which is often the start of Content) and the end of the Content when no Content.
- *
- * This locks, uses, and unlocks the file stream.
- *
- * @param print
- *   The output structure to print to.
- *
- *   The print.custom is expected to be of type fss_read_main_t.
- *
- *   This does not alter print.custom.setting.state.status.
- *
- * @return
- *   F_okay on success.
- *   F_output_not on success, but no printing is performed.
- *
- *   F_output_not (with error bit) if a parameter is NULL.
- *
- * @see fss_read_extended_list_print_object_end()
- * @see fss_read_print_content_empty()
- */
-#ifndef _di_fss_read_extended_list_print_object_end_empty_
-  extern f_status_t fss_read_extended_list_print_object_end_empty(fl_print_t * const print);
-#endif // _di_fss_read_extended_list_print_object_end_empty_
-
-/**
  * Print the end of an Object/Content set.
  *
  * This locks, uses, and unlocks the file stream.
index a654d746ba34ff57307be3208fd473a97788f5dc..005e7ca48c9bedd60f6f1d48803ca9a369b6d93d 100644 (file)
@@ -148,6 +148,7 @@ extern "C" {
  * print_at:                 Print at the given location, usually called by the process_normal() callback.
  * print_object:             Print the Object, usually called by the process_normal() callback.
  * print_content:            Print the Content, usually called by the process_normal() callback.
+ * print_content_empty:      Print when there is no Content, usually called by the process_normal() callback.
  * print_content_ignore:     Print the Content ignore character, usually called by several callbacks within the process_normal() callback for a pipe.
  * print_content_next:       Print the Content next (content separator), usually called by several callbacks within the process_normal() callback.
  * print_object_end:         Print the Object end, usually called by several callbacks within the process_normal() callback.
@@ -171,8 +172,9 @@ extern "C" {
 
     f_status_t (*print_at)(fl_print_t * const print, const f_number_unsigned_t at, const f_number_unsigneds_t delimits_object, const f_number_unsigneds_t delimits_content);
     f_status_t (*print_object)(fl_print_t * const print, const f_number_unsigned_t at, const f_number_unsigneds_t delimits);
-    f_status_t (*print_object_end_content)(fl_print_t * const print, const f_range_t range, const uint8_t quote, const f_number_unsigneds_t delimits);
-    f_status_t (*print_content)(fl_print_t * const print, const f_range_t range, const uint8_t quote, const f_number_unsigneds_t delimits);
+    f_status_t (*print_object_end_content)(fl_print_t * const print, const f_number_unsigned_t at, const f_range_t range, const uint8_t quote, const f_number_unsigneds_t delimits);
+    f_status_t (*print_content)(fl_print_t * const print, const f_number_unsigned_t at, const f_range_t range, const uint8_t quote, const f_number_unsigneds_t delimits);
+    f_status_t (*print_content_empty)(fl_print_t * const print);
     f_status_t (*print_content_ignore)(fl_print_t * const print);
     f_status_t (*print_content_next)(fl_print_t * const print);
     f_status_t (*print_object_end)(fl_print_t * const print);
@@ -202,6 +204,7 @@ extern "C" {
       0, \
       0, \
       0, \
+      0, \
     }
 #endif // _di_fss_read_callback_t_
 
index 5fc4cf062bc3ca03077211330181c826d481a96c..efa7e114f489c0e0eba6be12ee82456fc1ab7b3b 100644 (file)
@@ -111,11 +111,12 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
 
     main->callback.print_at = &fss_read_print_at;
     main->callback.print_content = &fss_read_print_content;
+    main->callback.print_content_empty = &fss_read_print_content_empty;
     main->callback.print_content_ignore = 0;
     main->callback.print_content_next = 0;
     main->callback.print_object = &fss_read_print_object;
     main->callback.print_object_end = &fss_read_basic_print_object_end;
-    main->callback.print_object_end_content = &fss_read_basic_print_object_end_content;
+    main->callback.print_object_end_content = &fss_read_print_object_end_content;
     main->callback.print_object_end_empty = &fss_read_print_content_empty;
     main->callback.print_set_end = &fss_read_print_set_end;
 
@@ -168,10 +169,11 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
         main->callback.process_normal = &fss_read_process_normal;
         main->callback.process_total = &fss_read_process_normal_total;
 
+        main->callback.print_content = &fss_read_print_content;
         main->callback.print_content_ignore = 0;
         main->callback.print_content_next = 0;
         main->callback.print_object_end = &fss_read_basic_print_object_end;
-        main->callback.print_object_end_content = &fss_read_basic_print_object_end_content;
+        main->callback.print_object_end_content = &fss_read_print_object_end_content;
         main->callback.print_object_end_empty = &fss_read_print_content_empty;
         main->callback.print_set_end = &fss_read_print_set_end;
       }
@@ -205,9 +207,10 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
         main->callback.process_normal = &fss_read_process_normal;
         main->callback.process_total = &fss_read_process_normal_total;
 
+        main->callback.print_content = &fss_read_print_content;
         main->callback.print_content_next = &fss_read_extended_print_content_next;
         main->callback.print_object_end = &fss_read_extended_print_object_end;
-        main->callback.print_object_end_content = &fss_read_extended_print_object_end_content;
+        main->callback.print_object_end_content = &fss_read_print_object_end_content;
         main->callback.print_object_end_empty = &fss_read_print_content_empty;
         main->callback.print_set_end = &fss_read_print_set_end;
       }
@@ -241,10 +244,11 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
         main->callback.process_normal = &fss_read_process_normal;
         main->callback.process_total = &fss_read_process_normal_total_multiple;
 
+        main->callback.print_content = &fss_read_print_content;
         main->callback.print_content_next = 0;
         main->callback.print_object_end = &fss_read_basic_list_print_object_end;
-        main->callback.print_object_end_content = &fss_read_basic_list_print_object_end_content;
-        main->callback.print_object_end_empty = &fss_read_basic_list_print_object_end_empty;
+        main->callback.print_object_end_content = &fss_read_print_object_end_content;
+        main->callback.print_object_end_empty = &fss_read_print_object_end_empty;
         main->callback.print_set_end = &fss_read_print_set_end_no_eol;
       }
       else if (f_compare_dynamic(as, fss_read_format_code_short_0003_s) == F_equal_to ||
@@ -271,7 +275,6 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
 
         main->program.parameters.array[fss_read_parameter_payload_e].flag |= f_console_flag_disable_e;
 
-
         main->callback.process_at = &fss_read_process_normal_at;
         main->callback.process_at_line = &fss_read_process_normal_at_line;
         main->callback.process_columns = &fss_read_process_normal_columns;
@@ -281,10 +284,11 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
         main->callback.process_normal = &fss_read_process_normal;
         main->callback.process_total = &fss_read_process_normal_total_multiple;
 
+        main->callback.print_content = &fss_read_print_content;
         main->callback.print_content_next = 0;
         main->callback.print_object_end = &fss_read_extended_list_print_object_end;
-        main->callback.print_object_end_content = &fss_read_extended_list_print_object_end_content;
-        main->callback.print_object_end_empty = &fss_read_extended_list_print_object_end_empty;
+        main->callback.print_object_end_content = &fss_read_print_object_end_content;
+        main->callback.print_object_end_empty = &fss_read_print_object_end_empty;
         main->callback.print_set_end = &fss_read_extended_list_print_set_end;
       }
       else if (f_compare_dynamic(as, fss_read_format_code_short_0008_s) == F_equal_to ||
@@ -319,10 +323,11 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
         main->callback.process_normal = &fss_read_embedded_list_process_normal;
         main->callback.process_total = &fss_read_process_normal_total_multiple;
 
+        main->callback.print_content = &fss_read_print_content;
         main->callback.print_content_next = 0;
         main->callback.print_object_end = &fss_read_embedded_list_print_object_end;
-        main->callback.print_object_end_content = &fss_read_embedded_list_print_object_end_content;
-        main->callback.print_object_end_empty = &fss_read_embedded_list_print_object_end_empty;
+        main->callback.print_object_end_content = &fss_read_print_object_end_content;
+        main->callback.print_object_end_empty = &fss_read_print_object_end_empty;
         main->callback.print_set_end = &fss_read_embedded_list_print_set_end;
       }
       else if (f_compare_dynamic(as, fss_read_format_code_short_000e_s) == F_equal_to ||
@@ -347,7 +352,6 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
 
         main->program.parameters.array[fss_read_parameter_payload_e].flag &= ~f_console_flag_disable_e;
 
-
         main->callback.process_at = &fss_read_process_normal_at;
         main->callback.process_at_line = &fss_read_process_normal_at_line;
         main->callback.process_columns = &fss_read_process_normal_columns;
@@ -357,10 +361,11 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
         main->callback.process_normal = &fss_read_process_normal;
         main->callback.process_total = &fss_read_process_normal_total_multiple;
 
+        main->callback.print_content = &fss_read_payload_print_content;
         main->callback.print_content_next = 0;
         main->callback.print_object_end = &fss_read_payload_print_object_end;
-        main->callback.print_object_end_content = &fss_read_payload_print_object_end_content;
-        main->callback.print_object_end_empty = &fss_read_payload_print_object_end_empty;
+        main->callback.print_object_end_content = &fss_read_print_object_end_content;
+        main->callback.print_object_end_empty = &fss_read_print_object_end_empty;
         main->callback.print_set_end = &fss_read_print_set_end_no_eol;
       }
       else {
index c74e92421614fddb5547d50bd3648aeb4c09a9d3..824b204f729816414159194b020f94f9f7016385 100644 (file)
@@ -38,6 +38,7 @@ extern "C" {
               if (F_status_set_fine(
                 main->callback.print_object_end_content(
                   &main->program.output,
+                  at,
                   main->setting.contents.array[at].array[main->setting.select],
                   (at < main->setting.quotes_content.used && main->setting.select < main->setting.quotes_content.array[at].used) ? main->setting.quotes_content.array[at].array[main->setting.select] : 0,
                   delimits_content
@@ -50,6 +51,7 @@ extern "C" {
               if (F_status_set_fine(
                 main->callback.print_content(
                   &main->program.output,
+                  at,
                   main->setting.contents.array[at].array[main->setting.select],
                   (at < main->setting.quotes_content.used && main->setting.select < main->setting.quotes_content.array[at].used) ? main->setting.quotes_content.array[at].array[main->setting.select] : 0,
                   delimits_content
@@ -80,6 +82,7 @@ extern "C" {
                 if (F_status_set_fine(
                   main->callback.print_object_end_content(
                     &main->program.output,
+                    at,
                     main->setting.contents.array[at].array[i],
                     (at < main->setting.quotes_content.used && i < main->setting.quotes_content.array[at].used) ? main->setting.quotes_content.array[at].array[i] : 0,
                     delimits_content
@@ -91,6 +94,7 @@ extern "C" {
               else if (F_status_set_fine(
                 main->callback.print_content(
                   &main->program.output,
+                  at,
                   main->setting.contents.array[at].array[i],
                   (at < main->setting.quotes_content.used && i < main->setting.quotes_content.array[at].used) ? main->setting.quotes_content.array[at].array[i] : 0,
                   delimits_content
@@ -116,6 +120,7 @@ extern "C" {
 
             main->callback.print_content(
               &main->program.output,
+              at,
               main->setting.contents.array[at].array[i],
               (at < main->setting.quotes_content.used && i < main->setting.quotes_content.array[at].used) ? main->setting.quotes_content.array[at].array[i] : 0,
               delimits_content
@@ -167,7 +172,7 @@ extern "C" {
 #endif // _di_fss_read_print_at_
 
 #ifndef _di_fss_read_print_content_
-  f_status_t fss_read_print_content(fl_print_t * const print, const f_range_t range, const uint8_t quote, const f_number_unsigneds_t delimits) {
+  f_status_t fss_read_print_content(fl_print_t * const print, const f_number_unsigned_t at, const f_range_t range, const uint8_t quote, const f_number_unsigneds_t delimits) {
 
     if (!print || !print->custom) return F_status_set_error(F_output_not);
 
@@ -371,17 +376,42 @@ extern "C" {
   }
 #endif // _di_fss_read_print_object_
 
-#ifndef _di_fss_read_print_object_content_
-  f_status_t fss_read_print_object_content(fl_print_t * const print, const f_number_unsigned_t at, const f_range_t range, const uint8_t quote, const f_number_unsigneds_t delimits_object, const f_number_unsigneds_t delimits_content) {
+#ifndef _di_fss_read_print_object_end_content_
+  f_status_t fss_read_print_object_end_content(fl_print_t * const print, const f_number_unsigned_t at, const f_range_t range, const uint8_t quote, const f_number_unsigneds_t delimits) {
 
-    {
-      const f_status_t status = fss_read_print_object(print, at, delimits_object);
+    if (!print || !print->custom) return F_status_set_error(F_output_not);
+
+    fss_read_main_t * const main = (fss_read_main_t *) print->custom;
+
+    if (main->callback.print_object_end) {
+      const f_status_t status = main->callback.print_object_end(print);
       if (F_status_is_error(status) || status == F_output_not) return status;
     }
 
-    return fss_read_print_content(print, range, quote, delimits_content);
+    if (main->callback.print_content) {
+      return main->callback.print_content(print, at, range, quote, delimits);
+    }
+
+    return main->callback.print_object_end ? F_okay : F_output_not;
+  }
+#endif // _di_fss_read_print_object_end_content_
+
+#ifndef _di_fss_read_print_object_end_empty_
+  f_status_t fss_read_print_object_end_empty(fl_print_t * const print) {
+
+    if (!print || !print->custom) return F_status_set_error(F_output_not);
+
+    fss_read_main_t * const main = (fss_read_main_t *) print->custom;
+
+    const f_status_t status_1 = (main->callback.print_object_end) ? main->callback.print_object_end(print) : F_output_not;
+    const f_status_t status_2 = (main->callback.print_content_empty) ? main->callback.print_content_empty(print) : F_output_not;
+
+    if (F_status_is_error(status_1)) return status_1;
+    if (F_status_is_error(status_2)) return status_2;
+
+    return (status_1 == F_okay || status_2 == F_okay) ? F_okay: F_output_not;
   }
-#endif // _di_fss_read_print_object_content_
+#endif // _di_fss_read_print_object_end_empty_
 
 #ifndef _di_fss_read_print_quote_
   f_status_t fss_read_print_quote(fl_print_t * const print, const uint8_t type) {
index 9c0028591dab6eac318186e9ed82ceade19b79e3..b1c34394b125d07c8b376e9dbe7a9e4d4490c792 100644 (file)
@@ -67,6 +67,8 @@ extern "C" {
  *   The print.custom is expected to be of type fss_read_main_t.
  *
  *   This does not alter print.custom.setting.state.status.
+ * @param at
+ *   The Object index to be printed.
  * @param range
  *   The range within the buffer representing the Content to print.
  * @param quote
@@ -85,7 +87,7 @@ extern "C" {
  * @see main.callback.print_set_end()
  */
 #ifndef _di_fss_read_print_content_
-  extern f_status_t fss_read_print_content(fl_print_t * const print, const f_range_t range, const uint8_t quote, const f_number_unsigneds_t delimits);
+  extern f_status_t fss_read_print_content(fl_print_t * const print, const f_number_unsigned_t at, const f_range_t range, const uint8_t quote, const f_number_unsigneds_t delimits);
 #endif // _di_fss_read_print_content_
 
 /**
@@ -193,11 +195,12 @@ extern "C" {
 #endif // _di_fss_read_print_object_
 
 /**
- * Print the Object at the given Object index position and the Content.
+ * Print the end of an Object (which is often the start of Content) and the Content.
  *
  * This locks, uses, and unlocks the file stream.
  *
- * Different standards may want to call this before they perform their final printing.
+ * This processes single Content range.
+ * This does not print a new line after the Content.
  *
  * @param print
  *   The output structure to print to.
@@ -206,15 +209,12 @@ extern "C" {
  *
  *   This does not alter print.custom.setting.state.status.
  * @param at
- *   The Object index to be printed.
+ *   The Object index position to be processed.
  * @param range
  *   The range within the buffer representing the Content to print.
  * @param quote
  *   The quote type representing the character to use (from the f_fss_quote_type_*_e).
- * @param delimits_object
- *   The delimits array representing a delimited Object.
- *   This represents the positions within the current Object at the "at" position.
- * @param delimits_content
+ * @param delimits
  *   The delimits array representing a delimited Content.
  *
  * @return
@@ -223,9 +223,31 @@ extern "C" {
  *
  *   F_output_not (with error bit) if a parameter is NULL.
  */
-#ifndef _di_fss_read_print_object_content_
-  extern f_status_t fss_read_print_object_content(fl_print_t * const print, const f_number_unsigned_t at, const f_range_t range, const uint8_t quote, const f_number_unsigneds_t delimits_object, const f_number_unsigneds_t delimits_content);
-#endif // _di_fss_read_print_object_content_
+#ifndef _di_fss_read_print_object_end_content_
+  extern f_status_t fss_read_print_object_end_content(fl_print_t * const print, const f_number_unsigned_t at, const f_range_t range, const uint8_t quote, const f_number_unsigneds_t delimits);
+#endif // _di_fss_read_print_object_end_content_
+
+/**
+ * Print the end of an Object (which is often the start of Content) and the end of the Content when no Content.
+ *
+ * This locks, uses, and unlocks the file stream.
+ *
+ * @param print
+ *   The output structure to print to.
+ *
+ *   The print.custom is expected to be of type fss_read_main_t.
+ *
+ *   This does not alter print.custom.setting.state.status.
+ *
+ * @return
+ *   F_okay on success.
+ *   F_output_not on success, but no printing is performed.
+ *
+ *   F_output_not (with error bit) if a parameter is NULL.
+ */
+#ifndef _di_fss_read_print_object_end_empty_
+  extern f_status_t fss_read_print_object_end_empty(fl_print_t * const print);
+#endif // _di_fss_read_print_object_end_empty_
 
 /**
  * Print the Object at the given Object index position.
index 0a1c5a1a1c8285953d92a59d18ec5c1ba258d91d..236dc51a2f1547a14c67ae134d6c817c16e03a06 100644 (file)
@@ -295,14 +295,14 @@ extern "C" {
 
               if (main->setting.contents.array[at].array[i].start <= main->setting.contents.array[at].array[i].stop) {
                 if ((print_state & 0x1) && !(print_state & 0x4)) {
-                  printed = main->callback.print_object_end_content(&main->program.output, main->setting.contents.array[at].array[i], (at < main->setting.quotes_content.used && i < main->setting.quotes_content.array[at].used) ? main->setting.quotes_content.array[at].array[i] : 0, delimits_content);
+                  printed = main->callback.print_object_end_content(&main->program.output, at, main->setting.contents.array[at].array[i], (at < main->setting.quotes_content.used && i < main->setting.quotes_content.array[at].used) ? main->setting.quotes_content.array[at].array[i] : 0, delimits_content);
 
                   if (F_status_set_fine(printed) != F_output_not) {
                     print_state |= 0x6;
                   }
                 }
                 else {
-                  printed = main->callback.print_content(&main->program.output, main->setting.contents.array[at].array[i], (at < main->setting.quotes_content.used && i < main->setting.quotes_content.array[at].used) ? main->setting.quotes_content.array[at].array[i] : 0, delimits_content);
+                  printed = main->callback.print_content(&main->program.output, at, main->setting.contents.array[at].array[i], (at < main->setting.quotes_content.used && i < main->setting.quotes_content.array[at].used) ? main->setting.quotes_content.array[at].array[i] : 0, delimits_content);
 
                   if (F_status_set_fine(printed) != F_output_not) {
                     print_state |= 0x2;
@@ -364,10 +364,10 @@ extern "C" {
                 main->setting.range.stop = j;
 
                 if ((print_state & 0x1) && !(print_state & 0x4)) {
-                  main->callback.print_object_end_content(&main->program.output, main->setting.range, (at < main->setting.quotes_content.used && i < main->setting.quotes_content.array[at].used) ? main->setting.quotes_content.array[at].array[i] : 0, delimits_content);
+                  main->callback.print_object_end_content(&main->program.output, at, main->setting.range, (at < main->setting.quotes_content.used && i < main->setting.quotes_content.array[at].used) ? main->setting.quotes_content.array[at].array[i] : 0, delimits_content);
                 }
                 else {
-                  main->callback.print_content(&main->program.output, main->setting.range, (at < main->setting.quotes_content.used && i < main->setting.quotes_content.array[at].used) ? main->setting.quotes_content.array[at].array[i] : 0, delimits_content);
+                  main->callback.print_content(&main->program.output, at, main->setting.range, (at < main->setting.quotes_content.used && i < main->setting.quotes_content.array[at].used) ? main->setting.quotes_content.array[at].array[i] : 0, delimits_content);
                 }
 
                 main->setting.state.status = F_success;
index 7a988c80b1b3930075e0ab022e98df180b17f11b..16efe0ce2e56f8e38a9912c784f019e01eb7e705 100644 (file)
@@ -36,10 +36,11 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
   data.callback.process_total = &fss_read_process_normal_total_multiple;
 
   data.callback.print_at = &fss_read_print_at;
-  data.callback.print_content = &fss_read_print_content;
+  data.callback.print_content = &fss_read_payload_print_content;
+  data.callback.print_content_empty = &fss_read_print_content_empty;
   data.callback.print_content_ignore = &fss_read_print_content_ignore;
   data.callback.print_content_next = 0;
-  data.callback.print_object = &fss_read_print_object;
+  data.callback.print_object = &fss_read_payload_print_object;
   data.callback.print_object_end = &fss_read_payload_print_object_end;
   data.callback.print_object_end_content = &fss_read_payload_print_object_end_content;
   data.callback.print_object_end_empty = &fss_read_payload_print_object_end_empty;
index e171fd159e63a71729bd8b08e83dec5ecf8a8ade..798e7a749a7fb9f32ee9bde421765b8e3d3e998d 100644 (file)
@@ -4,6 +4,44 @@
 extern "C" {
 #endif
 
+#ifndef _di_fss_read_payload_print_content_
+  f_status_t fss_read_payload_print_content(fl_print_t * const print, const f_number_unsigned_t at, const f_range_t range, const uint8_t quote, const f_number_unsigneds_t delimits) {
+
+    if (!print || !print->custom) return F_status_set_error(F_output_not);
+
+    fss_read_main_t * const main = (fss_read_main_t *) print->custom;
+
+    // The payload Content is printed raw.
+    if (main->setting.objects.used && at == main->setting.objects.used - 1) {
+      return fll_print_dynamic_partial_raw(main->setting.buffer, range, print->to);
+    }
+
+    if (main->callback.print_content_ignore) {
+      main->callback.print_content_ignore(&main->program.output);
+    }
+
+    if (main->setting.flag & fss_read_main_flag_original_d) {
+      if (main->setting.feature & fss_read_feature_flag_quote_content_d) {
+        fss_read_print_quote(&main->program.output, quote);
+      }
+    }
+
+    fll_print_except_in_dynamic_partial(main->setting.buffer, range, delimits, main->setting.comments, print->to);
+
+    if (main->setting.flag & fss_read_main_flag_original_d) {
+      if (main->setting.feature & fss_read_feature_flag_quote_content_d) {
+        fss_read_print_quote(&main->program.output, quote);
+      }
+    }
+
+    if (main->callback.print_content_ignore) {
+      main->callback.print_content_ignore(&main->program.output);
+    }
+
+    return F_okay;
+  }
+#endif // _di_fss_read_payload_print_content_
+
 #ifndef _di_fss_read_payload_print_object_end_
   f_status_t fss_read_payload_print_object_end(fl_print_t * const print) {
 
@@ -30,33 +68,6 @@ extern "C" {
   }
 #endif // _di_fss_read_payload_print_object_end_
 
-#ifndef _di_fss_read_payload_print_object_end_content_
-  f_status_t fss_read_payload_print_object_end_content(fl_print_t * const print, const f_range_t range, const uint8_t quote, const f_number_unsigneds_t delimits) {
-
-    {
-      const f_status_t status = fss_read_payload_print_object_end(print);
-      if (F_status_is_error(status) || status == F_output_not) return status;
-    }
-
-    return fss_read_print_content(print, range, quote, delimits);
-  }
-#endif // _di_fss_read_payload_print_object_end_content_
-
-#ifndef _di_fss_read_payload_print_object_end_empty_
-  f_status_t fss_read_payload_print_object_end_empty(fl_print_t * const print) {
-
-    if (!print) return F_status_set_error(F_output_not);
-
-    const f_status_t status_1 = fss_read_payload_print_object_end(print);
-    const f_status_t status_2 = fss_read_print_content_empty(print);
-
-    if (F_status_is_error(status_1)) return status_1;
-    if (F_status_is_error(status_2)) return status_2;
-
-    return (status_1 == F_okay || status_2 == F_okay) ? F_okay: F_output_not;
-  }
-#endif // _di_fss_read_payload_print_object_end_empty_
-
 #ifndef _di_fss_read_payload_print_error_parameter_value_payload_
   f_status_t fss_read_payload_print_error_parameter_value_payload(fl_print_t * const print, const f_string_static_t value) {
 
index b7596755062dd222533551703e27cfe94d20b49a..6f107b33f32924c781779e67a442bf6978f86638 100644 (file)
@@ -13,29 +13,7 @@ extern "C" {
 #endif
 
 /**
- * Print the end of an Object (which is often the start of Content).
- *
- * This locks, uses, and unlocks the file stream.
- *
- * @param print
- *   The output structure to print to.
- *
- *   The print.custom is expected to be of type fss_read_main_t.
- *
- *   This does not alter print.custom.setting.state.status.
- *
- * @return
- *   F_okay on success.
- *   F_output_not on success, but no printing is performed.
- *
- *   F_output_not (with error bit) if a parameter is NULL.
- */
-#ifndef _di_fss_read_payload_print_object_end_
-  extern f_status_t fss_read_payload_print_object_end(fl_print_t * const print);
-#endif // _di_fss_read_payload_print_object_end_
-
-/**
- * Print the end of an Object (which is often the start of Content) and the Content.
+ * (FSS Payload specific) Print the Content.
  *
  * This locks, uses, and unlocks the file stream.
  *
@@ -48,6 +26,8 @@ extern "C" {
  *   The print.custom is expected to be of type fss_read_main_t.
  *
  *   This does not alter print.custom.setting.state.status.
+ * @param at
+ *   The Object index position to be processed.
  * @param range
  *   The range within the buffer representing the Content to print.
  * @param quote
@@ -60,13 +40,17 @@ extern "C" {
  *   F_output_not on success, but no printing is performed.
  *
  *   F_output_not (with error bit) if a parameter is NULL.
+ *
+ * @see main.callback.print_content()
+ * @see main.callback.print_object_end()
+ * @see main.callback.print_set_end()
  */
-#ifndef _di_fss_readpayload_print_data_object_end_content_
-  extern f_status_t fss_read_payload_print_object_end_content(fl_print_t * const print, const f_range_t range, const uint8_t quote, const f_number_unsigneds_t delimits);
-#endif // _di_fss_read_payload_print_object_end_content_
+#ifndef _di_fss_read_payload_print_content_
+  extern f_status_t fss_read_payload_print_content(fl_print_t * const print, const f_number_unsigned_t at, const f_range_t range, const uint8_t quote, const f_number_unsigneds_t delimits);
+#endif // _di_fss_read_payload_print_content_
 
 /**
- * Print the end of an Object (which is often the start of Content) and the end of the Content when no Content.
+ * Print the end of an Object (which is often the start of Content).
  *
  * This locks, uses, and unlocks the file stream.
  *
@@ -82,13 +66,10 @@ extern "C" {
  *   F_output_not on success, but no printing is performed.
  *
  *   F_output_not (with error bit) if a parameter is NULL.
- *
- * @see fss_read_payload_print_object_end()
- * @see fss_read_print_content_empty()
  */
-#ifndef _di_fss_read_payload_print_object_end_empty_
-  extern f_status_t fss_read_payload_print_object_end_empty(fl_print_t * const print);
-#endif // _di_fss_read_payload_print_object_end_empty_
+#ifndef _di_fss_read_payload_print_object_end_
+  extern f_status_t fss_read_payload_print_object_end(fl_print_t * const print);
+#endif // _di_fss_read_payload_print_object_end_
 
 /**
  * Print an error message about the payload parameter not having a valid value.