]> Kevux Git Server - fll/commitdiff
Feature: Add fll_program_signal_check_loop() and fll_program_signal_check_simple().
authorKevin Day <Kevin@kevux.org>
Wed, 9 Apr 2025 02:23:33 +0000 (21:23 -0500)
committerKevin Day <Kevin@kevux.org>
Wed, 9 Apr 2025 02:23:33 +0000 (21:23 -0500)
These functions are already implemented in each of the level 3 programs.
The functions are pretty much identical.
Move the signal check logic into the `fll_program` project as `fll_program_signal_check_loop()` and `fll_program_signal_check_simple()`.

Update all of the programs, removing their variation and instead using one of these two.
Utilize a macro to call one or the other based on thread enabled state.

The fss_write payload is not calling the fss_write function and is instead using its own variation.
Replace that code with the macro as well.

Remove all stale and no longer needed signal check defines.

117 files changed:
build/disable/level_2/fll_program.h
build/stand_alone/byte_dump.config.h
build/stand_alone/example.config.h
build/stand_alone/fake.config.h
build/stand_alone/firewall.config.h
build/stand_alone/utf8.config.h
level_2/fll_program/c/private-program.c
level_2/fll_program/c/private-program.h
level_2/fll_program/c/program.c
level_2/fll_program/c/program.h
level_2/fll_program/c/program/common.h
level_3/byte_dump/c/main/byte_dump.c
level_3/byte_dump/c/main/common.c
level_3/byte_dump/c/main/common/define.h
level_3/byte_dump/c/main/main.c
level_3/byte_dump/c/main/process.c
level_3/byte_dump/c/main/signal.c
level_3/byte_dump/c/main/signal.h
level_3/example/c/main/common/define.h
level_3/example/c/main/main.c
level_3/example/c/main/signal.c
level_3/example/c/main/signal.h
level_3/fake/c/main/build.c
level_3/fake/c/main/build/load.c
level_3/fake/c/main/build/skeleton.c
level_3/fake/c/main/common/define.h
level_3/fake/c/main/fake.c
level_3/fake/c/main/fake/do.c
level_3/fake/c/main/main.c
level_3/fake/c/main/make/load_fakefile.c
level_3/fake/c/main/make/operate.c
level_3/fake/c/main/make/operate_process.c
level_3/fake/c/main/signal.c
level_3/fake/c/main/signal.h
level_3/firewall/c/main/common.c
level_3/firewall/c/main/common/define.h
level_3/firewall/c/main/main.c
level_3/firewall/c/main/operate.c
level_3/firewall/c/main/operate/create.c
level_3/firewall/c/main/operate/default.c
level_3/firewall/c/main/operate/delete.c
level_3/firewall/c/main/operate/process.c
level_3/firewall/c/main/signal.c
level_3/firewall/c/main/signal.h
level_3/fss_identify/c/main/common.c
level_3/fss_identify/c/main/common/define.h
level_3/fss_identify/c/main/fss_identify.c
level_3/fss_identify/c/main/load.c
level_3/fss_identify/c/main/main.c
level_3/fss_identify/c/main/signal.c
level_3/fss_identify/c/main/signal.h
level_3/fss_read/c/basic/main.c
level_3/fss_read/c/basic_list/main.c
level_3/fss_read/c/embedded_list/main.c
level_3/fss_read/c/embedded_list/process.c
level_3/fss_read/c/embedded_list/process.h
level_3/fss_read/c/extended/main.c
level_3/fss_read/c/extended_list/main.c
level_3/fss_read/c/main/common.c
level_3/fss_read/c/main/common.h
level_3/fss_read/c/main/common/define.h
level_3/fss_read/c/main/fss_read.h
level_3/fss_read/c/main/main.c
level_3/fss_read/c/main/print/data.c
level_3/fss_read/c/main/process.c
level_3/fss_read/c/main/process.h
level_3/fss_read/c/main/signal.c
level_3/fss_read/c/main/signal.h
level_3/fss_read/c/payload/fss_read.h
level_3/fss_read/c/payload/main.c
level_3/fss_write/c/basic/main.c
level_3/fss_write/c/basic_list/main.c
level_3/fss_write/c/embedded_list/main.c
level_3/fss_write/c/extended/main.c
level_3/fss_write/c/extended_list/main.c
level_3/fss_write/c/main/common/define.h
level_3/fss_write/c/main/fss_write.c
level_3/fss_write/c/main/main.c
level_3/fss_write/c/main/signal.c
level_3/fss_write/c/main/signal.h
level_3/fss_write/c/payload/fss_write.c
level_3/fss_write/c/payload/main.c
level_3/iki_read/c/eki/identify.c
level_3/iki_read/c/eki/main.c
level_3/iki_read/c/eki/process.c
level_3/iki_read/c/iki/identify.c
level_3/iki_read/c/iki/main.c
level_3/iki_read/c/iki/process.c
level_3/iki_read/c/main/common/define.h
level_3/iki_read/c/main/iki_read.c
level_3/iki_read/c/main/print/data.c
level_3/iki_read/c/main/print/data.h
level_3/iki_read/c/main/signal.c
level_3/iki_read/c/main/signal.h
level_3/iki_write/c/eki/common.c
level_3/iki_write/c/eki/main.c
level_3/iki_write/c/eki/process.c
level_3/iki_write/c/iki/common.c
level_3/iki_write/c/iki/main.c
level_3/iki_write/c/main/common/define.h
level_3/iki_write/c/main/iki_write.c
level_3/iki_write/c/main/signal.c
level_3/iki_write/c/main/signal.h
level_3/status_code/c/fss/main.c
level_3/status_code/c/main/common/define.h
level_3/status_code/c/main/main.c
level_3/status_code/c/main/signal.c
level_3/status_code/c/main/signal.h
level_3/status_code/c/main/status_code.c
level_3/utf8/c/main/bytesequence.c
level_3/utf8/c/main/codepoint.c
level_3/utf8/c/main/common/define.h
level_3/utf8/c/main/main.c
level_3/utf8/c/main/process.c
level_3/utf8/c/main/signal.c
level_3/utf8/c/main/signal.h
level_3/utf8/c/main/utf8.c

index c64a7fca5d1b7f947fe7fd1197ef10c13072d927..2d8c200cad3032e1b086f16fc2cf50b34e5c099d 100644 (file)
@@ -57,6 +57,9 @@
 #define _di_fll_program_print_version_
 #define _di_fll_program_s_a_
 #define _di_fll_program_s_e_
+#define _di_fll_program_signal_check_loop_
+#define _di_fll_program_signal_check_simple_
+#define _di_fll_program_signal_d_
 #define _di_fll_program_standard_set_down_
 #define _di_fll_program_standard_set_up_
 #define _di_fll_program_standard_signal_handle_
index 77b520a38bcc5ada56945b57529647193b6aea07..5bbafe43e73c407cdc73d9870531c7b35817fc87 100644 (file)
 //#define _di_fll_program_print_version_
 //#define _di_fll_program_s_a_
 //#define _di_fll_program_s_e_
+//#define _di_fll_program_signal_check_loop_
+//#define _di_fll_program_signal_check_simple_
+//#define _di_fll_program_signal_d_
 //#define _di_fll_program_standard_set_down_
 //#define _di_fll_program_standard_set_up_
 //#define _di_fll_program_standard_signal_handle_
index 05682a463ecde46efb34cf8977e66997b5e7a447..2dfbf76a5afcb0f1de167ba12a048b3e263b4755 100644 (file)
 //#define _di_fll_program_print_version_
 //#define _di_fll_program_s_a_
 //#define _di_fll_program_s_e_
+//#define _di_fll_program_signal_check_loop_
+//#define _di_fll_program_signal_check_simple_
+//#define _di_fll_program_signal_d_
 //#define _di_fll_program_standard_set_down_
 //#define _di_fll_program_standard_set_up_
 //#define _di_fll_program_standard_signal_handle_
index 33229cfd3dd2e75d876a337d6e988ad609619825..800dab547ed1a8634f7bfadee5ff5e58680c34d5 100644 (file)
 //#define _di_fll_program_print_version_
 //#define _di_fll_program_s_a_
 //#define _di_fll_program_s_e_
+//#define _di_fll_program_signal_check_loop_
+//#define _di_fll_program_signal_check_simple_
+//#define _di_fll_program_signal_d_
 //#define _di_fll_program_standard_set_down_
 //#define _di_fll_program_standard_set_up_
 //#define _di_fll_program_standard_signal_handle_
index 98f976e0fdcecad335e5054abf8ef4fc3454a9d3..1b534510f4c3fe1ace40800bcdc0a1fce3b0a2ae 100644 (file)
 //#define _di_fll_program_print_version_
 //#define _di_fll_program_s_a_
 //#define _di_fll_program_s_e_
+//#define _di_fll_program_signal_check_loop_
+//#define _di_fll_program_signal_check_simple_
+//#define _di_fll_program_signal_d_
 //#define _di_fll_program_standard_set_down_
 //#define _di_fll_program_standard_set_up_
 //#define _di_fll_program_standard_signal_handle_
index c3f99ad220b04368bc4950e7a63f1a90e04605f1..4ab1e4fb5ae161ae827de535a90bf0311c80f23b 100644 (file)
 //#define _di_fll_program_print_version_
 //#define _di_fll_program_s_a_
 //#define _di_fll_program_s_e_
+//#define _di_fll_program_signal_check_loop_
+//#define _di_fll_program_signal_check_simple_
+//#define _di_fll_program_signal_d_
 //#define _di_fll_program_standard_set_down_
 //#define _di_fll_program_standard_set_up_
 //#define _di_fll_program_standard_signal_handle_
index e1dd0647c707c4219546ded2654174442ddb56c8..99dc937eaa416068b90de0963fb589a7a44dd89a 100644 (file)
@@ -77,7 +77,7 @@ extern "C" {
   }
 #endif // !defined(_di_fll_program_print_help_option_) || !defined(_di_fll_program_print_help_option_standard_)
 
-#if !defined(_di_fll_program_standard_signal_received_) || !defined(_di_fll_program_standard_signal_handle_)
+#if !defined(_di_fll_program_signal_check_loop_) || !defined(_di_fll_program_standard_signal_received_) || !defined(_di_fll_program_standard_signal_handle_)
   f_status_t private_fll_program_standard_signal_received(fll_program_data_t * const program) {
 
     if (!program || program->signal.id == -1) return F_status_set_error(F_parameter);
@@ -105,7 +105,7 @@ extern "C" {
 
     return F_interrupt_not;
   }
-#endif // !defined(_di_fll_program_standard_signal_received_) || !defined(_di_fll_program_standard_signal_handle_)
+#endif // !defined(_di_fll_program_signal_check_loop_) || !defined(_di_fll_program_standard_signal_received_) || !defined(_di_fll_program_standard_signal_handle_)
 
 #if !defined(_di_fll_program_parameter_process_context_) || !defined(_di_fll_program_parameter_process_context_standard_) || !defined(_di_fll_program_parameter_process_empty_)
   void private_fll_program_parameter_process_empty(f_color_context_t * const context, f_color_set_t * const sets[]) {
index 3db7ba5b998d81929d802ced502f1d727cb08f98..ed2ba4ba7eb6f44e2691b845347afcff55ccaa34 100644 (file)
@@ -103,12 +103,13 @@ extern "C" {
  *
  * @see f_signal_read()
  *
+ * @see fll_program_signal_check_loop()
  * @see fll_program_standard_signal_received()
  * @see fll_program_standard_signal_handle()
  */
-#if !defined(_di_fll_program_standard_signal_received_) || !defined(_di_fll_program_standard_signal_handle_)
+#if !defined(_di_fll_program_signal_check_loop_) || !defined(_di_fll_program_standard_signal_received_) || !defined(_di_fll_program_standard_signal_handle_)
   f_status_t private_fll_program_standard_signal_received(fll_program_data_t * const program) F_attribute_visibility_internal_d;
-#endif // !defined(_di_fll_program_standard_signal_received_) || !defined(_di_fll_program_standard_signal_handle_)
+#endif // !defined(_di_fll_program_signal_check_loop_) || !defined(_di_fll_program_standard_signal_received_) || !defined(_di_fll_program_standard_signal_handle_)
 
 /**
  * Private implementation of fll_program_parameter_process_empty().
index c2ad94ee368d574c7e4d0bb9c5db85e6538b28ad..7b315d7d963d16d21c2c49d340bc772b3716c9c4 100644 (file)
@@ -234,6 +234,50 @@ extern "C" {
   }
 #endif // _di_fll_program_parameter_additional_rip_mash_
 
+#ifndef _di_fll_program_signal_check_loop_
+  f_status_t fll_program_signal_check_loop(fll_program_data_t * const program, f_state_t * const state) {
+
+    if (!program) return F_false;
+
+    if (program->signal_received) {
+      if (state) {
+        state->status = F_status_set_error(F_interrupt);
+      }
+
+      return F_true;
+    }
+
+    if (!((++program->signal_check) % fll_program_signal_check_d)) {
+      if (F_status_set_fine(private_fll_program_standard_signal_received(program)) == F_interrupt) {
+        if (state) {
+          state->status = F_status_set_error(F_interrupt);
+        }
+
+        return F_true;
+      }
+
+      program->signal_check = 0;
+    }
+
+    return F_false;
+  }
+#endif // _di_fll_program_signal_check_loop_
+
+#ifndef _di_fll_program_signal_check_simple_
+  f_status_t fll_program_signal_check_simple(fll_program_data_t * const program, f_state_t * const state) {
+
+    if (program && program->signal_received) {
+      if (state) {
+        state->status = F_status_set_error(F_interrupt);
+      }
+
+      return F_true;
+    }
+
+    return F_false;
+  }
+#endif // _di_fll_program_signal_check_simple_
+
 #ifndef _di_fll_program_standard_set_down_
   f_status_t fll_program_standard_set_down(fll_program_data_t * const program) {
     #ifndef _di_level_2_parameter_checking_
index 1a190b471f007cf4f955318c7b213d5a9381a252..4ebe6bed6859e6976c503c774b882c0da6c61e1f 100644 (file)
@@ -308,6 +308,60 @@ extern "C" {
 #endif // _di_fll_program_parameter_additional_rip_mash_
 
 /**
+ * Check to see if a signal is received, using a loop..
+ *
+ * This checks if program.signal_received is non-zero and if so then it returns TRUE.
+ *
+ * There is ideal for use in a non-threaded build.
+ * This checks periodically using fll_program_standard_signal_received() and updates program.signal_check as needed.
+ *
+ * @param program
+ *   The program data.
+ *
+ *   This alters program.signal_check as needed.
+ *   This does not alter program.signal_received.
+ *
+ * @param state
+ *   The state data.
+ *
+ *   If specified, then this alters state.status, setting it to F_status_set_error(F_interrupt) on interrupt.
+ *
+ * @return
+ *   F_true on signal received.
+ *   F_false otherwise (even when program is NULL).
+ *
+ * @see fll_program_standard_signal_received()
+ */
+#ifndef _di_fll_program_signal_check_loop_
+  extern f_status_t fll_program_signal_check_loop(fll_program_data_t * const program, f_state_t * const state);
+#endif // _di_fll_program_signal_check_loop_
+
+/**
+ * Check to see if a signal is received, using a simple check.
+ *
+ * There is ideal for use in a threaded build.
+ * The caller should have a thread that assigns the program.signal_received to some non-zero value for this to work.
+ *
+ * @param program
+ *   The program data.
+ *
+ *   This does not alter program.signal_check.
+ *   This does not alter program.signal_received.
+ *
+ * @param state
+ *   The state data.
+ *
+ *   If specified, then this alters state.status, setting it to F_status_set_error(F_interrupt) on interrupt.
+ *
+ * @return
+ *   F_true on signal received (when program.signal_received is non-zero).
+ *   F_false otherwise (even when program is NULL).
+ */
+#ifndef _di_fll_program_signal_check_simple_
+  extern f_status_t fll_program_signal_check_simple(fll_program_data_t * const program, f_state_t * const state);
+#endif // _di_fll_program_signal_check_simple_
+
+/**
  * This provides a standard program set down operations used by FLL programs.
  *
  * This does the following:
index 932dd2a463f3198dddba4fdf56c458babf2e6a1b..5c0ce200733aa15f46463faee57addc5cf2b6495 100644 (file)
@@ -56,6 +56,16 @@ extern "C" {
 #endif // _di_fll_program_copyright_s_
 
 /**
+ * A standard signal flags.
+ *
+ * fll_program_signal_*_d:
+ *   - check: A for fll_program_signal_loop() for determining when to make the check.
+ */
+#ifndef _di_fll_program_signal_d_
+  #define fll_program_signal_check_d 500000
+#endif // _di_fll_program_signal_d_
+
+/**
  * Program data pipe codes.
  *
  * These are bit-wise codes used to designate that a particular pipe exists and is to be used.
index bc094d3cce5a2501cd43df9136837ecee4ce78cd..57d02a1b3a8b2f4d9485a1561b91f3e26c4e6de4 100644 (file)
@@ -51,7 +51,7 @@ extern "C" {
 
         for (f_number_unsigned_t i = 0; i < main->setting.files.used; ++i) {
 
-          if (byte_dump_signal_check(main)) break;
+          if (macro_byte_dump_signal_check(&main->program, &main->setting.state)) break;
           if (!main->setting.files.array[i].used) continue;
 
           main->setting.state.status = f_file_stream_open(main->setting.files.array[i], f_string_empty_s, &file);
index 28cc60b4a459edd3e135befe777d54660eec5b9e..5e3c373ec07e30459290d637c21f410931cca1a4 100644 (file)
@@ -288,7 +288,7 @@ extern "C" {
 
       for (index = 0; index < parameters->remaining.used; ++index) {
 
-        if (byte_dump_signal_check(main)) return;
+        if (macro_byte_dump_signal_check(&main->program, &main->setting.state)) return;
 
         number = parameters->remaining.array[index];
 
index a74884b5ad3c898992d8d5d04145ba35e9bf86c4..df1fe4f08d6a577c17a044e79dcf4110559d4a94 100644 (file)
@@ -93,18 +93,23 @@ extern "C" {
  * The program signal defines.
  *
  * byte_dump_signal_*_d:
- *   - check:          Number of iterations before performing signal check in non-threaded signal handling.
  *   - check_failsafe: When using threads, how many consecutive failures to check signal before aborting (as a recursion failsafe).
- *   - check_tiny:     The tiny check.
- *   - check_short:    The short signal check.
  */
 #ifndef _di_byte_dump_signal_d_
-  #define byte_dump_signal_check_d          500000
   #define byte_dump_signal_check_failsafe_d 20000
-  #define byte_dump_signal_check_tiny_d     4
-  #define byte_dump_signal_check_short_d    16
 #endif // _di_byte_dump_signal_d_
 
+/**
+ * A macro wrapping the appropriate signal check function based on threaded/non-threaded support.
+ */
+#ifndef _di_byte_dump_signal_check_d_
+  #ifdef _di_thread_support_
+    #define macro_byte_dump_signal_check(program, state) fll_program_signal_check_loop(program, state)
+  #else
+    #define macro_byte_dump_signal_check(program, state) fll_program_signal_check_simple(program, state)
+  #endif // _di_thread_support_
+#endif // _di_byte_dump_signal_check_d_
+
 #ifdef __cplusplus
 } // extern "C"
 #endif
index 2e597336cb72c14b808c478d4bf3d3f1108bd8b6..1c084853f0ef40634e446a001b206aa303ed3687 100644 (file)
@@ -55,7 +55,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           byte_dump_setting_load(arguments, &data);
         }
 
-        if (!byte_dump_signal_check(&data)) {
+        if (!macro_byte_dump_signal_check(&data.program, &data.setting.state)) {
           byte_dump_main(&data);
         }
 
index cb9366da02aa153e49bfd9618b56b4a9f43090bb..1335eea45451da9cd4a4fdf992f886a52320ae79 100644 (file)
@@ -56,7 +56,7 @@ extern "C" {
     if (byte_get >= 0) {
       for (;;) {
 
-        if (byte_dump_signal_check(main)) return;
+        if (macro_byte_dump_signal_check(&main->program, &main->setting.state)) return;
 
         byte_get = getc(file.stream);
 
index d0928020e5eb7f6b13896b682d8cd078d65d1fe3..0ad7596d467c18b0e7205ba4264e81f09e0da890 100644 (file)
@@ -4,41 +4,6 @@
 extern "C" {
 #endif
 
-#if !defined(_di_byte_dump_signal_check_) && defined(_di_thread_support_)
-  f_status_t byte_dump_signal_check(byte_dump_main_t * const main) {
-
-    if (!main) return F_false;
-    if (main->program.signal_received) return F_true;
-
-    if (!((++main->program.signal_check) % byte_dump_signal_check_d)) {
-      if (F_status_set_fine(fll_program_standard_signal_received(&main->program)) == F_interrupt) {
-        main->setting.state.status = F_status_set_error(F_interrupt);
-
-        return F_true;
-      }
-
-      main->program.signal_check = 0;
-    }
-
-    return F_false;
-  }
-#endif // !defined(_di_byte_dump_signal_check_) && defined(_di_thread_support_)
-
-#if !defined(_di_byte_dump_signal_check_) && !defined(_di_thread_support_)
-  f_status_t byte_dump_signal_check(byte_dump_main_t * const main) {
-
-    if (!main) return F_false;
-
-    if (main->program.signal_received) {
-      main->setting.state.status = F_status_set_error(F_interrupt);
-
-      return F_true;
-    }
-
-    return F_false;
-  }
-#endif // !defined(_di_byte_dump_signal_check_) && !defined(_di_thread_support_)
-
 #if !defined(_di_byte_dump_signal_handler_) && !defined(_di_thread_support_)
   void byte_dump_signal_handler(byte_dump_main_t * const main) {
 
index d2a8397c852226b8fdff67a5a52ad476023d1703..c4497987ca43409e3110fae21edc38619ff45f18 100644 (file)
@@ -17,38 +17,6 @@ extern "C" {
 #endif
 
 /**
- * Check to see if a signal is received.
- *
- * If main.signal is non-zero, then this handles the following signals:
- *   - F_signal_abort
- *   - F_signal_broken_pipe
- *   - F_signal_hangup
- *   - F_signal_interrupt
- *   - F_signal_quit
- *   - F_signal_termination
- *
- * There is a threaded and a non-threaded version of this.
- * The non-threaded version checks periodically using byte_dump_signal_check_d and updates main->signal_check as needed.
- * The threaded version checks the flag state which is set by a separate thread that is blocking until signal is received.
- *
- * @param main
- *   The main program and settings data.
- *
- *   This does not alter main.setting.state.status.
- *
- * @return
- *   F_true on signal received.
- *   F_false otherwise.
- *
- * @see byte_dump_signal_handler()
- *
- * @see fll_program_standard_signal_received()
- */
-#ifndef _di_byte_dump_signal_check_
-  extern f_status_t byte_dump_signal_check(byte_dump_main_t * const main);
-#endif // _di_byte_dump_signal_check_
-
-/**
  * Signal handler for signals/interrupts.
  *
  * This blocks until an expected signal is recieved.
index 1ead0dc94857714e847054a8fa81681718505770..441a2ea1a9d35866291aa476c541ecac657a309b 100644 (file)
@@ -87,18 +87,23 @@ extern "C" {
  * The program signal defines.
  *
  * example_signal_*_d:
- *   - check:          Number of iterations before performing signal check in non-threaded signal handling.
  *   - check_failsafe: When using threads, how many consecutive failures to check signal before aborting (as a recursion failsafe).
- *   - check_tiny:     The tiny check.
- *   - check_short:    The short signal check.
  */
 #ifndef _di_example_signal_d_
-  #define example_signal_check_d          500000
   #define example_signal_check_failsafe_d 20000
-  #define example_signal_check_tiny_d     4
-  #define example_signal_check_short_d    16
 #endif // _di_example_signal_d_
 
+/**
+ * A macro wrapping the appropriate signal check function based on threaded/non-threaded support.
+ */
+#ifndef _di_example_signal_check_d_
+  #ifdef _di_thread_support_
+    #define macro_example_signal_check(program, state) fll_program_signal_check_loop(program, state)
+  #else
+    #define macro_example_signal_check(program, state) fll_program_signal_check_simple(program, state)
+  #endif // _di_thread_support_
+#endif // _di_example_signal_check_d_
+
 #ifdef __cplusplus
 } // extern "C"
 #endif
index b3d41d2f7d581edc787806b6c14e9c8415e16594..9fd6ac2c02277758e0e2d9c17a7b9d155d45d9e5 100644 (file)
@@ -58,7 +58,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           example_setting_load(arguments, &data);
         }
 
-        if (!example_signal_check(&data)) {
+        if (!macro_example_signal_check(&data.program, &data.setting.state)) {
           example_main(&data);
         }
 
index 7a3972b4f49886fdc2585666fab8c420ef1687cd..8f09d4e853a35acab5c96f5ccefc61f59078d0cc 100644 (file)
@@ -4,41 +4,6 @@
 extern "C" {
 #endif
 
-#if !defined(_di_example_signal_check_) && defined(_di_thread_support_)
-  f_status_t example_signal_check(example_main_t * const main) {
-
-    if (!main) return F_false;
-    if (main->program.signal_received) return F_true;
-
-    if (!((++main->program.signal_check) % example_signal_check_d)) {
-      if (F_status_set_fine(fll_program_standard_signal_received(&main->program)) == F_interrupt) {
-        main->setting.state.status = F_status_set_error(F_interrupt);
-
-        return F_true;
-      }
-
-      main->program.signal_check = 0;
-    }
-
-    return F_false;
-  }
-#endif // !defined(_di_example_signal_check_) && defined(_di_thread_support_)
-
-#if !defined(_di_example_signal_check_) && !defined(_di_thread_support_)
-  f_status_t example_signal_check(example_main_t * const main) {
-
-    if (!main) return F_false;
-
-    if (main->program.signal_received) {
-      main->setting.state.status = F_status_set_error(F_interrupt);
-
-      return F_true;
-    }
-
-    return F_false;
-  }
-#endif // !defined(_di_example_signal_check_) && !defined(_di_thread_support_)
-
 #if !defined(_di_example_signal_handler_) && !defined(_di_thread_support_)
   void example_signal_handler(example_main_t * const main) {
 
index d38c3e0c9f2e2ad95f23d54740994b581c6b29a3..3137967745c1aacd305e6fdda1b4e40a55f17f1d 100644 (file)
@@ -17,38 +17,6 @@ extern "C" {
 #endif
 
 /**
- * Check to see if a signal is received.
- *
- * If main.signal is non-zero, then this handles the following signals:
- *   - F_signal_abort
- *   - F_signal_broken_pipe
- *   - F_signal_hangup
- *   - F_signal_interrupt
- *   - F_signal_quit
- *   - F_signal_termination
- *
- * There is a threaded and a non-threaded version of this.
- * The non-threaded version checks periodically using example_signal_check_d and updates main->signal_check as needed.
- * The threaded version checks the flag state which is set by a separate thread that is blocking until signal is received.
- *
- * @param main
- *   The main program and settings data.
- *
- *   This does not alter main.setting.state.status.
- *
- * @return
- *   F_true on signal received.
- *   F_false otherwise.
- *
- * @see example_signal_handler()
- *
- * @see fll_program_standard_signal_received()
- */
-#ifndef _di_example_signal_check_
-  extern f_status_t example_signal_check(example_main_t * const main);
-#endif // _di_example_signal_check_
-
-/**
  * Signal handler for signals/interrupts.
  *
  * This blocks until an expected signal is recieved.
index 4ef3cce602d7db26eb6f19d0864637715b2f5398..2ace0c053d82a378b51d857644ce33dc2170896e 100644 (file)
@@ -169,7 +169,7 @@ extern "C" {
     if (!data || !data->main) return;
     if (data->main->setting.state.status == F_child) return;
     if (F_status_is_error(data->main->setting.state.status) || f_file_exists(file_stage, F_true) == F_true) return;
-    if (fake_signal_check(data->main)) return;
+    if (macro_fake_signal_check(&data->main->program, &data->main->setting.state)) return;
 
     fake_main_t * const main = data->main;
 
@@ -206,7 +206,7 @@ extern "C" {
 
     for (f_number_unsigned_t i = 0; i < files.used; ++i) {
 
-      if (fake_signal_check(main)) break;
+      if (macro_fake_signal_check(&main->program, &main->setting.state)) break;
       if (!files.array[i].used) continue;
 
       fake_string_dynamic_reset(&main->cache_map.value);
@@ -519,7 +519,7 @@ extern "C" {
 
     main->setting.state.status = fll_execute_program(main->cache_argument, main->cache_arguments, &parameter, 0, (void *) &return_code);
 
-    if (fake_signal_check(main)) return return_code;
+    if (macro_fake_signal_check(&main->program, &main->setting.state)) return return_code;
 
     if (main->setting.state.status != F_child) {
       if (F_status_is_error(main->setting.state.status)) {
@@ -616,7 +616,7 @@ extern "C" {
 
     if (!data || !data->main) return;
     if (F_status_is_error(data->main->setting.state.status)) return;
-    if (fake_signal_check(data->main)) return;
+    if (macro_fake_signal_check(&data->main->program, &data->main->setting.state)) return;
 
     fake_main_t * const main = data->main;
 
@@ -879,7 +879,7 @@ extern "C" {
 
     if (!data || !data->main) return;
     if (F_status_is_error(data->main->setting.state.status)) return;
-    if (fake_signal_check(data->main)) return;
+    if (macro_fake_signal_check(&data->main->program, &data->main->setting.state)) return;
 
     fake_main_t * const main = data->main;
 
index 8b9fc74cf8eeb97aafe4441ca03435477c911d73..d85ca335d39f3a8815aec4206ba14443481ae5de 100644 (file)
@@ -66,7 +66,7 @@ extern "C" {
 
     if (!data || !data->main || !setting) return;
     if (F_status_is_error(data->main->setting.state.status)) return;
-    if (fake_signal_check(data->main)) return;
+    if (macro_fake_signal_check(&data->main->program, &data->main->setting.state)) return;
 
     fake_main_t * const main = data->main;
 
@@ -206,7 +206,7 @@ extern "C" {
 
     if (!data || !data->main || !setting) return;
     if (F_status_is_error(data->main->setting.state.status) && buffer.used) return;
-    if (fake_signal_check(data->main)) return;
+    if (macro_fake_signal_check(&data->main->program, &data->main->setting.state)) return;
 
     fake_main_t * const main = data->main;
 
@@ -1739,7 +1739,7 @@ extern "C" {
 
     if (!data || !data->main || !data_build || !stage) return;
     if (F_status_is_error(data->main->setting.state.status)) return;
-    if (fake_signal_check(data->main)) return;
+    if (macro_fake_signal_check(&data->main->program, &data->main->setting.state)) return;
 
     fake_main_t * const main = data->main;
 
index 0dfac3333bd850a463aaba7b06e99c0ab163f251..d700ecceabcd8339812bac045da134f4194ffe1d 100644 (file)
@@ -65,7 +65,7 @@ extern "C" {
       for (j = 0; j < directorys[i].used; ++j) {
 
         if (f_path_separator_s.used && directorys[i].string[j] != f_path_separator_s.string[0]) continue;
-        if (fake_signal_check(data->main)) return;
+        if (macro_fake_signal_check(&data->main->program, &data->main->setting.state)) return;
 
         directorys[i].string[j] = 0;
 
index deb16080bd78095f087142c6bc7d244e0f68c45a..04347f98c65c593276a013c7b3550528c50e8e5c 100644 (file)
@@ -123,19 +123,24 @@ extern "C" {
  * The program signal defines.
  *
  * fake_signal_*_d:
- *   - check:          Number of iterations before performing signal check in non-threaded signal handling.
  *   - check_failsafe: When using threads, how many consecutive failures to check signal before aborting (as a recursion failsafe).
- *   - check_tiny:     The tiny check.
- *   - check_short:    The short signal check.
  */
 #ifndef _di_fake_signal_d_
-  #define fake_signal_check_d          500000
   #define fake_signal_check_failsafe_d 20000
-  #define fake_signal_check_tiny_d     4
-  #define fake_signal_check_short_d    16
 #endif // _di_fake_signal_d_
 
 /**
+ * A macro wrapping the appropriate signal check function based on threaded/non-threaded support.
+ */
+#ifndef _di_fake_signal_check_d_
+  #ifdef _di_thread_support_
+    #define macro_fake_signal_check(program, state) fll_program_signal_check_loop(program, state)
+  #else
+    #define macro_fake_signal_check(program, state) fll_program_signal_check_simple(program, state)
+  #endif // _di_thread_support_
+#endif // _di_fake_signal_check_d_
+
+/**
  * Flags for the code property in the f_state_t structure.
  *
  * fake_state_code_*_d:
index 089e84f23e74db0bd28add0f4b0e82e7c479ed41..69a40c3211665bd6e0db1a807e7b3ea301de94d2 100644 (file)
@@ -113,7 +113,7 @@ extern "C" {
             break;
           }
 
-          if (fake_signal_check(main)) break;
+          if (macro_fake_signal_check(&main->program, &main->setting.state)) break;
         } // for
       }
 
@@ -164,7 +164,7 @@ extern "C" {
           }
 
           if (main->setting.state.status == F_child) break;
-          if (F_status_set_fine(main->setting.state.status) == F_interrupt || fake_signal_check(main)) break;
+          if (F_status_set_fine(main->setting.state.status) == F_interrupt || macro_fake_signal_check(&main->program, &main->setting.state)) break;
           if (F_status_is_error(main->setting.state.status)) break;
         } // for
       }
@@ -232,7 +232,7 @@ extern "C" {
       fl_execute_parameter_t parameter = macro_fl_execute_parameter_t_initialize_1(0, 0, &environment, &signals, 0);
 
       main->setting.state.status = fll_execute_program(program, main->cache_arguments, &parameter, 0, (void *) &return_code);
-      if (fake_signal_check(data->main)) return return_code;
+      if (macro_fake_signal_check(&data->main->program, &data->main->setting.state)) return return_code;
       if (main->setting.state.status == F_child) return return_code;
     }
     else {
@@ -261,7 +261,7 @@ extern "C" {
   void fake_file_buffer(fake_data_t * const data, const f_string_static_t path_file, const bool required, f_string_dynamic_t * const buffer) {
 
     if (!data || !data->main || !buffer) return;
-    if (fake_signal_check(data->main)) return;
+    if (macro_fake_signal_check(&data->main->program, &data->main->setting.state)) return;
 
     fake_main_t * const main = data->main;
 
@@ -360,7 +360,7 @@ extern "C" {
     clearerr(F_type_input_d);
 
     do {
-      if (fake_signal_check(main)) return;
+      if (macro_fake_signal_check(&main->program, &main->setting.state)) return;
 
       main->setting.state.status = f_file_stream_read_block(file, buffer);
 
@@ -379,7 +379,7 @@ extern "C" {
   void fake_validate_parameter_paths(fake_data_t * const data) {
 
     if (!data || !data->main) return;
-    if (fake_signal_check(data->main)) return;
+    if (macro_fake_signal_check(&data->main->program, &data->main->setting.state)) return;
 
     fake_main_t * const main = data->main;
 
index feb0312ff2586e7a19e1b321486132fcdfc0040d..70a8715397501632ce385ca43d0eed9a7bd0a8e0 100644 (file)
@@ -13,7 +13,7 @@ extern "C" {
 
     if (!local->main) return;
 
-    if (fake_signal_check(local->main)) {
+    if (macro_fake_signal_check(&local->main->program, &local->main->setting.state)) {
       recurse->state.status = F_status_set_error(F_interrupt);
 
       return;
index a774b69cd459ed77d6f879ef6929a2ea65e424f0..bec70631d4dfe849fa15e94844b4006bc5c7c4d0 100644 (file)
@@ -64,7 +64,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           fake_setting_load(arguments, &data);
         }
 
-        if (!fake_signal_check(&data)) {
+        if (!macro_fake_signal_check(&data.program, &data.setting.state)) {
           fake_main(&data);
         }
 
index e53b14ea707d41d142f32f6ac08c8f2f9b503158..66d11237b0611884b203f0ca6215a363079a72b1 100644 (file)
@@ -9,7 +9,7 @@ extern "C" {
 
     if (!data_make || !data_make->data || !data_make->main) return;
     if (F_status_is_error(data_make->main->setting.state.status)) return;
-    if (fake_signal_check(data_make->main)) return;
+    if (macro_fake_signal_check(&data_make->main->program, &data_make->main->setting.state)) return;
 
     data_make->fakefile.used = 0;
 
@@ -96,7 +96,7 @@ extern "C" {
 
         for (f_number_unsigned_t i = 0; i < list_objects.used; ++i) {
 
-          if (fake_signal_check(data_make->main)) break;
+          if (macro_fake_signal_check(&data_make->main->program, &data_make->main->setting.state)) break;
 
           if (f_compare_dynamic_partial_string(fake_make_item_settings_s.string, data_make->main->buffer, fake_make_item_settings_s.used, list_objects.array[i]) == F_equal_to) {
             if (!missing_settings) {
index 58f443ce7d7856f3552a25743fcdfccc3bc7f2f8..e43f0ab5e4f357592ca677291aa72f6d47e36c30 100644 (file)
@@ -8,7 +8,7 @@ extern "C" {
   void fake_make_operate(fake_data_t * const data) {
 
     if (!data || !data->main) return;
-    if (fake_signal_check(data->main)) return;
+    if (macro_fake_signal_check(&data->main->program, &data->main->setting.state)) return;
 
     fake_main_t * const main = data->main;
 
@@ -1431,7 +1431,7 @@ extern "C" {
 
       for (j = 0; j < fake_max_operation_d; ++j) {
 
-        if (fake_signal_check(main)) break;
+        if (macro_fake_signal_check(&main->program, &main->setting.state)) break;
 
         if (f_compare_dynamic_partial_string(operations_name[j].string, main->buffer, operations_name[j].used, section->objects.array[i]) == F_equal_to) {
           state_process.operation = operations_type[j];
index 7f44affd9ca729dad71fdcfc5e546bf2282699e3..5cb7aef29e4898daa308500fb218f4142d849cb1 100644 (file)
@@ -290,7 +290,7 @@ extern "C" {
 
     fake_main_t * const main = data_make->main;
 
-    if (fake_signal_check(main)) return;
+    if (macro_fake_signal_check(&main->program, &main->setting.state)) return;
 
     // Reset the environment.
     for (f_number_unsigned_t i = 0; i < data_make->environment.used; ++i) {
@@ -333,7 +333,7 @@ extern "C" {
 
     main->setting.state.status = fll_execute_program(program, arguments, &parameter, 0, (void *) &return_code);
 
-    if (fake_signal_check(main)) return;
+    if (macro_fake_signal_check(&main->program, &main->setting.state)) return;
 
     if (F_status_is_error(main->setting.state.status)) {
       if (F_status_set_fine(main->setting.state.status) == F_interrupt) return;
index f102697a293942cee681107228ec470883dee99a..a01ac3bb3ba935ed6312cedbccdbae1763db094b 100644 (file)
@@ -4,41 +4,6 @@
 extern "C" {
 #endif
 
-#if !defined(_di_fake_signal_check_) && defined(_di_thread_support_)
-  f_status_t fake_signal_check(fake_main_t * const main) {
-
-    if (!main) return F_false;
-    if (main->program.signal_received) return F_true;
-
-    if (!((++main->program.signal_check) % fake_signal_check_d)) {
-      if (F_status_set_fine(fll_program_standard_signal_received(&main->program)) == F_interrupt) {
-        main->setting.state.status = F_status_set_error(F_interrupt);
-
-        return F_true;
-      }
-
-      main->program.signal_check = 0;
-    }
-
-    return F_false;
-  }
-#endif // !defined(_di_fake_signal_check_) && defined(_di_thread_support_)
-
-#if !defined(_di_fake_signal_check_) && !defined(_di_thread_support_)
-  f_status_t fake_signal_check(fake_main_t * const main) {
-
-    if (!main) return F_false;
-
-    if (main->program.signal_received) {
-      main->setting.state.status = F_status_set_error(F_interrupt);
-
-      return F_true;
-    }
-
-    return F_false;
-  }
-#endif // !defined(_di_fake_signal_check_) && !defined(_di_thread_support_)
-
 #if !defined(_di_fake_signal_handler_) && !defined(_di_thread_support_)
   void fake_signal_handler(fake_main_t * const main) {
 
@@ -75,7 +40,7 @@ extern "C" {
       ? ((fake_local_t *) state->custom)->main
       : (fake_main_t *) state->custom;
 
-    state->status = (fake_signal_check(main) == F_true) ? F_status_set_error(F_interrupt) : F_interrupt_not;
+    state->status = (macro_fake_signal_check(&main->program, &main->setting.state) == F_true) ? F_status_set_error(F_interrupt) : F_interrupt_not;
   }
 #endif // _di_fake_signal_handler_callback_
 
index b349e9c380811180f365afc439d4a87fb3b417e6..cb9f9870248db43f8dcbbd633937e872a028506e 100644 (file)
@@ -17,38 +17,6 @@ extern "C" {
 #endif
 
 /**
- * Check to see if a signal is received.
- *
- * If main.signal is non-zero, then this handles the following signals:
- *   - F_signal_abort
- *   - F_signal_broken_pipe
- *   - F_signal_hangup
- *   - F_signal_interrupt
- *   - F_signal_quit
- *   - F_signal_termination
- *
- * There is a threaded and a non-threaded version of this.
- * The non-threaded version checks periodically using fake_signal_check_d and updates main->signal_check as needed.
- * The threaded version checks the flag state which is set by a separate thread that is blocking until signal is received.
- *
- * @param main
- *   The main program and settings data.
- *
- *   This does not alter main.setting.state.status.
- *
- * @return
- *   F_true on signal received.
- *   F_false otherwise.
- *
- * @see fake_signal_handler()
- *
- * @see fll_program_standard_signal_received()
- */
-#ifndef _di_fake_signal_check_
-  extern f_status_t fake_signal_check(fake_main_t * const main);
-#endif // _di_fake_signal_check_
-
-/**
  * Signal handler for signals/interrupts.
  *
  * This blocks until an expected signal is recieved.
index a1adf47eae6e81c59969483ace65ece45d98e873..442c386b839700a8ee191bc5c061712a84c7abfd 100644 (file)
@@ -127,7 +127,7 @@ extern "C" {
 
         for (f_number_unsigned_t i = 0; i < parameters->remaining.used; ++i) {
 
-          if (firewall_signal_check(main)) return;
+          if (macro_firewall_signal_check(&main->program, &main->setting.state)) return;
 
           index = parameters->remaining.array[i];
 
index 3d87704b0e923e1d03abee9968da826409b6ff64..7cc6dd18bb8a3f7cf12d442f74bd2cdbdc620d40 100644 (file)
@@ -108,18 +108,23 @@ extern "C" {
  * The program signal defines.
  *
  * firewall_signal_*_d:
- *   - check:          Number of iterations before performing signal check in non-threaded signal handling.
  *   - check_failsafe: When using threads, how many consecutive failures to check signal before aborting (as a recursion failsafe).
- *   - check_tiny:     The tiny check.
- *   - check_short:    The short signal check.
  */
 #ifndef _di_firewall_signal_d_
-  #define firewall_signal_check_d          500000
   #define firewall_signal_check_failsafe_d 20000
-  #define firewall_signal_check_tiny_d     4
-  #define firewall_signal_check_short_d    16
 #endif // _di_firewall_signal_d_
 
+/**
+ * A macro wrapping the appropriate signal check function based on threaded/non-threaded support.
+ */
+#ifndef _di_firewall_signal_check_d_
+  #ifdef _di_thread_support_
+    #define macro_firewall_signal_check(program, state) fll_program_signal_check_loop(program, state)
+  #else
+    #define macro_firewall_signal_check(program, state) fll_program_signal_check_simple(program, state)
+  #endif // _di_thread_support_
+#endif // _di_firewall_signal_check_d_
+
 #ifdef __cplusplus
 } // extern "C"
 #endif
index 8c99d868d344101763a14c646d46bc63b6eb8a53..9f2428dab110b95c09c6e1011cba54393c3edfa8 100644 (file)
@@ -57,7 +57,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           firewall_setting_load(arguments, &data);
         }
 
-        if (!firewall_signal_check(&data)) {
+        if (!macro_firewall_signal_check(&data.program, &data.setting.state)) {
           firewall_main(&data);
         }
 
index 17791593aa5eb5664a9ef982ee5990b696daa285..0e4e32dbcb0084be156599171b771ed54e2cc673 100644 (file)
@@ -38,7 +38,7 @@ extern "C" {
     // Remove "lo" (loopback) from the device listing.
     for (; i < main->setting.devices.used; ++i) {
 
-      if (firewall_signal_check(main)) return;
+      if (macro_firewall_signal_check(&main->program, &main->setting.state)) return;
 
       if (f_compare_dynamic(firewall_device_loop_s, main->setting.devices.array[i]) == F_equal_to) {
         main->data.file = main->setting.devices.array[i];
@@ -69,7 +69,7 @@ extern "C" {
 
       for (i = 0; i < main->data.chain_objects.used; ++i) {
 
-        if (firewall_signal_check(main)) return;
+        if (macro_firewall_signal_check(&main->program, &main->setting.state)) return;
 
         if (!(main->data.has & firewall_data_has_stop_e) && f_compare_dynamic_partial_string(firewall_group_stop_s.string, main->data.buffer, firewall_group_stop_s.used, main->data.chain_objects.array[i]) == F_equal_to) {
           main->data.stop = i;
@@ -167,7 +167,7 @@ extern "C" {
 
       for (f_number_unsigned_t j = 0; j < main->setting.devices.used; ++j) {
 
-        if (firewall_signal_check(main)) return;
+        if (macro_firewall_signal_check(&main->program, &main->setting.state)) return;
 
         main->cache.path_file.used = 0;
         main->data.device = j;
index 3484f0f5a61e5277d432ee78784d1164d76f86be..5cb570c94f0be3c0d094ebf21c912ed7c097db7c 100644 (file)
@@ -61,7 +61,7 @@ extern "C" {
 
     for (; i < main->data.chain_objects.used; ++i) {
 
-      if (firewall_signal_check(main)) return;
+      if (macro_firewall_signal_check(&main->program, &main->setting.state)) return;
 
       new_chain = F_true;
       j = 0;
@@ -189,7 +189,7 @@ extern "C" {
               return;
             }
 
-            if (firewall_signal_check(main)) return;
+            if (macro_firewall_signal_check(&main->program, &main->setting.state)) return;
 
             if (return_code && F_status_is_error_not(main->setting.state.status)) {
               firewall_print_error_operation_return_code(&main->program.error, tools[t], main->cache.arguments, return_code);
index 2ed071e700f6c7d8f7b58474165f6e423988e081..f256e6b7862f611c7d486f07b7dca3bde0f92595 100644 (file)
@@ -30,7 +30,7 @@ extern "C" {
 
       for (t = 0; t < 2; ++t) {
 
-        if (firewall_signal_check(main)) return;
+        if (macro_firewall_signal_check(&main->program, &main->setting.state)) return;
 
         if (!tools[t].used) continue;
 
@@ -46,7 +46,7 @@ extern "C" {
           return;
         }
 
-        if (firewall_signal_check(main)) return;
+        if (macro_firewall_signal_check(&main->program, &main->setting.state)) return;
 
         if (F_status_is_error(main->setting.state.status)) {
           if (F_status_set_fine(main->setting.state.status) == F_failure) {
index a915ffd1ccbb1931292d39c1804fd28449003b47..d20c29ee2ee13f70d29ef709331f881102243671 100644 (file)
@@ -29,7 +29,7 @@ extern "C" {
 
       for (t = 0; t < 2; ++t) {
 
-        if (firewall_signal_check(main)) return;
+        if (macro_firewall_signal_check(&main->program, &main->setting.state)) return;
 
         if (!tools[t].used) continue;
 
index 68042dc13cd8bc0ff7d7d8c317280b24031e3bd1..c1ec53a4c5ebfbd1e12a64162106252da05afa9e 100644 (file)
@@ -44,7 +44,7 @@ extern "C" {
 
     for (; i < rule_objects->used; ++i) {
 
-      if (firewall_signal_check(main)) return;
+      if (macro_firewall_signal_check(&main->program, &main->setting.state)) return;
 
       valid = F_true;
       is_ip_list = F_false;
@@ -251,7 +251,7 @@ extern "C" {
 
       for (t = 0; t < 2; ++t) {
 
-        if (firewall_signal_check(main)) return;
+        if (macro_firewall_signal_check(&main->program, &main->setting.state)) return;
 
         if (!tools[t].used) continue;
 
@@ -410,7 +410,7 @@ extern "C" {
 
           for (; at < rule_contents->array[i].used; ++at) {
 
-            if (firewall_signal_check(main)) return;
+            if (macro_firewall_signal_check(&main->program, &main->setting.state)) return;
 
             if (rule_contents->array[i].array[at].start <= rule_contents->array[i].array[at].stop) {
               main->cache.arguments.array[main->cache.arguments.used].used = 0;
@@ -523,7 +523,7 @@ extern "C" {
               // The ip_list file contains objects and no content, all objects are what matter an nothing else.
               for (at = 0; at < main->cache.basic_objects.used; ++at) {
 
-                if (firewall_signal_check(main)) return;
+                if (macro_firewall_signal_check(&main->program, &main->setting.state)) return;
 
                 main->cache.arguments.array[main->cache.arguments.used].used = 0;
 
index 6fd7cd3073b17f8fdf528fa9c2b63e32830a7d53..3c16dabbf1c9e3f9433f7dd866731461ad7e377b 100644 (file)
@@ -4,41 +4,6 @@
 extern "C" {
 #endif
 
-#if !defined(_di_firewall_signal_check_) && defined(_di_thread_support_)
-  f_status_t firewall_signal_check(firewall_main_t * const main) {
-
-    if (!main) return F_false;
-    if (main->program.signal_received) return F_true;
-
-    if (!((++main->program.signal_check) % firewall_signal_check_d)) {
-      if (F_status_set_fine(fll_program_standard_signal_received(&main->program)) == F_interrupt) {
-        main->setting.state.status = F_status_set_error(F_interrupt);
-
-        return F_true;
-      }
-
-      main->program.signal_check = 0;
-    }
-
-    return F_false;
-  }
-#endif // !defined(_di_firewall_signal_check_) && defined(_di_thread_support_)
-
-#if !defined(_di_firewall_signal_check_) && !defined(_di_thread_support_)
-  f_status_t firewall_signal_check(firewall_main_t * const main) {
-
-    if (!main) return F_false;
-
-    if (main->program.signal_received) {
-      main->setting.state.status = F_status_set_error(F_interrupt);
-
-      return F_true;
-    }
-
-    return F_false;
-  }
-#endif // !defined(_di_firewall_signal_check_) && !defined(_di_thread_support_)
-
 #if !defined(_di_firewall_signal_handler_) && !defined(_di_thread_support_)
   void firewall_signal_handler(firewall_main_t * const main) {
 
index e078f107f14d4b36e08513600254eb720ae0710c..726d39a70bf7660bceb8d0f0bf7a98886dac8551 100644 (file)
@@ -17,38 +17,6 @@ extern "C" {
 #endif
 
 /**
- * Check to see if a signal is received.
- *
- * If main.signal is non-zero, then this handles the following signals:
- *   - F_signal_abort
- *   - F_signal_broken_pipe
- *   - F_signal_hangup
- *   - F_signal_interrupt
- *   - F_signal_quit
- *   - F_signal_termination
- *
- * There is a threaded and a non-threaded version of this.
- * The non-threaded version checks periodically using firewall_signal_check_d and updates main->signal_check as needed.
- * The threaded version checks the flag state which is set by a separate thread that is blocking until signal is received.
- *
- * @param main
- *   The main program and settings data.
- *
- *   This does not alter main.setting.state.status.
- *
- * @return
- *   F_true on signal received.
- *   F_false otherwise.
- *
- * @see firewall_signal_handler()
- *
- * @see fll_program_standard_signal_received()
- */
-#ifndef _di_firewall_signal_check_
-  extern f_status_t firewall_signal_check(firewall_main_t * const main);
-#endif // _di_firewall_signal_check_
-
-/**
  * Signal handler for signals/interrupts.
  *
  * This blocks until an expected signal is recieved.
index 0dd0f8f2e81580aec657745af4cd48dce3668fe2..2cda242a83d611736d10264499e59c1928e810d3 100644 (file)
@@ -128,7 +128,7 @@ extern "C" {
 
       for (; i < main->setting.names.used; ++i) {
 
-        if (fss_identify_signal_check(main)) return;
+        if (macro_fss_identify_signal_check(&main->program, &main->setting.state)) return;
 
         index = parameters->array[fss_identify_parameter_name_e].values.array[i];
         main->setting.names.array[i].used = 0;
@@ -144,7 +144,7 @@ extern "C" {
         if (main->setting.names.array[i].used) {
           for (j = 0; j < main->setting.names.array[i].used; ++j) {
 
-            if (fss_identify_signal_check(main)) return;
+            if (macro_fss_identify_signal_check(&main->program, &main->setting.state)) return;
 
             main->setting.state.status = f_utf_is_word_dash(main->setting.names.array[i].string + j, main->setting.names.array[i].used, F_true);
 
@@ -211,7 +211,7 @@ extern "C" {
       // Construct the array without allocating any more memory by setting this as a static string (used > 0, size = 0).
       for (index = 0; main->setting.files.used < parameters->remaining.used; ) {
 
-        if (fss_identify_signal_check(main)) return;
+        if (macro_fss_identify_signal_check(&main->program, &main->setting.state)) return;
 
         index = parameters->remaining.array[main->setting.files.used];
 
index 54bf538c38aaabd02a5fa64d7e608cc4b9ec7bb4..26c42cf5acbe09a54c6e8b5a2269cd6994432258 100644 (file)
@@ -96,18 +96,23 @@ extern "C" {
  * The program signal defines.
  *
  * fss_identify_signal_*_d:
- *   - check:          Number of iterations before performing signal check in non-threaded signal handling.
  *   - check_failsafe: When using threads, how many consecutive failures to check signal before aborting (as a recursion failsafe).
- *   - check_tiny:     The tiny check.
- *   - check_short:    The short signal check.
  */
 #ifndef _di_fss_identify_signal_d_
-  #define fss_identify_signal_check_d          500000
   #define fss_identify_signal_check_failsafe_d 20000
-  #define fss_identify_signal_check_tiny_d     4
-  #define fss_identify_signal_check_short_d    16
 #endif // _di_fss_identify_signal_d_
 
+/**
+ * A macro wrapping the appropriate signal check function based on threaded/non-threaded support.
+ */
+#ifndef _di_fss_identify_signal_check_d_
+  #ifdef _di_thread_support_
+    #define macro_fss_identify_signal_check(program, state) fll_program_signal_check_loop(program, state)
+  #else
+    #define macro_fss_identify_signal_check(program, state) fll_program_signal_check_simple(program, state)
+  #endif // _di_thread_support_
+#endif // _di_fss_identify_signal_check_d_
+
 #ifdef __cplusplus
 } // extern "C"
 #endif
index c1a14da782e7a8fb1016002593ef3f2d43d7d27b..7e1e5eaa4a55e005162119bb7a09677fb4e7b63c 100644 (file)
@@ -43,7 +43,7 @@ extern "C" {
 
     for (f_number_unsigned_t i = 0; F_status_is_error_not(main->setting.state.status) && i < main->setting.files.used; ++i) {
 
-      if (fss_identify_signal_check(main)) break;
+      if (macro_fss_identify_signal_check(&main->program, &main->setting.state)) break;
       if ((main->setting.flag & fss_identify_main_flag_line_d) && main->setting.current > main->setting.line) break;
 
       macro_f_file_t_reset(main->setting.file);
index 1805e949bcf3e3d11f4c6cafd31eb1065d6011e8..99f2c134b2104e0d45ab9454082f8c397b00abb5 100644 (file)
@@ -15,7 +15,7 @@ extern "C" {
     main->setting.range.stop = 0;
 
     do {
-      if (fss_identify_signal_check(main)) return;
+      if (macro_fss_identify_signal_check(&main->program, &main->setting.state)) return;
 
       main->setting.state.status = f_memory_array_increase_by(main->setting.file.size_read, sizeof(f_char_t), (void **) &main->setting.buffer.string, &main->setting.buffer.used, &main->setting.buffer.size);
 
index fd3a5b53f02d69415a900c2fca32c68fa75e2a76..9dd317cd99ef6275197e67d28e2f688f2a69d3e9 100644 (file)
@@ -55,7 +55,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           fss_identify_setting_load(arguments, &data);
         }
 
-        if (!fss_identify_signal_check(&data)) {
+        if (!macro_fss_identify_signal_check(&data.program, &data.setting.state)) {
           fss_identify_main(&data);
         }
 
index c548b791ec0e436a1330fc797a8d79d63a7c693e..30b021996723994cd2a259cf89354be819d4933e 100644 (file)
@@ -4,41 +4,6 @@
 extern "C" {
 #endif
 
-#if !defined(_di_fss_identify_signal_check_) && defined(_di_thread_support_)
-  f_status_t fss_identify_signal_check(fss_identify_main_t * const main) {
-
-    if (!main) return F_false;
-    if (main->program.signal_received) return F_true;
-
-    if (!((++main->program.signal_check) % fss_identify_signal_check_d)) {
-      if (F_status_set_fine(fll_program_standard_signal_received(&main->program)) == F_interrupt) {
-        main->setting.state.status = F_status_set_error(F_interrupt);
-
-        return F_true;
-      }
-
-      main->program.signal_check = 0;
-    }
-
-    return F_false;
-  }
-#endif // !defined(_di_fss_identify_signal_check_) && defined(_di_thread_support_)
-
-#if !defined(_di_fss_identify_signal_check_) && !defined(_di_thread_support_)
-  f_status_t fss_identify_signal_check(fss_identify_main_t * const main) {
-
-    if (!main) return F_false;
-
-    if (main->program.signal_received) {
-      main->setting.state.status = F_status_set_error(F_interrupt);
-
-      return F_true;
-    }
-
-    return F_false;
-  }
-#endif // !defined(_di_fss_identify_signal_check_) && !defined(_di_thread_support_)
-
 #if !defined(_di_fss_identify_signal_handler_) && !defined(_di_thread_support_)
   void fss_identify_signal_handler(fss_identify_main_t * const main) {
 
index 0aeba76be20faa4e4d3eaf03d733d024cf615788..eafb74d59834804100a2b812ae14fec5ba992a9d 100644 (file)
@@ -17,38 +17,6 @@ extern "C" {
 #endif
 
 /**
- * Check to see if a signal is received.
- *
- * If main.signal is non-zero, then this handles the following signals:
- *   - F_signal_abort
- *   - F_signal_broken_pipe
- *   - F_signal_hangup
- *   - F_signal_interrupt
- *   - F_signal_quit
- *   - F_signal_termination
- *
- * There is a threaded and a non-threaded version of this.
- * The non-threaded version checks periodically using fss_identify_signal_check_d and updates main->signal_check as needed.
- * The threaded version checks the flag state which is set by a separate thread that is blocking until signal is received.
- *
- * @param main
- *   The main program and settings data.
- *
- *   This does not alter main.setting.state.status.
- *
- * @return
- *   F_true on signal received.
- *   F_false otherwise.
- *
- * @see fss_identify_signal_handler()
- *
- * @see fll_program_standard_signal_received()
- */
-#ifndef _di_fss_identify_signal_check_
-  extern f_status_t fss_identify_signal_check(fss_identify_main_t * const main);
-#endif // _di_fss_identify_signal_check_
-
-/**
  * Signal handler for signals/interrupts.
  *
  * This blocks until an expected signal is recieved.
index 3627fffbed95ebfe9033b040211e2df9f98f75d8..24e5ffc5afbbec0b0a4d221e819736288a2a8abe 100644 (file)
@@ -85,7 +85,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           fss_read_setting_load(arguments, &data, 0);
         }
 
-        if (!fss_read_signal_check(&data)) {
+        if (!macro_fss_read_signal_check(&data.program, &data.setting.state)) {
           fss_read_main(&data);
         }
 
index 38f3ccfe052b03d9766ca231cb4b58c0e3a9ad84..b317128ad4f8aea8b427fdcccd58780cb81304bf 100644 (file)
@@ -84,7 +84,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           fss_read_setting_load(arguments, &data, 0);
         }
 
-        if (!fss_read_signal_check(&data)) {
+        if (!macro_fss_read_signal_check(&data.program, &data.setting.state)) {
           fss_read_main(&data);
         }
 
index 2c309e5e135b661eb752b462f0aade260c0a9eea..88673f480cf2054bdff8e1ed88b15146e23967a3 100644 (file)
@@ -85,7 +85,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           fss_read_setting_load(arguments, &data, 0);
         }
 
-        if (!fss_read_signal_check(&data)) {
+        if (!macro_fss_read_signal_check(&data.program, &data.setting.state)) {
           fss_read_main(&data);
         }
 
index 7f2e5128f5245697281f36f46ecb85d7540d34e2..455412f4969a54558aecced081a5954fc3f9f6e6 100644 (file)
@@ -88,7 +88,7 @@ extern "C" {
           for (; i < main->setting.contents.used && main->setting.state.status != F_success; ++i) {
 
             if (!names[i]) continue;
-            if (fss_read_signal_check(main)) return;
+            if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return;
 
             main->call.process_at_line(main, i, *delimits_object, *delimits_content, &line);
             if (F_status_is_error(main->setting.state.status)) return;
@@ -99,7 +99,7 @@ extern "C" {
         for (; i < main->setting.contents.used; ++i) {
 
           if (!names[i]) continue;
-          if (fss_read_signal_check(main)) return;
+          if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return;
 
           main->call.print_at(&main->program.output, i, *delimits_object, *delimits_content);
         } // for
index 8fa924598627f105495f643f608ab58fe9d739ef..2ba9fe593d80b34458b7a7699c8eb8047f6d45aa 100644 (file)
@@ -27,9 +27,9 @@ extern "C" {
  *   This alters main.setting.state.status:
  *     F_okay on success.
  *
- *     Errors (with error bit) from: fss_read_signal_check().
+ *     Errors (with error bit) from: macro_fss_read_signal_check().
  *
- * @see fss_read_signal_check()
+ * @see macro_fss_read_signal_check()
  */
 #ifndef _di_fss_read_embedded_list_process_
   extern void fss_read_embedded_list_process(fss_read_main_t * const main);
@@ -46,9 +46,9 @@ extern "C" {
  *   This alters main.setting.state.status:
  *     F_okay on success.
  *
- *     Errors (with error bit) from: fss_read_signal_check().
+ *     Errors (with error bit) from: macro_fss_read_signal_check().
  *
- * @see fss_read_signal_check()
+ * @see macro_fss_read_signal_check()
  */
 #ifndef _di_fss_read_embedded_list_process_determine_depth_
   extern void fss_read_embedded_list_process_determine_depth(fss_read_main_t * const main);
@@ -67,7 +67,7 @@ extern "C" {
  *   This alters main.setting.state.status:
  *     F_okay on success.
  *
- *     Errors (with error bit) from: fss_read_signal_check().
+ *     Errors (with error bit) from: macro_fss_read_signal_check().
  * @param parent
  *   The index position of the parent element.
  *   This is needed because the items array for some depth is tied to the parent via a property.
@@ -76,7 +76,7 @@ extern "C" {
  *
  *   Must be greater than 0.
  *
- * @see fss_read_signal_check()
+ * @see macro_fss_read_signal_check()
  */
 #ifndef _di_fss_read_embedded_list_process_determine_depth_nest_recurse_
   extern void fss_read_embedded_list_process_determine_depth_nest_recurse(fss_read_main_t * const main, const f_number_unsigned_t parent, const f_number_unsigned_t next);
index b2d9fb99e933f61c72e78e97ec544d3721eb425e..8d2c1023afbd126c0fe9c64e33c9b566424a0b53 100644 (file)
@@ -85,7 +85,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           fss_read_setting_load(arguments, &data, 0);
         }
 
-        if (!fss_read_signal_check(&data)) {
+        if (!macro_fss_read_signal_check(&data.program, &data.setting.state)) {
           fss_read_main(&data);
         }
 
index 96772c5255c84a8ea5911cbd21bfa10152bdf53d..8545d889f12bb3dde7b0e990abbfc7457f7a3b8c 100644 (file)
@@ -84,7 +84,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           fss_read_setting_load(arguments, &data, 0);
         }
 
-        if (!fss_read_signal_check(&data)) {
+        if (!macro_fss_read_signal_check(&data.program, &data.setting.state)) {
           fss_read_main(&data);
         }
 
index 3552a9c0970843e20eb2337a6fe4c376cb7de58c..d0ba5359fc5e077df482922368f0d3eb74eba080 100644 (file)
@@ -261,7 +261,7 @@ extern "C" {
 
       for (i = 0; i < parameters->array[fss_read_parameter_delimit_e].values.used; ++i) {
 
-        if (fss_read_signal_check(main)) return;
+        if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return;
 
         index = parameters->array[fss_read_parameter_delimit_e].values.array[i];
         length = parameters->arguments.array[index].used;
@@ -451,7 +451,7 @@ extern "C" {
 
       while (main->setting.state.status != F_okay_eof) {
 
-        if (fss_read_signal_check(main)) break;
+        if (macro_fss_read_signal_check(&main->program, &main->setting.state)) break;
 
         main->setting.state.status = f_file_stream_read_block(file, &main->setting.buffer);
         if (F_status_is_error(main->setting.state.status)) break;
@@ -487,7 +487,7 @@ extern "C" {
 
       for (i = 0; i < parameters->remaining.used; ++i) {
 
-        if (fss_read_signal_check(main)) return;
+        if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return;
 
         index = parameters->remaining.array[i];
         file_data = &main->setting.files.array[main->setting.files.used];
@@ -538,7 +538,7 @@ extern "C" {
 
           for (size_read = 0; size_read < size_file; size_read += size_block) {
 
-            if (size_file > fss_read_allocation_block_max_d && fss_read_signal_check(main)) break;
+            if (size_file > fss_read_allocation_block_max_d && macro_fss_read_signal_check(&main->program, &main->setting.state)) break;
 
             main->setting.state.status = f_file_stream_read_until(file, size_block, &main->setting.buffer);
             if (F_status_is_error(main->setting.state.status)) break;
@@ -606,7 +606,7 @@ extern "C" {
 
     for (i = 0; i < main->setting.depths.used; ++i) {
 
-      if (fss_read_signal_check(main)) return;
+      if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return;
 
       current = &main->setting.depths.array[i];
       current->depth = 0;
@@ -688,7 +688,7 @@ extern "C" {
 
       for (j = i + 1; j < main->setting.depths.used; ++j) {
 
-        if (fss_read_signal_check(main)) return;
+        if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return;
 
         current = &main->setting.depths.array[i];
 
index e462eadf445bb9dc739b616fea846e8dab5917a2..977535826563b175ea8eaceee02a4ec21e2249c4 100644 (file)
@@ -64,7 +64,7 @@ extern "C" {
  *     Errors (with error bit) from: fll_program_parameter_process_verbosity_standard().
  *
  *     Errors (with error bit) from: fss_read_setting_load_depth().
- *     Errors (with error bit) from: fss_read_signal_check()
+ *     Errors (with error bit) from: macro_fss_read_signal_check()
  * @param do_settings_load
  *   (optional) Designate a function to call after performing the initial processing, but before printing help.
  *   If the function returns F_done, then this function immediately returns, resetting status to F_okay.
@@ -77,7 +77,7 @@ extern "C" {
  * @see fll_program_parameter_process_verbosity_standard()
  *
  * @see fss_read_setting_load_depth()
- * @see fss_read_signal_check()
+ * @see macro_fss_read_signal_check()
  */
 #ifndef _di_fss_read_setting_load_
   extern void fss_read_setting_load(const f_console_arguments_t arguments, fss_read_main_t * const main, const fss_read_settings_load_call_t do_settings_load);
index 37138ab284131bb044f5069cdd14d8d4c3e70f92..0dfd978ddae8476311f0175a3c12321811b0b5ae 100644 (file)
@@ -161,18 +161,23 @@ extern "C" {
  * The program signal defines.
  *
  * fss_read_signal_*_d:
- *   - check:          Number of iterations before performing signal check in non-threaded signal handling.
  *   - check_failsafe: When using threads, how many consecutive failures to check signal before aborting (as a recursion failsafe).
- *   - check_tiny:     The tiny check.
- *   - check_short:    The short signal check.
  */
 #ifndef _di_fss_read_signal_d_
-  #define fss_read_signal_check_d          500000
   #define fss_read_signal_check_failsafe_d 20000
-  #define fss_read_signal_check_tiny_d     4
-  #define fss_read_signal_check_short_d    16
 #endif // _di_fss_read_signal_d_
 
+/**
+ * A macro wrapping the appropriate signal check function based on threaded/non-threaded support.
+ */
+#ifndef _di_fss_read_signal_check_d_
+  #ifdef _di_thread_support_
+    #define macro_fss_read_signal_check(program, state) fll_program_signal_check_loop(program, state)
+  #else
+    #define macro_fss_read_signal_check(program, state) fll_program_signal_check_simple(program, state)
+  #endif // _di_thread_support_
+#endif // _di_fss_read_signal_check_d_
+
 #ifdef __cplusplus
 } // extern "C"
 #endif
index e03c6f92036ee2e1ebe9bf08271fc4e059e3d1ea..378a40739f197b2760b7ed2131592eca1464751e 100644 (file)
@@ -166,11 +166,11 @@ extern "C" {
  *
  *     Errors (with error bit) from: f_string_dynamic_append_assure().
  *
- *     Errors (with error bit) from: fss_read_signal_check().
+ *     Errors (with error bit) from: macro_fss_read_signal_check().
  *
  * @see f_string_dynamic_append_assure()
  *
- * @see fss_read_signal_check()
+ * @see macro_fss_read_signal_check()
  */
 #ifndef _di_fss_read_process_last_line_
   extern void fss_read_process_last_line(fss_read_main_t * const main);
index ce31ce3018c274b4ea70cca4edebc8900f2ea3d7..b2da409daff0dd38d87589d8a77f4d211476527a 100644 (file)
@@ -66,7 +66,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           fss_read_setting_load(arguments, &data, &fss_read_main_setting_load_as);
         }
 
-        if (!fss_read_signal_check(&data)) {
+        if (!macro_fss_read_signal_check(&data.program, &data.setting.state)) {
           fss_read_main(&data);
         }
 
index acfc6dd1f392d5482b3fbc30c4df3ef619c9d10c..a64c1d1af7e6c33d1cafb25ba3573d46348e430b 100644 (file)
@@ -73,7 +73,7 @@ extern "C" {
           // Loop through with conditionals only when necessary for performance reasons.
           for (print_state |= 0x8; i < main->setting.contents.array[at].used; ++i) {
 
-            if (fss_read_signal_check(main)) return F_status_set_error(F_interrupt);
+            if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return F_status_set_error(F_interrupt);
 
             if (main->setting.contents.array[at].array[i].start <= main->setting.contents.array[at].array[i].stop) {
               print_state &= ~0x8;
@@ -111,7 +111,7 @@ extern "C" {
 
           for (; i < main->setting.contents.array[at].used; ++i) {
 
-            if (fss_read_signal_check(main)) return F_status_set_error(F_interrupt);
+            if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return F_status_set_error(F_interrupt);
             if (main->setting.contents.array[at].array[i].start > main->setting.contents.array[at].array[i].stop) continue;
 
             if (main->call.print_content_next) {
index 0b1d55c47e062419d165eb81b8013870c42bf180..f3fb6ffd4515dfa07c573cb87565a1224d4f040c 100644 (file)
@@ -86,7 +86,7 @@ extern "C" {
           for (; i < main->setting.contents.used && main->setting.state.status != F_success; ++i) {
 
             if (!names[i]) continue;
-            if (fss_read_signal_check(main)) return;
+            if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return;
 
             main->call.process_at_line(main, i, *delimits_object, *delimits_content, &line);
             if (F_status_is_error(main->setting.state.status)) return;
@@ -97,7 +97,7 @@ extern "C" {
         for (; i < main->setting.contents.used; ++i) {
 
           if (!names[i]) continue;
-          if (fss_read_signal_check(main)) return;
+          if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return;
 
           main->call.print_at(&main->program.output, i, *delimits_object, *delimits_content);
         } // for
@@ -140,7 +140,7 @@ extern "C" {
     for (; i < main->setting.objects.used; ++i) {
 
       if (!names[i]) continue;
-      if (fss_read_signal_check(main)) return;
+      if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return;
 
       if (at == main->setting.depth.value_at) {
         if (main->setting.flag & fss_read_main_flag_line_d) {
@@ -332,14 +332,14 @@ extern "C" {
 
         for (; i < main->setting.contents.array[at].used; ++i) {
 
-          if (fss_read_signal_check(main)) return;
+          if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return;
 
           main->setting.range = main->setting.contents.array[at].array[i];
           k = 0;
 
           for (j = main->setting.range.start; j <= main->setting.range.stop; ++j) {
 
-            if (fss_read_signal_check(main)) return;
+            if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return;
 
             if (k < main->setting.comments.used) {
               while (k < main->setting.comments.used && main->setting.comments.array[k].stop < j) ++k;
@@ -421,7 +421,7 @@ extern "C" {
       for (f_number_unsigned_t at = 0; at < main->setting.contents.used; ++at) {
 
         if (!names[at]) continue;
-        if (fss_read_signal_check(main)) return;
+        if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return;
 
         if (main->setting.flag & fss_read_main_flag_empty_d) {
           if (main->setting.contents.array[at].used > max) {
@@ -433,7 +433,7 @@ extern "C" {
 
           for (i = 0; i < main->setting.contents.array[at].used; ++i) {
 
-            if (fss_read_signal_check(main)) return;
+            if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return;
 
             if (main->setting.contents.array[at].array[i].start <= main->setting.contents.array[at].array[i].stop) ++current;
           } // for
@@ -464,7 +464,7 @@ extern "C" {
           }
         }
 
-        if (fss_read_signal_check(main)) return;
+        if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return;
       } // for
     }
 
@@ -487,7 +487,7 @@ extern "C" {
       if ((main->setting.flag & fss_read_main_flag_trim_d) || (main->setting.feature & fss_read_feature_flag_object_trim_d)) {
         for (i = 0; i < main->setting.objects.used; ++i) {
 
-          if (fss_read_signal_check(main)) return;
+          if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return;
 
           if (f_compare_dynamic_partial_except_trim_dynamic(main->setting.depth.value_name, main->setting.buffer, main->setting.objects.array[i], fss_read_except_none_c, main->setting.delimits_object) == F_equal_to) {
             names[i] = F_true;
@@ -497,7 +497,7 @@ extern "C" {
       else {
         for (i = 0; i < main->setting.objects.used; ++i) {
 
-          if (fss_read_signal_check(main)) return;
+          if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return;
 
           if (f_compare_dynamic_partial_except_dynamic(main->setting.depth.value_name, main->setting.buffer, main->setting.objects.array[i], fss_read_except_none_c, main->setting.delimits_object) == F_equal_to) {
             names[i] = F_true;
@@ -525,7 +525,7 @@ extern "C" {
       for (; i < main->setting.contents.used; ++i) {
 
         if (!names[i]) continue;
-        if (fss_read_signal_check(main)) return;
+        if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return;
 
         if ((main->setting.flag & fss_read_main_flag_at_d) && main->setting.depth.index_at) {
           if (main->setting.depth.value_at != i) continue;
@@ -547,7 +547,7 @@ extern "C" {
       for (f_number_unsigned_t at = 0; i < main->setting.objects.used; ++i) {
 
         if (!names[i]) continue;
-        if (fss_read_signal_check(main)) return;
+        if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return;
 
         if (at < main->setting.depth.value_at) {
           ++at;
@@ -568,7 +568,7 @@ extern "C" {
       for (; i < main->setting.objects.used; ++i) {
 
         if (!names[i]) continue;
-        if (fss_read_signal_check(main)) return;
+        if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return;
 
         if (!(main->setting.flag & fss_read_main_flag_object_d) && (main->setting.flag & fss_read_main_flag_content_d)) {
           if (!(main->setting.contents.array[i].used || (main->setting.flag & fss_read_main_flag_empty_d))) continue;
@@ -607,7 +607,7 @@ extern "C" {
       for (; at < main->setting.contents.used; ++at) {
 
         if (!names[at]) continue;
-        if (fss_read_signal_check(main)) return;
+        if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return;
 
         if ((main->setting.flag & fss_read_main_flag_at_d) && main->setting.depth.index_at) {
           if (main->setting.depth.value_at != at) continue;
@@ -630,7 +630,7 @@ extern "C" {
 
           for (i = 0; i < main->setting.contents.array[at].used; ++i) {
 
-            if (fss_read_signal_check(main)) return;
+            if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return;
 
             range.start = main->setting.contents.array[at].array[i].start;
             range.stop = main->setting.contents.array[at].array[i].stop;
@@ -673,7 +673,7 @@ extern "C" {
       for (; at < main->setting.objects.used; ++at) {
 
         if (!names[at]) continue;
-        if (fss_read_signal_check(main)) return;
+        if (macro_fss_read_signal_check(&main->program, &main->setting.state)) return;
 
         if ((main->setting.flag & fss_read_main_flag_at_d) && main->setting.depth.index_at) {
           if (main->setting.depth.value_at != at) continue;
index c027a99fbdf25d12b0b3f3dc09b1caab55891151..9960cc335b5925d772d77d717a30f702b76c32e2 100644 (file)
@@ -36,9 +36,9 @@ extern "C" {
  *     Errors (with error bit) from: main.call.process_read().
  *     Errors (with error bit) from: main.call.process_total().
  *
- *     Errors (with error bit) from: fss_read_signal_check().
+ *     Errors (with error bit) from: macro_fss_read_signal_check().
  *
- * @see fss_read_signal_check()
+ * @see macro_fss_read_signal_check()
  */
 #ifndef _di_fss_read_process_
   extern void fss_read_process(fss_read_main_t * const main);
@@ -57,7 +57,7 @@ extern "C" {
  *   This alters main.setting.state.status:
  *     F_okay on success.
  *
- *     Errors (with error bit) from: fss_read_signal_check().
+ *     Errors (with error bit) from: macro_fss_read_signal_check().
  * @param names
  *   An array of booleans representing if the name at a given index is enabled.
  *   (If TRUE, then the name is to be used and if FALSE, then the name is not to be used.)
@@ -68,7 +68,7 @@ extern "C" {
  *   The delimits array representing a delimited Content.
  *   This represents the positions within the current Content at the "at" position.
  *
- * @see fss_read_signal_check()
+ * @see macro_fss_read_signal_check()
  */
 #ifndef _di_fss_read_process_at_
   extern void fss_read_process_at(fss_read_main_t * const main, const bool names[], const f_number_unsigneds_t delimits_object, const f_number_unsigneds_t delimits_content);
@@ -90,7 +90,7 @@ extern "C" {
  *
  *     Errors (with error bit) from: f_string_dynamic_append_assure().
  *
- *     Errors (with error bit) from: fss_read_signal_check().
+ *     Errors (with error bit) from: macro_fss_read_signal_check().
  * @param at
  *   The Object index position to be processed.
  * @param delimits_object
@@ -120,12 +120,12 @@ extern "C" {
  *   This alters main.setting.state.status:
  *     F_okay on success.
  *
- *     Errors (with error bit) from: fss_read_signal_check().
+ *     Errors (with error bit) from: macro_fss_read_signal_check().
  * @param names
  *   An array of booleans representing if the name at a given index is enabled.
  *   (If TRUE, then the name is to be used and if FALSE, then the name is not to be used.)
  *
- * @see fss_read_signal_check()
+ * @see macro_fss_read_signal_check()
  */
 #ifndef _di_fss_read_process_columns_
   extern void fss_read_process_columns(fss_read_main_t * const main, const bool names[]);
@@ -142,12 +142,12 @@ extern "C" {
  *   This alters main.setting.state.status:
  *     F_okay on success.
  *
- *     Errors (with error bit) from: fss_read_signal_check().
+ *     Errors (with error bit) from: macro_fss_read_signal_check().
  * @param names
  *   An array of booleans representing if the name at a given index is enabled.
  *   (If TRUE, then the name is to be used and if FALSE, then the name is not to be used.)
  *
- * @see fss_read_signal_check()
+ * @see macro_fss_read_signal_check()
  */
 #ifndef _di_fss_read_process_name_
   extern void fss_read_process_name(fss_read_main_t * const main, bool names[]);
@@ -166,12 +166,12 @@ extern "C" {
  *   This alters main.setting.state.status:
  *     F_okay on success.
  *
- *     Errors (with error bit) from: fss_read_signal_check().
+ *     Errors (with error bit) from: macro_fss_read_signal_check().
  * @param names
  *   An array of booleans representing if the name at a given index is enabled.
  *   (If TRUE, then the name is to be used and if FALSE, then the name is not to be used.)
  *
- * @see fss_read_signal_check()
+ * @see macro_fss_read_signal_check()
  */
 #ifndef _di_fss_read_process_total_
   extern void fss_read_process_total(fss_read_main_t * const main, const bool names[]);
@@ -190,12 +190,12 @@ extern "C" {
  *   This alters main.setting.state.status:
  *     F_okay on success.
  *
- *     Errors (with error bit) from: fss_read_signal_check().
+ *     Errors (with error bit) from: macro_fss_read_signal_check().
  * @param names
  *   An array of booleans representing if the name at a given index is enabled.
  *   (If TRUE, then the name is to be used and if FALSE, then the name is not to be used.)
  *
- * @see fss_read_signal_check()
+ * @see macro_fss_read_signal_check()
  */
 #ifndef _di_fss_read_process_total_multiple_
   extern void fss_read_process_total_multiple(fss_read_main_t * const main, const bool names[]);
index fbab7c3f3cb5a74d26426a8a6ffc5f7e344f3540..bf3e2ae32e2d4a939d08ad14211612254a7f8e43 100644 (file)
@@ -4,41 +4,6 @@
 extern "C" {
 #endif
 
-#if !defined(_di_fss_read_signal_check_) && defined(_di_thread_support_)
-  f_status_t fss_read_signal_check(fss_read_main_t * const main) {
-
-    if (!main) return F_false;
-    if (main->program.signal_received) return F_true;
-
-    if (!((++main->program.signal_check) % fss_read_signal_check_d)) {
-      if (F_status_set_fine(fll_program_standard_signal_received(&main->program)) == F_interrupt) {
-        main->setting.state.status = F_status_set_error(F_interrupt);
-
-        return F_true;
-      }
-
-      main->program.signal_check = 0;
-    }
-
-    return F_false;
-  }
-#endif // !defined(_di_fss_read_signal_check_) && defined(_di_thread_support_)
-
-#if !defined(_di_fss_read_signal_check_) && !defined(_di_thread_support_)
-  f_status_t fss_read_signal_check(fss_read_main_t * const main) {
-
-    if (!main) return F_false;
-
-    if (main->program.signal_received) {
-      main->setting.state.status = F_status_set_error(F_interrupt);
-
-      return F_true;
-    }
-
-    return F_false;
-  }
-#endif // !defined(_di_fss_read_signal_check_) && !defined(_di_thread_support_)
-
 #if !defined(_di_fss_read_signal_handler_) && !defined(_di_thread_support_)
   void fss_read_signal_handler(fss_read_main_t * const main) {
 
index 6925b980bae2d407417107dde30ee2f90d87aca9..3271d07ef080242450bc460c16230bc5254e9575 100644 (file)
@@ -17,38 +17,6 @@ extern "C" {
 #endif
 
 /**
- * Check to see if a signal is received.
- *
- * If main.signal is non-zero, then this handles the following signals:
- *   - F_signal_abort
- *   - F_signal_broken_pipe
- *   - F_signal_hangup
- *   - F_signal_interrupt
- *   - F_signal_quit
- *   - F_signal_termination
- *
- * There is a threaded and a non-threaded version of this.
- * The non-threaded version checks periodically using fss_read_signal_check_d and updates main->signal_check as needed.
- * The threaded version checks the flag state which is set by a separate thread that is blocking until signal is received.
- *
- * @param main
- *   The main program and settings data.
- *
- *   This does not alter main.setting.state.status.
- *
- * @return
- *   F_true on signal received.
- *   F_false otherwise.
- *
- * @see fss_read_signal_handler()
- *
- * @see fll_program_standard_signal_received()
- */
-#ifndef _di_fss_read_signal_check_
-  extern f_status_t fss_read_signal_check(fss_read_main_t * const main);
-#endif // _di_fss_read_signal_check_
-
-/**
  * Signal handler for signals/interrupts.
  *
  * This blocks until an expected signal is recieved.
index b19f2ea3fbccf3fce7bbb2dc5a3877fd3b9cbcc2..d85e81f85eadfe0328fca209a8809d0fd50ab3f2 100644 (file)
@@ -152,7 +152,7 @@ extern "C" {
  *     F_data_not on success but nothing was provided to operate with.
  *
  * @see fss_read_setting_load()
- * @see fss_read_signal_check()
+ * @see macro_fss_read_signal_check()
  */
 #ifndef _di_fss_read_payload_setting_load_
   extern void fss_read_payload_setting_load(const f_console_arguments_t arguments, fss_read_main_t * const main);
index 14dbee6dd7a655b04957829c04ec7c307f4f21ad..e193a61fc763fe3123d25a180a467b91a65eca3e 100644 (file)
@@ -86,7 +86,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           fss_read_setting_load(arguments, &data, &fss_read_payload_setting_load);
         }
 
-        if (!fss_read_signal_check(&data)) {
+        if (!macro_fss_read_signal_check(&data.program, &data.setting.state)) {
           fss_read_main(&data);
         }
 
index 1e92e7ae868ca25dd0a5ab4470c3660505d6d7ed..e0a9823084839f65ac1132e5c8345c0a6aca724c 100644 (file)
@@ -66,7 +66,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           fss_write_setting_load(arguments, &data, 0);
         }
 
-        if (!fss_write_signal_check(&data)) {
+        if (!macro_fss_write_signal_check(&data.program, &data.setting.state)) {
           fss_write_main(&data);
         }
 
index d13bbcb9dfa070f5e02bfc12a17a2bddb49707e8..7cd3a705b1d396eef56a280a3da842a3b2e1b2fa 100644 (file)
@@ -66,7 +66,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           fss_write_setting_load(arguments, &data, 0);
         }
 
-        if (!fss_write_signal_check(&data)) {
+        if (!macro_fss_write_signal_check(&data.program, &data.setting.state)) {
           fss_write_main(&data);
         }
 
index dce63505b99a7e44428587632303105372b87990..5c6b3c1c9e4b7cd539d36858254b32bbb0ad50aa 100644 (file)
@@ -69,7 +69,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           fss_write_setting_load(arguments, &data, 0);
         }
 
-        if (!fss_write_signal_check(&data)) {
+        if (!macro_fss_write_signal_check(&data.program, &data.setting.state)) {
           fss_write_main(&data);
         }
 
index 384fc5d98634d82769902e740a1dc56bb69c3377..fe1117fb41a5ecf159271585497942119df3c3e0 100644 (file)
@@ -68,7 +68,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           fss_write_setting_load(arguments, &data, 0);
         }
 
-        if (!fss_write_signal_check(&data)) {
+        if (!macro_fss_write_signal_check(&data.program, &data.setting.state)) {
           fss_write_main(&data);
         }
 
index 7207e0928f218437b1fc885d5a2cc1762d4ab37c..4f91810275f30f5337c66934a2da476ab333a0d7 100644 (file)
@@ -68,7 +68,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           fss_write_setting_load(arguments, &data, 0);
         }
 
-        if (!fss_write_signal_check(&data)) {
+        if (!macro_fss_write_signal_check(&data.program, &data.setting.state)) {
           fss_write_main(&data);
         }
 
index d5e7ffc6f0ab1bfb81578175476eba663c844e11..7fa2ce87da69ede953724af7e6ea085a77f6d1d8 100644 (file)
@@ -100,18 +100,23 @@ extern "C" {
  * The program signal defines.
  *
  * fss_write_signal_*_d:
- *   - check:          Number of iterations before performing signal check in non-threaded signal handling.
  *   - check_failsafe: When using threads, how many consecutive failures to check signal before aborting (as a recursion failsafe).
- *   - check_tiny:     The tiny check.
- *   - check_short:    The short signal check.
  */
 #ifndef _di_fss_write_signal_d_
-  #define fss_write_signal_check_d          500000
   #define fss_write_signal_check_failsafe_d 20000
-  #define fss_write_signal_check_tiny_d     4
-  #define fss_write_signal_check_short_d    16
 #endif // _di_fss_write_signal_d_
 
+/**
+ * A macro wrapping the appropriate signal check function based on threaded/non-threaded support.
+ */
+#ifndef _di_fss_write_signal_check_d_
+  #ifdef _di_thread_support_
+    #define macro_fss_write_signal_check(program, state) fll_program_signal_check_loop(program, state)
+  #else
+    #define macro_fss_write_signal_check(program, state) fll_program_signal_check_simple(program, state)
+  #endif // _di_thread_support_
+#endif // _di_fss_write_signal_check_d_
+
 #ifdef __cplusplus
 } // extern "C"
 #endif
index 9433cfb025139e3ed238823ab4b6ab57855104ee..2662d160747e4377218e7b5358fd9ed9073004c5 100644 (file)
@@ -81,7 +81,7 @@ extern "C" {
     if (length) {
       for (f_number_unsigned_t i = 0; i < length; ++i) {
 
-        if (fss_write_signal_check(main)) return;
+        if (macro_fss_write_signal_check(&main->program, &main->setting.state)) return;
 
         if (main->setting.objects.used) {
           main->setting.object = &main->setting.objects.array[i];
@@ -185,7 +185,7 @@ extern "C" {
 
     for (;;) {
 
-      if (fss_write_signal_check(main)) break;
+      if (macro_fss_write_signal_check(&main->program, &main->setting.state)) break;
 
       if (range.start > range.stop) {
         if (status_pipe == F_okay_eof) break;
index 2ef7a03000a9c9784aa7e8786c10e0166672eff9..f7a184f2f25feda589f0782bc162119803fc3cbe 100644 (file)
@@ -65,7 +65,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           fss_write_setting_load(arguments, &data, &fss_write_main_setting_load_as);
         }
 
-        if (!fss_write_signal_check(&data)) {
+        if (!macro_fss_write_signal_check(&data.program, &data.setting.state)) {
           fss_write_main(&data);
         }
 
index 56a3955709752366d9794a8becbd0fc8531101c8..8a4644e11d5d06bf60248a40de92ba93bdd802ee 100644 (file)
@@ -4,41 +4,6 @@
 extern "C" {
 #endif
 
-#if !defined(_di_fss_write_signal_check_) && defined(_di_thread_support_)
-  f_status_t fss_write_signal_check(fss_write_main_t * const main) {
-
-    if (!main) return F_false;
-    if (main->program.signal_received) return F_true;
-
-    if (!((++main->program.signal_check) % fss_write_signal_check_d)) {
-      if (F_status_set_fine(fll_program_standard_signal_received(&main->program)) == F_interrupt) {
-        main->setting.state.status = F_status_set_error(F_interrupt);
-
-        return F_true;
-      }
-
-      main->program.signal_check = 0;
-    }
-
-    return F_false;
-  }
-#endif // !defined(_di_fss_write_signal_check_) && defined(_di_thread_support_)
-
-#if !defined(_di_fss_write_signal_check_) && !defined(_di_thread_support_)
-  f_status_t fss_write_signal_check(fss_write_main_t * const main) {
-
-    if (!main) return F_false;
-
-    if (main->program.signal_received) {
-      main->setting.state.status = F_status_set_error(F_interrupt);
-
-      return F_true;
-    }
-
-    return F_false;
-  }
-#endif // !defined(_di_fss_write_signal_check_) && !defined(_di_thread_support_)
-
 #if !defined(_di_fss_write_signal_handler_) && !defined(_di_thread_support_)
   void fss_write_signal_handler(fss_write_main_t * const main) {
 
index b301fa178b40264605e5ec8418caf1743fabe284..a4d70134bf859049e891c7f89e577c259aa769bf 100644 (file)
@@ -17,38 +17,6 @@ extern "C" {
 #endif
 
 /**
- * Check to see if a signal is received.
- *
- * If main.signal is non-zero, then this handles the following signals:
- *   - F_signal_abort
- *   - F_signal_broken_pipe
- *   - F_signal_hangup
- *   - F_signal_interrupt
- *   - F_signal_quit
- *   - F_signal_termination
- *
- * There is a threaded and a non-threaded version of this.
- * The non-threaded version checks periodically using fss_write_signal_check_d and updates main->signal_check as needed.
- * The threaded version checks the flag state which is set by a separate thread that is blocking until signal is received.
- *
- * @param main
- *   The main program and settings data.
- *
- *   This does not alter main.setting.state.status.
- *
- * @return
- *   F_true on signal received.
- *   F_false otherwise.
- *
- * @see fss_write_signal_handler()
- *
- * @see fll_program_standard_signal_received()
- */
-#ifndef _di_fss_write_signal_check_
-  extern f_status_t fss_write_signal_check(fss_write_main_t * const main);
-#endif // _di_fss_write_signal_check_
-
-/**
  * Signal handler for signals/interrupts.
  *
  * This blocks until an expected signal is recieved.
index e32c7daa8c1451fc97b46a0bf1fcae9141028703..c302eb063c9ad72c4ee42aa6b6be2d875d79ae65 100644 (file)
@@ -84,17 +84,7 @@ extern "C" {
 
     for (;;) {
 
-      if (!((++main->program.signal_check) % fss_write_signal_check_d)) {
-        if (fll_program_standard_signal_received(&main->program)) {
-          fll_program_print_signal_received(&main->program.warning, main->program.signal_received);
-
-          main->setting.state.status = F_status_set_error(F_interrupt);
-
-          break;
-        }
-
-        main->program.signal_check = 0;
-      }
+      if (macro_fss_write_signal_check(&main->program, &main->setting.state)) break;
 
       if (range.start > range.stop) {
         if (status_pipe == F_okay_eof) break;
index 4a8eee800a5729df9cfb71706f876ba8531ffe1f..eefd07c12a3177b8c272a98402abf4d10fccc43c 100644 (file)
@@ -67,7 +67,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           fss_write_setting_load(arguments, &data, &fss_write_payload_setting_load);
         }
 
-        if (!fss_write_signal_check(&data)) {
+        if (!macro_fss_write_signal_check(&data.program, &data.setting.state)) {
           fss_write_main(&data);
         }
 
index 176b4f1326fa356ca5494ae66ca6a2e6d1825ea8..f71dae7a9c26a0106765a65ea2a61852acf2a80f 100644 (file)
@@ -23,7 +23,7 @@ extern "C" {
 
         for (j = 0; j < data->vocabularys.array[i].used; ++j) {
 
-          if (iki_read_signal_check(main)) return;
+          if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return;
 
           if (main->setting.replace.used) {
             k = main->setting.replace.used - 1;
index 3c88a8ff94a8533824b6b2e80ad02f52d73d38c4..7c4c26ba39195ad4648b30e7ee16220329c2078c 100644 (file)
@@ -69,7 +69,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           iki_read_setting_load(arguments, &data, &iki_read_eki_setting_load);
         }
 
-        if (!iki_read_signal_check(&data)) {
+        if (!macro_iki_read_signal_check(&data.program, &data.setting.state)) {
           iki_read_main(&data);
         }
 
index 1208a881a81ec5b48c096e44ee2906b2692032fe..d7397d436d6927d9509a74c1b35e1d34fc52d4eb 100644 (file)
@@ -244,15 +244,15 @@ extern "C" {
 
       for (i = 0; i < data->vocabularys.used; ++i) {
 
-        if (iki_read_signal_check(main)) return;
+        if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return;
 
         for (j = 0; j < data->vocabularys.array[i].used; ++j) {
 
-          if (iki_read_signal_check(main)) return;
+          if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return;
 
           for (k = 0; k < main->setting.names.used; ++k) {
 
-            if (iki_read_signal_check(main)) return;
+            if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return;
 
             if (f_compare_dynamic_partial_string(main->setting.names.array[k].string, main->cache.buffer, main->setting.names.array[k].used, data->vocabularys.array[i].array[j]) == F_equal_to) {
               matched |= 0x1;
@@ -378,7 +378,7 @@ extern "C" {
         else if (main->setting.flag & iki_read_main_flag_line_d) {
           for (i = 0; F_status_is_error_not(main->setting.state.status) && i < data->variable.used; ++i) {
 
-            if (iki_read_signal_check(main)) return;
+            if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return;
 
             iki_read_eki_process_buffer_at(main, i);
             iki_read_process_buffer_at_newline(main);
@@ -398,7 +398,7 @@ extern "C" {
           else {
             for (i = 0; F_status_is_error_not(main->setting.state.status) && i < data->variable.used; ++i) {
 
-              if (iki_read_signal_check(main)) return;
+              if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return;
 
               iki_read_eki_process_buffer_at(main, i);
               iki_read_process_buffer_at_newline(main);
@@ -412,7 +412,7 @@ extern "C" {
 
           for (i = 0; i < data->variable.used; ++i) {
 
-            if (iki_read_signal_check(main)) return;
+            if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return;
 
             if (main->call.print_data) {
               main->call.print_data(&main->program.output, i);
@@ -521,7 +521,7 @@ extern "C" {
 
     while (i <= range_buffer->stop && j < stop) {
 
-      if (iki_read_signal_check(main)) return;
+      if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return;
 
       if (i < data->variable.array[j].start) {
         range_buffer->start = i;
@@ -656,7 +656,7 @@ extern "C" {
 
           for (i = 0; i < main->program.parameters.array[iki_read_parameter_name_e].values.used; ++i) {
 
-            if (iki_read_signal_check(main)) return;
+            if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return;
 
             index = main->program.parameters.array[iki_read_parameter_name_e].values.array[i];
             name.used = 0;
@@ -675,11 +675,11 @@ extern "C" {
 
             for (j = 0; j < data->vocabularys.used; ++j) {
 
-              if (iki_read_signal_check(main)) return;
+              if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return;
 
               for (k = 0; k < data->vocabularys.array[j].used; ++k) {
 
-                if (iki_read_signal_check(main)) return;
+                if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return;
 
                 main->setting.state.status = f_compare_dynamic_partial(name, main->cache.buffer, range, data->vocabularys.array[j].array[k]);
 
index 6e4af767a01902b981027e7bdf0da9c4d2bb53c6..00fd9415397ddd764042799ec3652195062ac847 100644 (file)
@@ -17,7 +17,7 @@ extern "C" {
 
     for (i = 0; i < data->vocabulary.used; ++i) {
 
-      if (iki_read_signal_check(main)) return;
+      if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return;
 
       if (main->setting.replace.used) {
         main->setting.map_replacess.array[i].used = 0;
index 531b0355e6b2bd0e157ecc39a703e992f2ae928e..b6f97d6565d3e8b15a4b4fa66102a07dd7e2caf6 100644 (file)
@@ -70,7 +70,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           iki_read_setting_load(arguments, &data, &iki_read_iki_setting_load);
         }
 
-        if (!iki_read_signal_check(&data)) {
+        if (!macro_iki_read_signal_check(&data.program, &data.setting.state)) {
           iki_read_main(&data);
         }
 
index 199c78fcf39ca13962e60711093d4f4d388d03b7..b3bc2618465ba2de9eea6958b22bca5512abffb9 100644 (file)
@@ -219,7 +219,7 @@ extern "C" {
 
         for (i = 0; i < data->vocabulary.used; ++i) {
 
-          if (iki_read_signal_check(main)) return;
+          if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return;
 
           if (f_compare_dynamic_partial_string(main->setting.names.array[j].string, main->cache.buffer, main->setting.names.array[j].used, data->vocabulary.array[i]) == F_equal_to) {
             matched |= 0x1;
@@ -335,7 +335,7 @@ extern "C" {
         else if (main->setting.flag & iki_read_main_flag_line_d) {
           for (i = 0; F_status_is_error_not(main->setting.state.status) && i < data->variable.used; ++i) {
 
-            if (iki_read_signal_check(main)) return;
+            if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return;
 
             iki_read_iki_process_buffer_at(main, i);
             iki_read_process_buffer_at_newline(main);
@@ -355,7 +355,7 @@ extern "C" {
           else {
             for (i = 0; F_status_is_error_not(main->setting.state.status) && i < data->variable.used; ++i) {
 
-              if (iki_read_signal_check(main)) return;
+              if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return;
 
               iki_read_iki_process_buffer_at(main, i);
               iki_read_process_buffer_at_newline(main);
@@ -369,7 +369,7 @@ extern "C" {
 
           for (i = 0; i < data->variable.used; ++i) {
 
-            if (iki_read_signal_check(main)) return;
+            if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return;
 
             if (main->call.print_data) {
               main->call.print_data(&main->program.output, i);
@@ -477,7 +477,7 @@ extern "C" {
 
     while (i <= range_buffer->stop && j < stop) {
 
-      if (iki_read_signal_check(main)) return;
+      if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return;
 
       if (i < data->variable.array[j].start) {
         range_buffer->start = i;
@@ -606,7 +606,7 @@ extern "C" {
 
           for (i = 0; i < main->program.parameters.array[iki_read_parameter_name_e].values.used; ++i) {
 
-            if (iki_read_signal_check(main)) return;
+            if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return;
 
             index = main->program.parameters.array[iki_read_parameter_name_e].values.array[i];
             name.used = 0;
@@ -625,7 +625,7 @@ extern "C" {
 
             for (j = 0; j < data->vocabulary.used; ++j) {
 
-              if (iki_read_signal_check(main)) return;
+              if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return;
 
               main->setting.state.status = f_compare_dynamic_partial(name, main->cache.buffer, range, data->vocabulary.array[j]);
 
index aab57323cedb245f05051683e7d2c9da3a6538d1..9700fc107214007260c61252b98a97ff755900a6 100644 (file)
@@ -119,18 +119,23 @@ extern "C" {
  * The program signal defines.
  *
  * iki_read_signal_*_d:
- *   - check:          Number of iterations before performing signal check in non-threaded signal handling.
  *   - check_failsafe: When using threads, how many consecutive failures to check signal before aborting (as a recursion failsafe).
- *   - check_tiny:     The tiny check.
- *   - check_short:    The short signal check.
  */
 #ifndef _di_iki_read_signal_d_
-  #define iki_read_signal_check_d          500000
   #define iki_read_signal_check_failsafe_d 20000
-  #define iki_read_signal_check_tiny_d     4
-  #define iki_read_signal_check_short_d    16
 #endif // _di_iki_read_signal_d_
 
+/**
+ * A macro wrapping the appropriate signal check function based on threaded/non-threaded support.
+ */
+#ifndef _di_iki_read_signal_check_d_
+  #ifdef _di_thread_support_
+    #define macro_iki_read_signal_check(program, state) fll_program_signal_check_loop(program, state)
+  #else
+    #define macro_iki_read_signal_check(program, state) fll_program_signal_check_simple(program, state)
+  #endif // _di_thread_support_
+#endif // _di_iki_read_signal_check_d_
+
 #ifdef __cplusplus
 } // extern "C"
 #endif
index 6f2edf8a0bdd65bf768f6744ccef49904a601f14..f3b7f47355bac757553955c6b3423623dcf11c87 100644 (file)
@@ -55,7 +55,7 @@ extern "C" {
 
       for (f_number_unsigned_t i = 0; i < main->setting.files.used; ++i) {
 
-        if (iki_read_signal_check(main)) return;
+        if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return;
 
         file.stream = 0;
         file.id = -1;
@@ -115,7 +115,7 @@ extern "C" {
 
         for (size_read = 0; size_read < size_file; size_read += size_block) {
 
-          if (size_file > iki_read_block_max_d && iki_read_signal_check(main)) break;
+          if (size_file > iki_read_block_max_d && macro_iki_read_signal_check(&main->program, &main->setting.state)) break;
 
           main->setting.state.status = f_file_stream_read_until(file, size_block, &main->cache.buffer);
           if (F_status_is_error(main->setting.state.status)) break;
index 4931f880ddccf4fd266264928e9ae7de449fe3fa..167b66c17e80ab6a6bb0d6fc1923df54e287e682 100644 (file)
@@ -24,7 +24,7 @@ extern "C" {
 
     for (f_number_unsigned_t first = 0; range.start <= range.stop && range.start < main->cache.expand.used; ) {
 
-      if (iki_read_signal_check(main)) return;
+      if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return;
 
       main->setting.state.status = f_string_dynamic_seek_line(main->cache.expand, &range);
       if (F_status_is_error(main->setting.state.status)) return;
@@ -76,7 +76,7 @@ extern "C" {
 
       for (; range.start <= range.stop && range.start < main->cache.expand.used; ++total, ++range.start) {
 
-        if (iki_read_signal_check(main)) return;
+        if (macro_iki_read_signal_check(&main->program, &main->setting.state)) return;
 
         main->setting.state.status = f_string_dynamic_seek_line(main->cache.expand, &range);
         if (F_status_is_error(main->setting.state.status)) return;
index 3fa064b5b70315a91899756041a65476baa492cf..1a788aa7d03985c5d8fc5a2739da346d6764e7d4 100644 (file)
@@ -30,7 +30,7 @@ extern "C" {
  *     F_data_not on success, but total is 0 or line is out of range.
  *
  *     Error (with error bit set) from f_string_dynamic_seek_line().
- *     Error (with error bit set) from iki_read_signal_check().
+ *     Error (with error bit set) from macro_iki_read_signal_check().
  *
  *     Error (with error bit) if status already has an error before start of function.
  */
@@ -48,13 +48,13 @@ extern "C" {
  *     F_okay on success and data was processed.
  *     F_data_not on success, but there was no data to process (0 is printed).
  *
- *     Signal from iki_read_signal_check().
+ *     Signal from macro_iki_read_signal_check().
  *
  *     Error (with error bit set) from f_string_dynamic_seek_line()
  *
  * @see f_string_dynamic_seek_line()
  *
- * @see iki_read_signal_check()
+ * @see macro_iki_read_signal_check()
  */
 #ifndef _di_iki_read_print_data_total_
   extern void iki_read_print_data_total(fl_print_t * const print, const f_number_unsigned_t);
@@ -77,12 +77,12 @@ extern "C" {
  *     F_data_not on success, but total is 0 or line is out of range.
  *
  *     Error (with error bit set) from f_string_dynamic_seek_line().
- *     Error (with error bit set) from iki_read_signal_check().
+ *     Error (with error bit set) from macro_iki_read_signal_check().
  *
  *     Error (with error bit) if status already has an error before start of function.
  *
  * @see f_string_dynamic_seek_line()
- * @see iki_read_signal_check()
+ * @see macro_iki_read_signal_check()
  */
 #ifndef _di_iki_read_print_data_line_total_expand_
   extern void iki_read_print_data_total_expand(fl_print_t * const print);
index e79cc9e7c7f41997085d1ecd4884ba670e788940..cf813a1d0fb2468f97861d1526224dfda70d2964 100644 (file)
@@ -4,41 +4,6 @@
 extern "C" {
 #endif
 
-#if !defined(_di_iki_read_signal_check_) && defined(_di_thread_support_)
-  f_status_t iki_read_signal_check(iki_read_main_t * const main) {
-
-    if (!main) return F_false;
-    if (main->program.signal_received) return F_true;
-
-    if (!((++main->program.signal_check) % iki_read_signal_check_d)) {
-      if (F_status_set_fine(fll_program_standard_signal_received(&main->program)) == F_interrupt) {
-        main->setting.state.status = F_status_set_error(F_interrupt);
-
-        return F_true;
-      }
-
-      main->program.signal_check = 0;
-    }
-
-    return F_false;
-  }
-#endif // !defined(_di_iki_read_signal_check_) && defined(_di_thread_support_)
-
-#if !defined(_di_iki_read_signal_check_) && !defined(_di_thread_support_)
-  f_status_t iki_read_signal_check(iki_read_main_t * const main) {
-
-    if (!main) return F_false;
-
-    if (main->program.signal_received) {
-      main->setting.state.status = F_status_set_error(F_interrupt);
-
-      return F_true;
-    }
-
-    return F_false;
-  }
-#endif // !defined(_di_iki_read_signal_check_) && !defined(_di_thread_support_)
-
 #if !defined(_di_iki_read_signal_handler_) && !defined(_di_thread_support_)
   void iki_read_signal_handler(iki_read_main_t * const main) {
 
index a8ece07bc8cfb4480ad558a5f1a9129caccb4200..8c9ba039764db31ab09ea6c3d27e12a65ba09025 100644 (file)
@@ -17,38 +17,6 @@ extern "C" {
 #endif
 
 /**
- * Check to see if a signal is received.
- *
- * If main.signal is non-zero, then this handles the following signals:
- *   - F_signal_abort
- *   - F_signal_broken_pipe
- *   - F_signal_hangup
- *   - F_signal_interrupt
- *   - F_signal_quit
- *   - F_signal_termination
- *
- * There is a threaded and a non-threaded version of this.
- * The non-threaded version checks periodically using iki_read_signal_check_d and updates main->signal_check as needed.
- * The threaded version checks the flag state which is set by a separate thread that is blocking until signal is received.
- *
- * @param main
- *   The main program and settings data.
- *
- *   This does not alter main.setting.state.status.
- *
- * @return
- *   F_true on signal received.
- *   F_false otherwise.
- *
- * @see iki_read_signal_handler()
- *
- * @see fll_program_standard_signal_received()
- */
-#ifndef _di_iki_read_signal_check_
-  extern f_status_t iki_read_signal_check(iki_read_main_t * const main);
-#endif // _di_iki_read_signal_check_
-
-/**
  * Signal handler for signals/interrupts.
  *
  * This blocks until an expected signal is recieved.
index d17fcfee4aa7e7b47d2ebf624264b650e7c627a1..26ae3317b68ec051534f13389a269900bce0a8b4 100644 (file)
@@ -41,7 +41,7 @@ extern "C" {
       // Construct the array without allocating any more memory by setting this as a static string (used > 0, size = 0).
       for (index = 0; at_object < object->values.used; ) {
 
-        if (iki_write_signal_check(main)) return;
+        if (macro_iki_write_signal_check(&main->program, &main->setting.state)) return;
 
         main->setting.state.status = f_memory_array_increase(main->setting.state.step_small, sizeof(f_string_dynamic_t), (void **) &objectss->array[objectss->used].array, &objectss->array[objectss->used].used, &objectss->array[objectss->used].size);
 
@@ -105,7 +105,7 @@ extern "C" {
       // Construct the array without allocating any more memory by setting this as a static string (used > 0, size = 0).
       for (index = 0; main->setting.contents.used < content->values.used; ) {
 
-        if (iki_write_signal_check(main)) return;
+        if (macro_iki_write_signal_check(&main->program, &main->setting.state)) return;
 
         index = content->values.array[main->setting.contents.used];
 
index a0d10a0babd5ee6b7c65ef90528219fcbbe65016..e0bf33fa53fe00170999f286869e5b8ded310012 100644 (file)
@@ -59,7 +59,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           iki_write_setting_load(arguments, &data, &iki_write_eki_setting_load);
         }
 
-        if (!iki_write_signal_check(&data)) {
+        if (!macro_iki_write_signal_check(&data.program, &data.setting.state)) {
           iki_write_main(&data);
         }
 
index d55fb0d663ea984c5e527ecf1a920c5b7aacef31..72a9e8f3d9d55bf0f909359bd6aa7b143d15a7eb 100644 (file)
@@ -43,7 +43,7 @@ extern "C" {
 
       for (; range_object.start <= range_object.stop; ++total) {
 
-        if (iki_write_signal_check(main)) return;
+        if (macro_iki_write_signal_check(&main->program, &main->setting.state)) return;
 
         main->setting.state.status = f_string_dynamic_seek_to(main->cache.buffer, f_string_ascii_space_back_s.string[0], &range_object);
 
@@ -83,7 +83,7 @@ extern "C" {
 
       for (; i < total; ++i) {
 
-        if (iki_write_signal_check(main)) return;
+        if (macro_iki_write_signal_check(&main->program, &main->setting.state)) return;
 
         main->cache.objects.array[main->cache.objects.used].used = 0;
 
index 22c68db24a48e92c28bc5d5eadbd8df781441715..79de01ca091657f89c1fe04dcec7fdc4b807aad9 100644 (file)
@@ -36,7 +36,7 @@ extern "C" {
       // Construct the array without allocating any more memory by setting this as a static string (used > 0, size = 0).
       for (index = 0; main->setting.objectss.used < values->used; ) {
 
-        if (iki_write_signal_check(main)) return;
+        if (macro_iki_write_signal_check(&main->program, &main->setting.state)) return;
 
         main->setting.state.status = f_memory_arrays_resize(1, sizeof(f_string_dynamic_t), (void **) &main->setting.objectss.array[main->setting.objectss.used].array, &main->setting.objectss.array[main->setting.objectss.used].used, &main->setting.objectss.array[main->setting.objectss.used].size, &f_string_dynamics_delete_callback);
 
@@ -80,7 +80,7 @@ extern "C" {
       // Construct the array without allocating any more memory by setting this as a static string (used > 0, size = 0).
       for (index = 0; main->setting.contents.used < values->used; ) {
 
-        if (iki_write_signal_check(main)) return;
+        if (macro_iki_write_signal_check(&main->program, &main->setting.state)) return;
 
         index = values->array[main->setting.contents.used];
 
index 257301482f150eae37c3082321810184da59fff5..0164f4a2db2c29cad7a9875212c6696cee3dc643 100644 (file)
@@ -59,7 +59,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           iki_write_setting_load(arguments, &data, &iki_write_iki_setting_load);
         }
 
-        if (!iki_write_signal_check(&data)) {
+        if (!macro_iki_write_signal_check(&data.program, &data.setting.state)) {
           iki_write_main(&data);
         }
 
index e3262f3d6c859182749109d96ab03f1016595e12..44ca2af84f91db4d828eeba6761cb555acf69b23 100644 (file)
@@ -87,18 +87,23 @@ extern "C" {
  * The program signal defines.
  *
  * iki_write_signal_*_d:
- *   - check:          Number of iterations before performing signal check in non-threaded signal handling.
  *   - check_failsafe: When using threads, how many consecutive failures to check signal before aborting (as a recursion failsafe).
- *   - check_tiny:     The tiny check.
- *   - check_short:    The short signal check.
  */
 #ifndef _di_iki_write_signal_d_
-  #define iki_write_signal_check_d          500000
   #define iki_write_signal_check_failsafe_d 20000
-  #define iki_write_signal_check_tiny_d     4
-  #define iki_write_signal_check_short_d    16
 #endif // _di_iki_write_signal_d_
 
+/**
+ * A macro wrapping the appropriate signal check function based on threaded/non-threaded support.
+ */
+#ifndef _di_iki_write_signal_check_d_
+  #ifdef _di_thread_support_
+    #define macro_iki_write_signal_check(program, state) fll_program_signal_check_loop(program, state)
+  #else
+    #define macro_iki_write_signal_check(program, state) fll_program_signal_check_simple(program, state)
+  #endif // _di_thread_support_
+#endif // _di_byte_dump_signal_check_d_
+
 #ifdef __cplusplus
 } // extern "C"
 #endif
index d4a7052096f0914503e1dc74e167dc7c8906c277..5461f3d8bcc3ec7ef4396cb859f95dbafc93980f 100644 (file)
@@ -48,7 +48,7 @@ extern "C" {
       range.start = 0;
 
       do {
-        if (iki_write_signal_check(main)) return;
+        if (macro_iki_write_signal_check(&main->program, &main->setting.state)) return;
 
         if (status != F_okay_eof) {
           status = f_file_read(pipe, &main->cache.buffer);
@@ -123,7 +123,7 @@ extern "C" {
     if (F_status_is_error_not(main->setting.state.status) && F_status_set_fine(main->setting.state.status) != F_interrupt) {
       for (f_number_unsigned_t i = 0; i < main->setting.objectss.used; ++i) {
 
-        if (iki_write_signal_check(main)) return;
+        if (macro_iki_write_signal_check(&main->program, &main->setting.state)) return;
 
         main->call.process_objects_content((void *) main, main->setting.objectss.array[i], main->setting.contents.array[i]);
         if (F_status_is_error(main->setting.state.status)) break;
index 10eeedc1f7642a7bea5f017c9cfa3fcaeb0886b6..87360638b1dc79f8db071071f4799567f6deb968 100644 (file)
@@ -4,41 +4,6 @@
 extern "C" {
 #endif
 
-#if !defined(_di_iki_write_signal_check_) && defined(_di_thread_support_)
-  f_status_t iki_write_signal_check(iki_write_main_t * const main) {
-
-    if (!main) return F_false;
-    if (main->program.signal_received) return F_true;
-
-    if (!((++main->program.signal_check) % iki_write_signal_check_d)) {
-      if (F_status_set_fine(fll_program_standard_signal_received(&main->program)) == F_interrupt) {
-        main->setting.state.status = F_status_set_error(F_interrupt);
-
-        return F_true;
-      }
-
-      main->program.signal_check = 0;
-    }
-
-    return F_false;
-  }
-#endif // !defined(_di_iki_write_signal_check_) && defined(_di_thread_support_)
-
-#if !defined(_di_iki_write_signal_check_) && !defined(_di_thread_support_)
-  f_status_t iki_write_signal_check(iki_write_main_t * const main) {
-
-    if (!main) return F_false;
-
-    if (main->program.signal_received) {
-      main->setting.state.status = F_status_set_error(F_interrupt);
-
-      return F_true;
-    }
-
-    return F_false;
-  }
-#endif // !defined(_di_iki_write_signal_check_) && !defined(_di_thread_support_)
-
 #if !defined(_di_iki_write_signal_handler_) && !defined(_di_thread_support_)
   void iki_write_signal_handler(iki_write_main_t * const main) {
 
index 9940896d95deb3ee4f7769908a21218350cf2327..1c02f4cd929a06c70dfddf64b38c44dd48bf1fe8 100644 (file)
@@ -17,38 +17,6 @@ extern "C" {
 #endif
 
 /**
- * Check to see if a signal is received.
- *
- * If main.signal is non-zero, then this handles the following signals:
- *   - F_signal_abort
- *   - F_signal_broken_pipe
- *   - F_signal_hangup
- *   - F_signal_interrupt
- *   - F_signal_quit
- *   - F_signal_termination
- *
- * There is a threaded and a non-threaded version of this.
- * The non-threaded version checks periodically using iki_write_signal_check_d and updates main->signal_check as needed.
- * The threaded version checks the flag state which is set by a separate thread that is blocking until signal is received.
- *
- * @param main
- *   The main program and settings data.
- *
- *   This does not alter main.setting.state.status.
- *
- * @return
- *   F_true on signal received.
- *   F_false otherwise.
- *
- * @see iki_write_signal_handler()
- *
- * @see fll_program_standard_signal_received()
- */
-#ifndef _di_iki_write_signal_check_
-  extern f_status_t iki_write_signal_check(iki_write_main_t * const main);
-#endif // _di_iki_write_signal_check_
-
-/**
  * Signal handler for signals/interrupts.
  *
  * This blocks until an expected signal is recieved.
index 284296f2ae9293efa6385b42d34c9f5aaf86ce95..78c5107b45b0ba304350f100888d92af6021917f 100644 (file)
@@ -63,7 +63,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           status_code_setting_load(arguments, &data);
         }
 
-        if (!status_code_signal_check(&data)) {
+        if (!macro_status_code_signal_check(&data.program, &data.setting.state)) {
           status_code_main(&data);
         }
 
index 5af2fc653542649e0271957fb791cddb79c542cb..d665afac4d216e8e6b372368f5b37a26f9301ae7 100644 (file)
@@ -89,18 +89,23 @@ extern "C" {
  * The program signal defines.
  *
  * status_code_signal_*_d:
- *   - check:          Number of iterations before performing signal check in non-threaded signal handling.
  *   - check_failsafe: When using threads, how many consecutive failures to check signal before aborting (as a recursion failsafe).
- *   - check_tiny:     The tiny check.
- *   - check_short:    The short signal check.
  */
 #ifndef _di_status_code_signal_d_
-  #define status_code_signal_check_d          500000
   #define status_code_signal_check_failsafe_d 20000
-  #define status_code_signal_check_tiny_d     4
-  #define status_code_signal_check_short_d    16
 #endif // _di_status_code_signal_d_
 
+/**
+ * A macro wrapping the appropriate signal check function based on threaded/non-threaded support.
+ */
+#ifndef _di_status_code_signal_check_d_
+  #ifdef _di_thread_support_
+    #define macro_status_code_signal_check(program, state) fll_program_signal_check_loop(program, state)
+  #else
+    #define macro_status_code_signal_check(program, state) fll_program_signal_check_simple(program, state)
+  #endif // _di_thread_support_
+#endif // _di_status_code_signal_check_d_
+
 #ifdef __cplusplus
 } // extern "C"
 #endif
index 0cc4afa195e6f0be4623973c67a59e93d1814f27..fbe2be6068f9c3d864c36d1f6ef2edc99ade66a6 100644 (file)
@@ -61,7 +61,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           status_code_setting_load(arguments, &data);
         }
 
-        if (!status_code_signal_check(&data)) {
+        if (!macro_status_code_signal_check(&data.program, &data.setting.state)) {
           status_code_main(&data);
         }
 
index 3be8e85402a5e346a8c945cc38f3366b6754f3da..9463972f8eba8c4a97d3e6815f0ce1ecaf749dc1 100644 (file)
@@ -4,41 +4,6 @@
 extern "C" {
 #endif
 
-#if !defined(_di_status_code_signal_check_) && defined(_di_thread_support_)
-  f_status_t status_code_signal_check(status_code_main_t * const main) {
-
-    if (!main) return F_false;
-    if (main->program.signal_received) return F_true;
-
-    if (!((++main->program.signal_check) % status_code_signal_check_d)) {
-      if (F_status_set_fine(fll_program_standard_signal_received(&main->program)) == F_interrupt) {
-        main->setting.state.status = F_status_set_error(F_interrupt);
-
-        return F_true;
-      }
-
-      main->program.signal_check = 0;
-    }
-
-    return F_false;
-  }
-#endif // !defined(_di_status_code_signal_check_) && defined(_di_thread_support_)
-
-#if !defined(_di_status_code_signal_check_) && !defined(_di_thread_support_)
-  f_status_t status_code_signal_check(status_code_main_t * const main) {
-
-    if (!main) return F_false;
-
-    if (main->program.signal_received) {
-      main->setting.state.status = F_status_set_error(F_interrupt);
-
-      return F_true;
-    }
-
-    return F_false;
-  }
-#endif // !defined(_di_status_code_signal_check_) && !defined(_di_thread_support_)
-
 #if !defined(_di_status_code_signal_handler_) && !defined(_di_thread_support_)
   void status_code_signal_handler(status_code_main_t * const main) {
 
index bf9fb19e52c04d35d13fc0dafecdee48719560d1..e64bf48a4371fe2e107858e1279bb437998eee37 100644 (file)
@@ -17,38 +17,6 @@ extern "C" {
 #endif
 
 /**
- * Check to see if a signal is received.
- *
- * If main.signal is non-zero, then this handles the following signals:
- *   - F_signal_abort
- *   - F_signal_broken_pipe
- *   - F_signal_hangup
- *   - F_signal_interrupt
- *   - F_signal_quit
- *   - F_signal_termination
- *
- * There is a threaded and a non-threaded version of this.
- * The non-threaded version checks periodically using status_code_signal_check_d and updates main->signal_check as needed.
- * The threaded version checks the flag state which is set by a separate thread that is blocking until signal is received.
- *
- * @param main
- *   The main program and settings data.
- *
- *   This does not alter main.setting.state.status.
- *
- * @return
- *   F_true on signal received.
- *   F_false otherwise.
- *
- * @see status_code_signal_handler()
- *
- * @see fll_program_standard_signal_received()
- */
-#ifndef _di_status_code_signal_check_
-  extern f_status_t status_code_signal_check(status_code_main_t * const main);
-#endif // _di_status_code_signal_check_
-
-/**
  * Signal handler for signals/interrupts.
  *
  * This blocks until an expected signal is recieved.
index 118f19d3c734f6fbd1c7ffe3808b7c4ead4954f2..f224e027974738a9af0b5b489142a05357343880 100644 (file)
@@ -55,7 +55,7 @@ extern "C" {
 
         for (f_number_unsigned_t i = 0; i < main->program.parameters.remaining.used; ++i) {
 
-          if (status_code_signal_check(main)) break;
+          if (macro_status_code_signal_check(&main->program, &main->setting.state)) break;
 
           status = main->setting.state.status;
 
@@ -79,7 +79,7 @@ extern "C" {
 
         for (f_number_unsigned_t i = 0; i < main->program.parameters.remaining.used; ++i) {
 
-          if (status_code_signal_check(main)) break;
+          if (macro_status_code_signal_check(&main->program, &main->setting.state)) break;
 
           status = main->setting.state.status;
 
@@ -103,7 +103,7 @@ extern "C" {
 
         for (f_number_unsigned_t i = 0; i < main->program.parameters.remaining.used; ++i) {
 
-          if (status_code_signal_check(main)) break;
+          if (macro_status_code_signal_check(&main->program, &main->setting.state)) break;
 
           status = main->setting.state.status;
 
index 5f640ecf92f81a747d333516f88670a4b11642e0..0ed2f783e7d5f24a313401aec66901af81f52e1b 100644 (file)
@@ -79,7 +79,7 @@ extern "C" {
 
       for (i = 0; F_status_is_error_not(main->setting.state.status) && i < main->setting.buffer.used; ) {
 
-        if (utf8_signal_check(main)) return;
+        if (macro_utf8_signal_check(&main->program, &main->setting.state)) return;
 
         main->setting.state.status = F_okay;
 
index fddcce58ca3b9ed489a18ed6465721535c84ccc9..de76e4342445dd04021513fbb724965728358843 100644 (file)
@@ -350,7 +350,7 @@ extern "C" {
 
       for (i = 0; F_status_is_error_not(main->setting.state.status) && i < main->setting.buffer.used; ) {
 
-        if (utf8_signal_check(main)) return;
+        if (macro_utf8_signal_check(&main->program, &main->setting.state)) return;
 
         main->setting.state.status = F_okay;
 
index f541f7469e735313127ce20bd353eebcacce14e1..488fb432eb8f9e08ff9b98a468bd79f5f71c056d 100644 (file)
@@ -117,18 +117,23 @@ extern "C" {
  * The program signal defines.
  *
  * utf8_signal_*_d:
- *   - check:          Number of iterations before performing signal check in non-threaded signal handling.
  *   - check_failsafe: When using threads, how many consecutive failures to check signal before aborting (as a recursion failsafe).
- *   - check_tiny:     The tiny check.
- *   - check_short:    The short signal check.
  */
 #ifndef _di_utf8_signal_d_
-  #define utf8_signal_check_d          500000
   #define utf8_signal_check_failsafe_d 20000
-  #define utf8_signal_check_tiny_d     4
-  #define utf8_signal_check_short_d    16
 #endif // _di_utf8_signal_d_
 
+/**
+ * A macro wrapping the appropriate signal check function based on threaded/non-threaded support.
+ */
+#ifndef _di_utf8_signal_check_d_
+  #ifdef _di_thread_support_
+    #define macro_utf8_signal_check(program, state) fll_program_signal_check_loop(program, state)
+  #else
+    #define macro_utf8_signal_check(program, state) fll_program_signal_check_simple(program, state)
+  #endif // _di_thread_support_
+#endif // _di_utf8_signal_check_d_
+
 #ifdef __cplusplus
 } // extern "C"
 #endif
index 589a29f06185f169808355db1b9d6a4ad3625545..7d83edc89fccf10e57302cfb742dc4b79166d065 100644 (file)
@@ -55,7 +55,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           utf8_setting_load(arguments, &data);
         }
 
-        if (!utf8_signal_check(&data)) {
+        if (!macro_utf8_signal_check(&data.program, &data.setting.state)) {
           utf8_main(&data);
         }
 
index 0e565b4a802e81ac795a88d2794c59f31d0c8b87..feb8e8bc93d05ad0dea93c43715fe787e2ae00a3 100644 (file)
@@ -26,7 +26,7 @@ extern "C" {
 
     for (; text.string[0] && F_status_is_error_not(main->setting.state.status); ) {
 
-      if (utf8_signal_check(main)) return;
+      if (macro_utf8_signal_check(&main->program, &main->setting.state)) return;
 
       main->setting.state.status = F_okay;
 
index ce5fa2b3149adf3d47c8470ba38d33b3045a3673..c9e145acd587ead2eff387b92ed8a6166de43b52 100644 (file)
@@ -4,41 +4,6 @@
 extern "C" {
 #endif
 
-#if !defined(_di_utf8_signal_check_) && defined(_di_thread_support_)
-  f_status_t utf8_signal_check(utf8_main_t * const main) {
-
-    if (!main) return F_false;
-    if (main->program.signal_received) return F_true;
-
-    if (!((++main->program.signal_check) % utf8_signal_check_d)) {
-      if (F_status_set_fine(fll_program_standard_signal_received(&main->program)) == F_interrupt) {
-        main->setting.state.status = F_status_set_error(F_interrupt);
-
-        return F_true;
-      }
-
-      main->program.signal_check = 0;
-    }
-
-    return F_false;
-  }
-#endif // !defined(_di_utf8_signal_check_) && defined(_di_thread_support_)
-
-#if !defined(_di_utf8_signal_check_) && !defined(_di_thread_support_)
-  f_status_t utf8_signal_check(utf8_main_t * const main) {
-
-    if (!main) return F_false;
-
-    if (main->program.signal_received) {
-      main->setting.state.status = F_status_set_error(F_interrupt);
-
-      return F_true;
-    }
-
-    return F_false;
-  }
-#endif // !defined(_di_utf8_signal_check_) && !defined(_di_thread_support_)
-
 #if !defined(_di_utf8_signal_handler_) && !defined(_di_thread_support_)
   void utf8_signal_handler(utf8_main_t * const main) {
 
index c18cf59f1ff15bedb152e03cdbbc774980590211..e7b354620bcfc6a367bc12ceabaceedebcf15eb0 100644 (file)
@@ -17,38 +17,6 @@ extern "C" {
 #endif
 
 /**
- * Check to see if a signal is received.
- *
- * If main.signal is non-zero, then this handles the following signals:
- *   - F_signal_abort
- *   - F_signal_broken_pipe
- *   - F_signal_hangup
- *   - F_signal_interrupt
- *   - F_signal_quit
- *   - F_signal_termination
- *
- * There is a threaded and a non-threaded version of this.
- * The non-threaded version checks periodically using utf8_signal_check_d and updates main->signal_check as needed.
- * The threaded version checks the flag state which is set by a separate thread that is blocking until signal is received.
- *
- * @param main
- *   The main program and settings data.
- *
- *   This does not alter main.setting.state.status.
- *
- * @return
- *   F_true on signal received.
- *   F_false otherwise.
- *
- * @see utf8_signal_handler()
- *
- * @see fll_program_standard_signal_received()
- */
-#ifndef _di_utf8_signal_check_
-  extern f_status_t utf8_signal_check(utf8_main_t * const main);
-#endif // _di_utf8_signal_check_
-
-/**
  * Signal handler for signals/interrupts.
  *
  * This blocks until an expected signal is recieved.
index d70eb688e2d5a0d805ca9e2338ae816fcddd546e..16fdcd48ba421719a1f6571bd8c55d602bab059f 100644 (file)
@@ -65,7 +65,7 @@ extern "C" {
 
       for (f_number_unsigned_t i = 0; i < main->setting.path_files_from.used && F_status_is_error_not(main->setting.state.status); ++i) {
 
-        if (utf8_signal_check(main)) return;
+        if (macro_utf8_signal_check(&main->program, &main->setting.state)) return;
 
         utf8_print_data_section_header_file(&main->program.output, main->setting.path_files_from.array[i], i);
 
@@ -129,7 +129,7 @@ extern "C" {
     if (F_status_is_error_not(main->setting.state.status) && main->setting.remaining.used) {
       for (f_number_unsigned_t i = 0; F_status_is_error_not(main->setting.state.status) && i < main->setting.remaining.used; ++i) {
 
-        if (utf8_signal_check(main)) return;
+        if (macro_utf8_signal_check(&main->program, &main->setting.state)) return;
 
         utf8_print_data_section_header_parameter(&main->program.output, i);