diff --git a/fakegen.rb b/fakegen.rb
index 3cfdbee..262a4a0 100644
--- a/fakegen.rb
+++ b/fakegen.rb
@@ -11,16 +11,20 @@
 def include_dependencies
   putd "#include <stdarg.h>"
   putd "#include <string.h> /* For memset and memcpy */"
-  putd ""
+  puts
 end
 
 def output_constants
   putd "#define FFF_MAX_ARGS (#{$MAX_ARGS}u)"
   putd "#ifndef FFF_ARG_HISTORY_LEN"
-  putd "    #define FFF_ARG_HISTORY_LEN (#{$DEFAULT_ARG_HISTORY}u)"
+  indent {
+    putd "#define FFF_ARG_HISTORY_LEN (#{$DEFAULT_ARG_HISTORY}u)"
+  }
   putd "#endif"
   putd "#ifndef FFF_CALL_HISTORY_LEN"
-  putd "  #define FFF_CALL_HISTORY_LEN (#{$MAX_CALL_HISTORY}u)"
+  indent {
+    putd "#define FFF_CALL_HISTORY_LEN (#{$MAX_CALL_HISTORY}u)"
+  }
   putd "#endif"
 end
 
@@ -49,121 +53,159 @@
   define_reset_fake_helper
   
   putd "/* -- END INTERNAL HELPER MACROS -- */"
-  putd ""
+  puts
 end
 
 def define_return_sequence_helper
-  putd "#define SET_RETURN_SEQ(FUNCNAME, ARRAY_POINTER, ARRAY_LEN) \\"
-  putd "                        FUNCNAME##_fake.return_val_seq = ARRAY_POINTER; \\"
-  putd "                        FUNCNAME##_fake.return_val_seq_len = ARRAY_LEN;"
+  putd_backslash "#define SET_RETURN_SEQ(FUNCNAME, ARRAY_POINTER, ARRAY_LEN)"
+  indent {
+    putd_backslash "FUNCNAME##_fake.return_val_seq = ARRAY_POINTER;"
+    putd "FUNCNAME##_fake.return_val_seq_len = ARRAY_LEN;"
+  }
 end
 
 def define_custom_fake_sequence_helper
-  putd "#define SET_CUSTOM_FAKE_SEQ(FUNCNAME, ARRAY_POINTER, ARRAY_LEN) \\"
-  putd "                            FUNCNAME##_fake.custom_fake_seq = ARRAY_POINTER; \\"
-  putd "                            FUNCNAME##_fake.custom_fake_seq_len = ARRAY_LEN;"
+  putd_backslash "#define SET_CUSTOM_FAKE_SEQ(FUNCNAME, ARRAY_POINTER, ARRAY_LEN)"
+  indent {
+    putd_backslash "FUNCNAME##_fake.custom_fake_seq = ARRAY_POINTER;"
+    putd "FUNCNAME##_fake.custom_fake_seq_len = ARRAY_LEN;"
+  }
 end
 
 def define_reset_fake_macro
-  putd ""
+  puts
   putd "/* Defining a function to reset a fake function */"
-  putd "#define RESET_FAKE(FUNCNAME) { \\"
-  putd "    FUNCNAME##_reset(); \\"
-  putd "} \\"
-  putd ""
+  putd_backslash "#define RESET_FAKE(FUNCNAME) {"
+  indent {
+    putd_backslash "FUNCNAME##_reset();"
+  }
+  putd_backslash "}"
+  puts
 end
 
 def define_declare_arg_helper
-  putd ""
-  putd "#define DECLARE_ARG(type, n, FUNCNAME) \\"
-  putd "    type arg##n##_val; \\"
-  putd "    type arg##n##_history[FFF_ARG_HISTORY_LEN];"
+  puts
+  putd_backslash "#define DECLARE_ARG(type, n, FUNCNAME)"
+  indent {
+    putd_backslash "type arg##n##_val;"
+    putd "type arg##n##_history[FFF_ARG_HISTORY_LEN];"
+  }
 end
 
 def define_declare_all_func_common_helper
-  putd ""
-  putd "#define DECLARE_ALL_FUNC_COMMON \\"
-  putd "    unsigned int call_count; \\"
-  putd "    unsigned int arg_history_len;\\"
-  putd "    unsigned int arg_histories_dropped; \\"
+  puts
+  putd_backslash "#define DECLARE_ALL_FUNC_COMMON"
+  indent {
+    putd_backslash "unsigned int call_count;"
+    putd_backslash "unsigned int arg_history_len;"
+    putd_backslash "unsigned int arg_histories_dropped;"
+  }
 end
 
 def define_save_arg_helper
-  putd ""
-  putd "#define SAVE_ARG(FUNCNAME, n) \\"
-  putd "    memcpy((void*)&FUNCNAME##_fake.arg##n##_val, (void*)&arg##n, sizeof(arg##n));"
+  puts
+  putd_backslash "#define SAVE_ARG(FUNCNAME, n)"
+  indent {
+    putd "memcpy((void*)&FUNCNAME##_fake.arg##n##_val, (void*)&arg##n, sizeof(arg##n));"
+  }
 end
 
 def define_room_for_more_history
-  putd ""
-  putd "#define ROOM_FOR_MORE_HISTORY(FUNCNAME) \\"
-  putd "  FUNCNAME##_fake.call_count < FFF_ARG_HISTORY_LEN"
+  puts
+  putd_backslash "#define ROOM_FOR_MORE_HISTORY(FUNCNAME)"
+  indent {
+    putd "FUNCNAME##_fake.call_count < FFF_ARG_HISTORY_LEN"
+  }
 end
 
 def define_save_arg_history_helper
-  putd ""
-  putd "#define SAVE_ARG_HISTORY(FUNCNAME, ARGN) \\"
-  putd "    memcpy((void*)&FUNCNAME##_fake.arg##ARGN##_history[FUNCNAME##_fake.call_count], (void*)&arg##ARGN, sizeof(arg##ARGN));"
+  puts
+  putd_backslash "#define SAVE_ARG_HISTORY(FUNCNAME, ARGN)"
+  indent {
+    putd "memcpy((void*)&FUNCNAME##_fake.arg##ARGN##_history[FUNCNAME##_fake.call_count], (void*)&arg##ARGN, sizeof(arg##ARGN));"
+  }
 end
 
 def define_history_dropped_helper
-  putd ""
-  putd "#define HISTORY_DROPPED(FUNCNAME) \\"
-  putd "    FUNCNAME##_fake.arg_histories_dropped++"
+  puts
+  putd_backslash "#define HISTORY_DROPPED(FUNCNAME)"
+  indent {
+    putd "FUNCNAME##_fake.arg_histories_dropped++"
+  }
 end
 
 def define_value_function_variables_helper
-  putd ""
-  putd "#define DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \\"
-  putd "    RETURN_TYPE return_val; \\" 
-  putd "    int return_val_seq_len; \\" 
-  putd "    int return_val_seq_idx; \\" 
-  putd "    RETURN_TYPE * return_val_seq; \\"
+  puts
+  putd_backslash "#define DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)"
+  indent {
+    putd_backslash "RETURN_TYPE return_val;" 
+    putd_backslash "int return_val_seq_len;" 
+    putd_backslash "int return_val_seq_idx;" 
+    putd_backslash "RETURN_TYPE * return_val_seq;"
+  }
 end
 
 def define_custom_fake_seq_variables_helper
-  putd ""
-  putd "#define DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \\"
-  putd "    int custom_fake_seq_len; \\"
-  putd "    int custom_fake_seq_idx; \\"
+  puts
+  putd_backslash "#define DECLARE_CUSTOM_FAKE_SEQ_VARIABLES"
+  indent {
+    putd_backslash "int custom_fake_seq_len;"
+    putd_backslash "int custom_fake_seq_idx;"
+  }
 end
 
 def define_increment_call_count_helper
-  putd ""
-  putd "#define INCREMENT_CALL_COUNT(FUNCNAME) \\"
-  putd "    FUNCNAME##_fake.call_count++"
+  puts
+  putd_backslash "#define INCREMENT_CALL_COUNT(FUNCNAME)"
+  indent {
+    putd "FUNCNAME##_fake.call_count++"
+  }
 end
 
 def define_return_fake_result_helper
-  putd ""
-  putd "#define RETURN_FAKE_RESULT(FUNCNAME) \\"
-  putd "    if (FUNCNAME##_fake.return_val_seq_len){ /* then its a sequence */ \\"
-  putd "        if(FUNCNAME##_fake.return_val_seq_idx < FUNCNAME##_fake.return_val_seq_len) { \\"
-  putd "            return FUNCNAME##_fake.return_val_seq[FUNCNAME##_fake.return_val_seq_idx++]; \\"
-  putd "        } \\"
-  putd "        return FUNCNAME##_fake.return_val_seq[FUNCNAME##_fake.return_val_seq_len-1]; /* return last element */ \\"
-  putd "    } \\"
-  putd "    return FUNCNAME##_fake.return_val; \\"
+  puts
+  putd_backslash "#define RETURN_FAKE_RESULT(FUNCNAME)"
+  indent {
+    putd_backslash "if (FUNCNAME##_fake.return_val_seq_len){ /* then its a sequence */"
+    indent {
+      putd_backslash "if(FUNCNAME##_fake.return_val_seq_idx < FUNCNAME##_fake.return_val_seq_len) {"
+      indent {
+        putd_backslash "return FUNCNAME##_fake.return_val_seq[FUNCNAME##_fake.return_val_seq_idx++];"
+      }
+      putd_backslash "}"
+      putd_backslash "return FUNCNAME##_fake.return_val_seq[FUNCNAME##_fake.return_val_seq_len-1]; /* return last element */"
+    }
+    putd_backslash "}"
+    putd_backslash "return FUNCNAME##_fake.return_val;"
+  }
 end
 
 def define_extern_c_helper
-  putd ""
+  puts
   putd "#ifdef __cplusplus"
-  putd "    #define FFF_EXTERN_C extern \"C\"{" 
-  putd "    #define FFF_END_EXTERN_C } " 
+  indent {
+    putd "#define FFF_EXTERN_C extern \"C\"{" 
+    putd "#define FFF_END_EXTERN_C } " 
+  }
   putd "#else  /* ansi c */"
-  putd "    #define FFF_EXTERN_C "
-  putd "    #define FFF_END_EXTERN_C "
+  indent {
+    putd "#define FFF_EXTERN_C "
+    putd "#define FFF_END_EXTERN_C "
+  }
   putd "#endif  /* cpp/ansi c */"
 end
 
 def define_reset_fake_helper
-  putd ""
-  putd "#define DEFINE_RESET_FUNCTION(FUNCNAME) \\"
-  putd "    void FUNCNAME##_reset(void){ \\"
-  putd "        memset(&FUNCNAME##_fake, 0, sizeof(FUNCNAME##_fake)); \\"
-  putd "        FUNCNAME##_fake.arg_history_len = FFF_ARG_HISTORY_LEN;\\"
-  putd "    }"
+  puts
+  putd_backslash "#define DEFINE_RESET_FUNCTION(FUNCNAME)"
+  indent {
+    putd_backslash "void FUNCNAME##_reset(void){"
+    indent {
+      putd_backslash "memset(&FUNCNAME##_fake, 0, sizeof(FUNCNAME##_fake));"
+      putd_backslash "FUNCNAME##_fake.arg_history_len = FFF_ARG_HISTORY_LEN;"
+    }
+    putd "}"
+  }
 end
 # ------  End Helper macros ------ #
 
@@ -174,6 +216,11 @@
   puts str
 end
 
+#multiline putd which adds a \ at the end of the generated macro
+def putd_backslash str
+  putd(str + " \\")
+end
+
 def pushd
   $current_depth = $current_depth + 4
 end
@@ -182,6 +229,12 @@
   $current_depth = $current_depth - 4
 end
 
+def indent
+  pushd 
+    yield
+  popd
+end
+
 def output_macro(arg_count, has_varargs, is_value_function)
 
   vararg_name = has_varargs ? "_VARARG" : ""
@@ -191,36 +244,36 @@
   saved_arg_count = arg_count - (has_varargs ? 1 : 0)
   return_type = is_value_function ? "RETURN_TYPE" : ""
 
-  putd ""
+  puts
   output_macro_header(declare_macro_name, saved_arg_count, has_varargs, return_type)
-  pushd
+  indent {
     extern_c {  # define argument capture variables
       output_variables(saved_arg_count, has_varargs, is_value_function)
     }
-  popd
+  }
   
-  putd ""
+  puts
   output_macro_header(define_macro_name, saved_arg_count, has_varargs, return_type)
-  pushd
+  indent {
     extern_c {
-      putd "FUNCNAME##_Fake FUNCNAME##_fake;\\"
-      putd function_signature(saved_arg_count, has_varargs, is_value_function) + "{ \\"
-      pushd
+      putd_backslash "FUNCNAME##_Fake FUNCNAME##_fake;"
+      putd_backslash function_signature(saved_arg_count, has_varargs, is_value_function) + "{"
+      indent {
         output_function_body(saved_arg_count, has_varargs, is_value_function)
-      popd
-      putd "} \\"
-      putd "DEFINE_RESET_FUNCTION(FUNCNAME) \\"
+      }
+      putd_backslash "}"
+      putd_backslash "DEFINE_RESET_FUNCTION(FUNCNAME)"
     }
-  popd
+  }
   
-  putd ""
+  puts
   
   output_macro_header(fake_macro_name, saved_arg_count, has_varargs, return_type)
-  pushd
+  indent {
     putd macro_signature_for(declare_macro_name, saved_arg_count, has_varargs, return_type)
     putd macro_signature_for(define_macro_name, saved_arg_count, has_varargs, return_type)
-    putd ""
-  popd
+    puts
+  }
 end
 
 def output_macro_header(macro_name, arg_count, has_varargs, return_type)
@@ -232,7 +285,7 @@
   putd "#define " + macro_signature_for(macro_name, arg_count, has_varargs, return_type)
 end
 
-# #macro_name(RETURN_TYPE, FUNCNAME, ARG0,...)
+# #macro_name(RETURN_TYPE, FUNCNAME, ARG0,...) \
 def macro_signature_for(macro_name, arg_count, has_varargs, return_type)
   parameter_list = "#{macro_name}("
   if return_type != ""
@@ -250,23 +303,19 @@
   parameter_list
 end
 
-def output_argument_capture_variables(argN)
-  putd "    DECLARE_ARG(ARG#{argN}_TYPE, #{argN}, FUNCNAME) \\"
-end
-
 def output_variables(arg_count, has_varargs, is_value_function)
   in_struct{
     arg_count.times { |argN| 
-      putd "DECLARE_ARG(ARG#{argN}_TYPE, #{argN}, FUNCNAME) \\"
+      putd_backslash "DECLARE_ARG(ARG#{argN}_TYPE, #{argN}, FUNCNAME)"
     }
-    putd "DECLARE_ALL_FUNC_COMMON \\"
-    putd "DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \\" unless not is_value_function
-    putd "DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \\"
+    putd_backslash "DECLARE_ALL_FUNC_COMMON"
+    putd_backslash "DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE)" unless not is_value_function
+    putd_backslash "DECLARE_CUSTOM_FAKE_SEQ_VARIABLES"
     output_custom_function_signature(arg_count, has_varargs, is_value_function)
     output_custom_function_array(arg_count, has_varargs, is_value_function)
   }
-  putd "extern FUNCNAME##_Fake FUNCNAME##_fake;\\"
-  putd "void FUNCNAME##_reset(void); \\"
+  putd_backslash "extern FUNCNAME##_Fake FUNCNAME##_fake;"
+  putd_backslash "void FUNCNAME##_reset(void);"
 end
 
 #example: ARG0_TYPE arg0, ARG1_TYPE arg1
@@ -289,15 +338,15 @@
 def output_custom_function_signature(arg_count, has_varargs, is_value_function)
   return_type = is_value_function ? "RETURN_TYPE" : "void"
   ap_list = has_varargs ? ", va_list ap" : ""
-  signature = "(*custom_fake)(#{arg_val_list(arg_count)}#{ap_list}); \\"
-  putd return_type + signature
+  signature = "(*custom_fake)(#{arg_val_list(arg_count)}#{ap_list});"
+  putd_backslash return_type + signature
 end
 
 def output_custom_function_array(arg_count, has_varargs, is_value_function)
   return_type = is_value_function ? "RETURN_TYPE" : "void"
   ap_list = has_varargs ? ", va_list ap" : ""
-  custom_array = "(**custom_fake_seq)(#{arg_val_list(arg_count)}#{ap_list}); \\"
-  putd return_type + custom_array
+  custom_array = "(**custom_fake_seq)(#{arg_val_list(arg_count)}#{ap_list});"
+  putd_backslash return_type + custom_array
 end
 
 # example: RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1)
@@ -308,100 +357,117 @@
 end
 
 def output_function_body(arg_count, has_varargs, is_value_function)
-  arg_count.times { |i| putd "SAVE_ARG(FUNCNAME, #{i}); \\" }
-  putd "if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\\"
-  arg_count.times { |i| putd "    SAVE_ARG_HISTORY(FUNCNAME, #{i}); \\" }
-  putd "}\\"
-  putd "else{\\"
-  putd "    HISTORY_DROPPED(FUNCNAME);\\"
-  putd "}\\"
-  putd "INCREMENT_CALL_COUNT(FUNCNAME); \\"
-  putd "REGISTER_CALL(FUNCNAME); \\"
+  arg_count.times { |i| putd_backslash "SAVE_ARG(FUNCNAME, #{i});" }
+  putd_backslash "if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){"
+  indent {
+    arg_count.times { |i| putd_backslash "SAVE_ARG_HISTORY(FUNCNAME, #{i});" }
+  }
+  putd_backslash "}"
+  putd_backslash "else{"
+  indent {
+    putd_backslash "HISTORY_DROPPED(FUNCNAME);"
+  }
+  putd_backslash "}"
+  putd_backslash "INCREMENT_CALL_COUNT(FUNCNAME);"
+  putd_backslash "REGISTER_CALL(FUNCNAME);"
 
   if has_varargs
-    putd "if(FUNCNAME##_fake.custom_fake){\\"
-    putd "    RETURN_TYPE ret;\\" if is_value_function
-    putd "    va_list ap;\\"
-    putd "    va_start(ap, arg#{arg_count-1});\\"
+    putd_backslash "if(FUNCNAME##_fake.custom_fake){"
+    indent {
+      putd_backslash "RETURN_TYPE ret;" if is_value_function
+      putd_backslash "va_list ap;"
+      putd_backslash "va_start(ap, arg#{arg_count-1});"
+    }
     custom_fake_call = "FUNCNAME##_fake.custom_fake(#{arg_list(arg_count)}, ap);"
-    if is_value_function
-      putd "    ret = #{custom_fake_call}\\"
-    else
-      putd "  #{custom_fake_call}\\"
-    end
-    putd "    va_end(ap);\\"
-    putd "    return ret;\\" if is_value_function
-    putd "}\\"
+    indent {
+      if is_value_function
+        putd_backslash "ret = #{custom_fake_call}"
+      else
+        putd_backslash "#{custom_fake_call}"
+      end
+      putd_backslash "va_end(ap);"
+      putd_backslash "return ret;" if is_value_function
+    }
+    putd_backslash "}"
   else
     return_type = is_value_function ? "return " : ""
-    putd "if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \\"
-    putd "    if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \\"
-    putd "        #{return_type}FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](#{arg_list(arg_count)}); \\"
-    putd "    } \\"
-    putd "    else{ \\"
-    putd "        #{return_type}FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](#{arg_list(arg_count)}); \\"
-    putd "    } \\"
-    putd "} \\"
-    putd "if (FUNCNAME##_fake.custom_fake) #{return_type}FUNCNAME##_fake.custom_fake(#{arg_list(arg_count)}); \\"
+    putd_backslash "if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */"
+    indent {
+      putd_backslash "if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){"
+      indent {
+        putd_backslash "#{return_type}FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](#{arg_list(arg_count)});"
+      }
+      putd_backslash "}"
+      putd_backslash "else{"
+      indent {
+        putd_backslash "#{return_type}FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](#{arg_list(arg_count)});"
+      }
+      putd_backslash "}"
+    }
+    putd_backslash "}"
+    putd_backslash "if (FUNCNAME##_fake.custom_fake) #{return_type}FUNCNAME##_fake.custom_fake(#{arg_list(arg_count)});"
   end
 
-  putd "RETURN_FAKE_RESULT(FUNCNAME)  \\" if is_value_function
-end
-
-def output_reset_function(arg_count, is_value_function)
-  putd "void FUNCNAME##_reset(void){ \\"
-  putd "    memset(&FUNCNAME##_fake, 0, sizeof(FUNCNAME##_fake)); \\"
-  putd "    FUNCNAME##_fake.arg_history_len = FFF_ARG_HISTORY_LEN;\\"
-  putd "} \\"
+  putd_backslash "RETURN_FAKE_RESULT(FUNCNAME)" if is_value_function
 end
 
 def define_fff_globals
   putd "typedef void (*fff_function_t)(void);"
   putd "typedef struct { "
-  putd "    fff_function_t call_history[FFF_CALL_HISTORY_LEN];"
-  putd "    unsigned int call_history_idx;"
+  indent {
+    putd "fff_function_t call_history[FFF_CALL_HISTORY_LEN];"
+    putd "unsigned int call_history_idx;"
+  }
   putd "} fff_globals_t;"
-  putd ""
-  putd "FFF_EXTERN_C \\"
+  puts
+  putd_backslash "FFF_EXTERN_C"
   putd "extern fff_globals_t fff;"
-  putd "FFF_END_EXTERN_C \\"
-  putd ""
-  putd "#define DEFINE_FFF_GLOBALS \\"
-  putd "    FFF_EXTERN_C \\"
-  putd "        fff_globals_t fff; \\"
-  putd "    FFF_END_EXTERN_C"
-  putd ""
+  putd_backslash "FFF_END_EXTERN_C"
+  puts
+  putd_backslash "#define DEFINE_FFF_GLOBALS"
+  indent {
+    putd_backslash "FFF_EXTERN_C"
+    indent {
+      putd_backslash "fff_globals_t fff;"
+    }
+    putd "FFF_END_EXTERN_C"
+  }
+  puts
   putd "#define FFF_RESET_HISTORY() fff.call_history_idx = 0;"
-  putd ""
-  putd "#define REGISTER_CALL(function) \\"
-  putd "   if(fff.call_history_idx < FFF_CALL_HISTORY_LEN) \\"
-  putd "       fff.call_history[fff.call_history_idx++] = (fff_function_t)function;"
+  puts
+  putd_backslash "#define REGISTER_CALL(function)"
+  indent {
+    putd_backslash "if(fff.call_history_idx < FFF_CALL_HISTORY_LEN)"
+    indent {
+		putd "fff.call_history[fff.call_history_idx++] = (fff_function_t)function;"
+    }
+  }
 end
 
 def extern_c
-  putd "FFF_EXTERN_C \\"
-  pushd 
+  putd_backslash "FFF_EXTERN_C"
+  indent { 
     yield
-  popd
-  putd "FFF_END_EXTERN_C \\"
+  }
+  putd_backslash "FFF_END_EXTERN_C"
 end
 
 def in_struct
-  putd "typedef struct FUNCNAME##_Fake { \\"
-  pushd
-  yield
-  popd
-  putd "} FUNCNAME##_Fake;\\"
+  putd_backslash "typedef struct FUNCNAME##_Fake {"
+  indent {
+    yield
+  }
+  putd_backslash "} FUNCNAME##_Fake;"
 end
 
 def include_guard
   putd "#ifndef FAKE_FUNCTIONS"
   putd "#define FAKE_FUNCTIONS"
-  putd ""
+  puts
 
   yield
 
-  putd ""
+  puts
   putd "#endif /* FAKE_FUNCTIONS */"
 end
 
diff --git a/fff.h b/fff.h
index 7af5eea..e54f868 100644
--- a/fff.h
+++ b/fff.h
@@ -34,15 +34,15 @@
     #define FFF_ARG_HISTORY_LEN (50u)
 #endif
 #ifndef FFF_CALL_HISTORY_LEN
-  #define FFF_CALL_HISTORY_LEN (50u)
+    #define FFF_CALL_HISTORY_LEN (50u)
 #endif
 /* -- INTERNAL HELPER MACROS -- */
 #define SET_RETURN_SEQ(FUNCNAME, ARRAY_POINTER, ARRAY_LEN) \
-                        FUNCNAME##_fake.return_val_seq = ARRAY_POINTER; \
-                        FUNCNAME##_fake.return_val_seq_len = ARRAY_LEN;
+    FUNCNAME##_fake.return_val_seq = ARRAY_POINTER; \
+    FUNCNAME##_fake.return_val_seq_len = ARRAY_LEN;
 #define SET_CUSTOM_FAKE_SEQ(FUNCNAME, ARRAY_POINTER, ARRAY_LEN) \
-                            FUNCNAME##_fake.custom_fake_seq = ARRAY_POINTER; \
-                            FUNCNAME##_fake.custom_fake_seq_len = ARRAY_LEN;
+    FUNCNAME##_fake.custom_fake_seq = ARRAY_POINTER; \
+    FUNCNAME##_fake.custom_fake_seq_len = ARRAY_LEN;
 
 /* Defining a function to reset a fake function */
 #define RESET_FAKE(FUNCNAME) { \
@@ -56,14 +56,14 @@
 
 #define DECLARE_ALL_FUNC_COMMON \
     unsigned int call_count; \
-    unsigned int arg_history_len;\
+    unsigned int arg_history_len; \
     unsigned int arg_histories_dropped; \
 
 #define SAVE_ARG(FUNCNAME, n) \
     memcpy((void*)&FUNCNAME##_fake.arg##n##_val, (void*)&arg##n, sizeof(arg##n));
 
 #define ROOM_FOR_MORE_HISTORY(FUNCNAME) \
-  FUNCNAME##_fake.call_count < FFF_ARG_HISTORY_LEN
+    FUNCNAME##_fake.call_count < FFF_ARG_HISTORY_LEN
 
 #define SAVE_ARG_HISTORY(FUNCNAME, ARGN) \
     memcpy((void*)&FUNCNAME##_fake.arg##ARGN##_history[FUNCNAME##_fake.call_count], (void*)&arg##ARGN, sizeof(arg##ARGN));
@@ -104,7 +104,7 @@
 #define DEFINE_RESET_FUNCTION(FUNCNAME) \
     void FUNCNAME##_reset(void){ \
         memset(&FUNCNAME##_fake, 0, sizeof(FUNCNAME##_fake)); \
-        FUNCNAME##_fake.arg_history_len = FFF_ARG_HISTORY_LEN;\
+        FUNCNAME##_fake.arg_history_len = FFF_ARG_HISTORY_LEN; \
     }
 /* -- END INTERNAL HELPER MACROS -- */
 
@@ -126,8 +126,8 @@
 #define FFF_RESET_HISTORY() fff.call_history_idx = 0;
 
 #define REGISTER_CALL(function) \
-   if(fff.call_history_idx < FFF_CALL_HISTORY_LEN) \
-       fff.call_history[fff.call_history_idx++] = (fff_function_t)function;
+    if(fff.call_history_idx < FFF_CALL_HISTORY_LEN) \
+        fff.call_history[fff.call_history_idx++] = (fff_function_t)function;
 
 #define DECLARE_FAKE_VOID_FUNC0(FUNCNAME) \
     FFF_EXTERN_C \
@@ -136,20 +136,20 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(void); \
             void(**custom_fake_seq)(void); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC0(FUNCNAME) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(void){ \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -168,7 +168,7 @@
 #define FAKE_VOID_FUNC0(FUNCNAME) \
     DECLARE_FAKE_VOID_FUNC0(FUNCNAME) \
     DEFINE_FAKE_VOID_FUNC0(FUNCNAME) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \
     FFF_EXTERN_C \
@@ -178,22 +178,22 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0); \
             void(**custom_fake_seq)(ARG0_TYPE arg0); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0){ \
             SAVE_ARG(FUNCNAME, 0); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -212,7 +212,7 @@
 #define FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \
     DECLARE_FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \
     DEFINE_FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
     FFF_EXTERN_C \
@@ -223,24 +223,24 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -259,7 +259,7 @@
 #define FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
     DECLARE_FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
     DEFINE_FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
     FFF_EXTERN_C \
@@ -271,26 +271,26 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
             SAVE_ARG(FUNCNAME, 2); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -309,7 +309,7 @@
 #define FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
     DECLARE_FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
     DEFINE_FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
     FFF_EXTERN_C \
@@ -322,28 +322,28 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
             SAVE_ARG(FUNCNAME, 2); \
             SAVE_ARG(FUNCNAME, 3); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
                 SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -362,7 +362,7 @@
 #define FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
     DECLARE_FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
     DEFINE_FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
     FFF_EXTERN_C \
@@ -376,30 +376,30 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
             SAVE_ARG(FUNCNAME, 2); \
             SAVE_ARG(FUNCNAME, 3); \
             SAVE_ARG(FUNCNAME, 4); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
                 SAVE_ARG_HISTORY(FUNCNAME, 3); \
                 SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -418,7 +418,7 @@
 #define FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
     DECLARE_FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
     DEFINE_FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
     FFF_EXTERN_C \
@@ -433,14 +433,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -448,17 +448,17 @@
             SAVE_ARG(FUNCNAME, 3); \
             SAVE_ARG(FUNCNAME, 4); \
             SAVE_ARG(FUNCNAME, 5); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
                 SAVE_ARG_HISTORY(FUNCNAME, 3); \
                 SAVE_ARG_HISTORY(FUNCNAME, 4); \
                 SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -477,7 +477,7 @@
 #define FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
     DECLARE_FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
     DEFINE_FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
     FFF_EXTERN_C \
@@ -493,14 +493,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -509,7 +509,7 @@
             SAVE_ARG(FUNCNAME, 4); \
             SAVE_ARG(FUNCNAME, 5); \
             SAVE_ARG(FUNCNAME, 6); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -517,10 +517,10 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 4); \
                 SAVE_ARG_HISTORY(FUNCNAME, 5); \
                 SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -539,7 +539,7 @@
 #define FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
     DECLARE_FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
     DEFINE_FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
     FFF_EXTERN_C \
@@ -556,14 +556,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -573,7 +573,7 @@
             SAVE_ARG(FUNCNAME, 5); \
             SAVE_ARG(FUNCNAME, 6); \
             SAVE_ARG(FUNCNAME, 7); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -582,10 +582,10 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 5); \
                 SAVE_ARG_HISTORY(FUNCNAME, 6); \
                 SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -604,7 +604,7 @@
 #define FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
     DECLARE_FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
     DEFINE_FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
     FFF_EXTERN_C \
@@ -622,14 +622,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -640,7 +640,7 @@
             SAVE_ARG(FUNCNAME, 6); \
             SAVE_ARG(FUNCNAME, 7); \
             SAVE_ARG(FUNCNAME, 8); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -650,10 +650,10 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 6); \
                 SAVE_ARG_HISTORY(FUNCNAME, 7); \
                 SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -672,7 +672,7 @@
 #define FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
     DECLARE_FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
     DEFINE_FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
     FFF_EXTERN_C \
@@ -691,14 +691,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -710,7 +710,7 @@
             SAVE_ARG(FUNCNAME, 7); \
             SAVE_ARG(FUNCNAME, 8); \
             SAVE_ARG(FUNCNAME, 9); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -721,10 +721,10 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 7); \
                 SAVE_ARG_HISTORY(FUNCNAME, 8); \
                 SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -743,7 +743,7 @@
 #define FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
     DECLARE_FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
     DEFINE_FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
     FFF_EXTERN_C \
@@ -763,14 +763,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -783,7 +783,7 @@
             SAVE_ARG(FUNCNAME, 8); \
             SAVE_ARG(FUNCNAME, 9); \
             SAVE_ARG(FUNCNAME, 10); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -795,10 +795,10 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 8); \
                 SAVE_ARG_HISTORY(FUNCNAME, 9); \
                 SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -817,7 +817,7 @@
 #define FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
     DECLARE_FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
     DEFINE_FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
     FFF_EXTERN_C \
@@ -838,14 +838,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -859,7 +859,7 @@
             SAVE_ARG(FUNCNAME, 9); \
             SAVE_ARG(FUNCNAME, 10); \
             SAVE_ARG(FUNCNAME, 11); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -872,10 +872,10 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 9); \
                 SAVE_ARG_HISTORY(FUNCNAME, 10); \
                 SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -894,7 +894,7 @@
 #define FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
     DECLARE_FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
     DEFINE_FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
     FFF_EXTERN_C \
@@ -916,14 +916,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -938,7 +938,7 @@
             SAVE_ARG(FUNCNAME, 10); \
             SAVE_ARG(FUNCNAME, 11); \
             SAVE_ARG(FUNCNAME, 12); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -952,10 +952,10 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 10); \
                 SAVE_ARG_HISTORY(FUNCNAME, 11); \
                 SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -974,7 +974,7 @@
 #define FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
     DECLARE_FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
     DEFINE_FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
     FFF_EXTERN_C \
@@ -997,14 +997,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -1020,7 +1020,7 @@
             SAVE_ARG(FUNCNAME, 11); \
             SAVE_ARG(FUNCNAME, 12); \
             SAVE_ARG(FUNCNAME, 13); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -1035,10 +1035,10 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 11); \
                 SAVE_ARG_HISTORY(FUNCNAME, 12); \
                 SAVE_ARG_HISTORY(FUNCNAME, 13); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -1057,7 +1057,7 @@
 #define FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
     DECLARE_FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
     DEFINE_FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
     FFF_EXTERN_C \
@@ -1081,14 +1081,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -1105,7 +1105,7 @@
             SAVE_ARG(FUNCNAME, 12); \
             SAVE_ARG(FUNCNAME, 13); \
             SAVE_ARG(FUNCNAME, 14); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -1121,10 +1121,10 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 12); \
                 SAVE_ARG_HISTORY(FUNCNAME, 13); \
                 SAVE_ARG_HISTORY(FUNCNAME, 14); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -1143,7 +1143,7 @@
 #define FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
     DECLARE_FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
     DEFINE_FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
     FFF_EXTERN_C \
@@ -1168,14 +1168,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -1193,7 +1193,7 @@
             SAVE_ARG(FUNCNAME, 13); \
             SAVE_ARG(FUNCNAME, 14); \
             SAVE_ARG(FUNCNAME, 15); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -1210,10 +1210,10 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 13); \
                 SAVE_ARG_HISTORY(FUNCNAME, 14); \
                 SAVE_ARG_HISTORY(FUNCNAME, 15); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -1232,7 +1232,7 @@
 #define FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
     DECLARE_FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
     DEFINE_FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
     FFF_EXTERN_C \
@@ -1258,14 +1258,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -1284,7 +1284,7 @@
             SAVE_ARG(FUNCNAME, 14); \
             SAVE_ARG(FUNCNAME, 15); \
             SAVE_ARG(FUNCNAME, 16); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -1302,10 +1302,10 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 14); \
                 SAVE_ARG_HISTORY(FUNCNAME, 15); \
                 SAVE_ARG_HISTORY(FUNCNAME, 16); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -1324,7 +1324,7 @@
 #define FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
     DECLARE_FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
     DEFINE_FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
     FFF_EXTERN_C \
@@ -1351,14 +1351,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -1378,7 +1378,7 @@
             SAVE_ARG(FUNCNAME, 15); \
             SAVE_ARG(FUNCNAME, 16); \
             SAVE_ARG(FUNCNAME, 17); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -1397,10 +1397,10 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 15); \
                 SAVE_ARG_HISTORY(FUNCNAME, 16); \
                 SAVE_ARG_HISTORY(FUNCNAME, 17); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -1419,7 +1419,7 @@
 #define FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
     DECLARE_FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
     DEFINE_FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
     FFF_EXTERN_C \
@@ -1447,14 +1447,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -1475,7 +1475,7 @@
             SAVE_ARG(FUNCNAME, 16); \
             SAVE_ARG(FUNCNAME, 17); \
             SAVE_ARG(FUNCNAME, 18); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -1495,10 +1495,10 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 16); \
                 SAVE_ARG_HISTORY(FUNCNAME, 17); \
                 SAVE_ARG_HISTORY(FUNCNAME, 18); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -1517,7 +1517,7 @@
 #define FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
     DECLARE_FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
     DEFINE_FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
     FFF_EXTERN_C \
@@ -1546,14 +1546,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -1575,7 +1575,7 @@
             SAVE_ARG(FUNCNAME, 17); \
             SAVE_ARG(FUNCNAME, 18); \
             SAVE_ARG(FUNCNAME, 19); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -1596,10 +1596,10 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 17); \
                 SAVE_ARG_HISTORY(FUNCNAME, 18); \
                 SAVE_ARG_HISTORY(FUNCNAME, 19); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -1618,7 +1618,7 @@
 #define FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
     DECLARE_FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
     DEFINE_FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \
     FFF_EXTERN_C \
@@ -1628,20 +1628,20 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(void); \
             RETURN_TYPE(**custom_fake_seq)(void); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(void){ \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -1653,7 +1653,7 @@
                 } \
             } \
             if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(); \
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -1661,7 +1661,7 @@
 #define FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \
     DECLARE_FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \
     DEFINE_FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \
     FFF_EXTERN_C \
@@ -1672,22 +1672,22 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0){ \
             SAVE_ARG(FUNCNAME, 0); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -1699,7 +1699,7 @@
                 } \
             } \
             if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0); \
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -1707,7 +1707,7 @@
 #define FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \
     DECLARE_FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \
     DEFINE_FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
     FFF_EXTERN_C \
@@ -1719,24 +1719,24 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -1748,7 +1748,7 @@
                 } \
             } \
             if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1); \
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -1756,7 +1756,7 @@
 #define FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
     DECLARE_FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
     DEFINE_FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
     FFF_EXTERN_C \
@@ -1769,26 +1769,26 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
             SAVE_ARG(FUNCNAME, 2); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -1800,7 +1800,7 @@
                 } \
             } \
             if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2); \
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -1808,7 +1808,7 @@
 #define FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
     DECLARE_FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
     DEFINE_FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
     FFF_EXTERN_C \
@@ -1822,28 +1822,28 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
             SAVE_ARG(FUNCNAME, 2); \
             SAVE_ARG(FUNCNAME, 3); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
                 SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -1855,7 +1855,7 @@
                 } \
             } \
             if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3); \
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -1863,7 +1863,7 @@
 #define FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
     DECLARE_FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
     DEFINE_FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
     FFF_EXTERN_C \
@@ -1878,30 +1878,30 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
             SAVE_ARG(FUNCNAME, 2); \
             SAVE_ARG(FUNCNAME, 3); \
             SAVE_ARG(FUNCNAME, 4); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
                 SAVE_ARG_HISTORY(FUNCNAME, 3); \
                 SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -1913,7 +1913,7 @@
                 } \
             } \
             if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4); \
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -1921,7 +1921,7 @@
 #define FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
     DECLARE_FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
     DEFINE_FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
     FFF_EXTERN_C \
@@ -1937,14 +1937,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -1952,17 +1952,17 @@
             SAVE_ARG(FUNCNAME, 3); \
             SAVE_ARG(FUNCNAME, 4); \
             SAVE_ARG(FUNCNAME, 5); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
                 SAVE_ARG_HISTORY(FUNCNAME, 3); \
                 SAVE_ARG_HISTORY(FUNCNAME, 4); \
                 SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -1974,7 +1974,7 @@
                 } \
             } \
             if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5); \
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -1982,7 +1982,7 @@
 #define FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
     DECLARE_FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
     DEFINE_FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
     FFF_EXTERN_C \
@@ -1999,14 +1999,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -2015,7 +2015,7 @@
             SAVE_ARG(FUNCNAME, 4); \
             SAVE_ARG(FUNCNAME, 5); \
             SAVE_ARG(FUNCNAME, 6); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -2023,10 +2023,10 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 4); \
                 SAVE_ARG_HISTORY(FUNCNAME, 5); \
                 SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -2038,7 +2038,7 @@
                 } \
             } \
             if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -2046,7 +2046,7 @@
 #define FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
     DECLARE_FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
     DEFINE_FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
     FFF_EXTERN_C \
@@ -2064,14 +2064,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -2081,7 +2081,7 @@
             SAVE_ARG(FUNCNAME, 5); \
             SAVE_ARG(FUNCNAME, 6); \
             SAVE_ARG(FUNCNAME, 7); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -2090,10 +2090,10 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 5); \
                 SAVE_ARG_HISTORY(FUNCNAME, 6); \
                 SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -2105,7 +2105,7 @@
                 } \
             } \
             if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -2113,7 +2113,7 @@
 #define FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
     DECLARE_FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
     DEFINE_FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
     FFF_EXTERN_C \
@@ -2132,14 +2132,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -2150,7 +2150,7 @@
             SAVE_ARG(FUNCNAME, 6); \
             SAVE_ARG(FUNCNAME, 7); \
             SAVE_ARG(FUNCNAME, 8); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -2160,10 +2160,10 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 6); \
                 SAVE_ARG_HISTORY(FUNCNAME, 7); \
                 SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -2175,7 +2175,7 @@
                 } \
             } \
             if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -2183,7 +2183,7 @@
 #define FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
     DECLARE_FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
     DEFINE_FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
     FFF_EXTERN_C \
@@ -2203,14 +2203,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -2222,7 +2222,7 @@
             SAVE_ARG(FUNCNAME, 7); \
             SAVE_ARG(FUNCNAME, 8); \
             SAVE_ARG(FUNCNAME, 9); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -2233,10 +2233,10 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 7); \
                 SAVE_ARG_HISTORY(FUNCNAME, 8); \
                 SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -2248,7 +2248,7 @@
                 } \
             } \
             if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -2256,7 +2256,7 @@
 #define FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
     DECLARE_FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
     DEFINE_FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
     FFF_EXTERN_C \
@@ -2277,14 +2277,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -2297,7 +2297,7 @@
             SAVE_ARG(FUNCNAME, 8); \
             SAVE_ARG(FUNCNAME, 9); \
             SAVE_ARG(FUNCNAME, 10); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -2309,10 +2309,10 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 8); \
                 SAVE_ARG_HISTORY(FUNCNAME, 9); \
                 SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -2324,7 +2324,7 @@
                 } \
             } \
             if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -2332,7 +2332,7 @@
 #define FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
     DECLARE_FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
     DEFINE_FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
     FFF_EXTERN_C \
@@ -2354,14 +2354,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -2375,7 +2375,7 @@
             SAVE_ARG(FUNCNAME, 9); \
             SAVE_ARG(FUNCNAME, 10); \
             SAVE_ARG(FUNCNAME, 11); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -2388,10 +2388,10 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 9); \
                 SAVE_ARG_HISTORY(FUNCNAME, 10); \
                 SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -2403,7 +2403,7 @@
                 } \
             } \
             if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -2411,7 +2411,7 @@
 #define FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
     DECLARE_FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
     DEFINE_FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
     FFF_EXTERN_C \
@@ -2434,14 +2434,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -2456,7 +2456,7 @@
             SAVE_ARG(FUNCNAME, 10); \
             SAVE_ARG(FUNCNAME, 11); \
             SAVE_ARG(FUNCNAME, 12); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -2470,10 +2470,10 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 10); \
                 SAVE_ARG_HISTORY(FUNCNAME, 11); \
                 SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -2485,7 +2485,7 @@
                 } \
             } \
             if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -2493,7 +2493,7 @@
 #define FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
     DECLARE_FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
     DEFINE_FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
     FFF_EXTERN_C \
@@ -2517,14 +2517,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -2540,7 +2540,7 @@
             SAVE_ARG(FUNCNAME, 11); \
             SAVE_ARG(FUNCNAME, 12); \
             SAVE_ARG(FUNCNAME, 13); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -2555,10 +2555,10 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 11); \
                 SAVE_ARG_HISTORY(FUNCNAME, 12); \
                 SAVE_ARG_HISTORY(FUNCNAME, 13); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -2570,7 +2570,7 @@
                 } \
             } \
             if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -2578,7 +2578,7 @@
 #define FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
     DECLARE_FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
     DEFINE_FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
     FFF_EXTERN_C \
@@ -2603,14 +2603,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -2627,7 +2627,7 @@
             SAVE_ARG(FUNCNAME, 12); \
             SAVE_ARG(FUNCNAME, 13); \
             SAVE_ARG(FUNCNAME, 14); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -2643,10 +2643,10 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 12); \
                 SAVE_ARG_HISTORY(FUNCNAME, 13); \
                 SAVE_ARG_HISTORY(FUNCNAME, 14); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -2658,7 +2658,7 @@
                 } \
             } \
             if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -2666,7 +2666,7 @@
 #define FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
     DECLARE_FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
     DEFINE_FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
     FFF_EXTERN_C \
@@ -2692,14 +2692,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -2717,7 +2717,7 @@
             SAVE_ARG(FUNCNAME, 13); \
             SAVE_ARG(FUNCNAME, 14); \
             SAVE_ARG(FUNCNAME, 15); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -2734,10 +2734,10 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 13); \
                 SAVE_ARG_HISTORY(FUNCNAME, 14); \
                 SAVE_ARG_HISTORY(FUNCNAME, 15); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -2749,7 +2749,7 @@
                 } \
             } \
             if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -2757,7 +2757,7 @@
 #define FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
     DECLARE_FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
     DEFINE_FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
     FFF_EXTERN_C \
@@ -2784,14 +2784,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -2810,7 +2810,7 @@
             SAVE_ARG(FUNCNAME, 14); \
             SAVE_ARG(FUNCNAME, 15); \
             SAVE_ARG(FUNCNAME, 16); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -2828,10 +2828,10 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 14); \
                 SAVE_ARG_HISTORY(FUNCNAME, 15); \
                 SAVE_ARG_HISTORY(FUNCNAME, 16); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -2843,7 +2843,7 @@
                 } \
             } \
             if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -2851,7 +2851,7 @@
 #define FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
     DECLARE_FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
     DEFINE_FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
     FFF_EXTERN_C \
@@ -2879,14 +2879,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -2906,7 +2906,7 @@
             SAVE_ARG(FUNCNAME, 15); \
             SAVE_ARG(FUNCNAME, 16); \
             SAVE_ARG(FUNCNAME, 17); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -2925,10 +2925,10 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 15); \
                 SAVE_ARG_HISTORY(FUNCNAME, 16); \
                 SAVE_ARG_HISTORY(FUNCNAME, 17); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -2940,7 +2940,7 @@
                 } \
             } \
             if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -2948,7 +2948,7 @@
 #define FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
     DECLARE_FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
     DEFINE_FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC19(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
     FFF_EXTERN_C \
@@ -2977,14 +2977,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC19(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -3005,7 +3005,7 @@
             SAVE_ARG(FUNCNAME, 16); \
             SAVE_ARG(FUNCNAME, 17); \
             SAVE_ARG(FUNCNAME, 18); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -3025,10 +3025,10 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 16); \
                 SAVE_ARG_HISTORY(FUNCNAME, 17); \
                 SAVE_ARG_HISTORY(FUNCNAME, 18); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -3040,7 +3040,7 @@
                 } \
             } \
             if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -3048,7 +3048,7 @@
 #define FAKE_VALUE_FUNC19(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
     DECLARE_FAKE_VALUE_FUNC19(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
     DEFINE_FAKE_VALUE_FUNC19(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC20(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
     FFF_EXTERN_C \
@@ -3078,14 +3078,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC20(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -3107,7 +3107,7 @@
             SAVE_ARG(FUNCNAME, 17); \
             SAVE_ARG(FUNCNAME, 18); \
             SAVE_ARG(FUNCNAME, 19); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -3128,10 +3128,10 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 17); \
                 SAVE_ARG_HISTORY(FUNCNAME, 18); \
                 SAVE_ARG_HISTORY(FUNCNAME, 19); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
             if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
@@ -3143,7 +3143,7 @@
                 } \
             } \
             if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -3151,7 +3151,7 @@
 #define FAKE_VALUE_FUNC20(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
     DECLARE_FAKE_VALUE_FUNC20(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
     DEFINE_FAKE_VALUE_FUNC20(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \
     FFF_EXTERN_C \
@@ -3161,30 +3161,30 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, va_list ap); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                va_list ap;\
-                va_start(ap, arg0);\
-              FUNCNAME##_fake.custom_fake(arg0, ap);\
-                va_end(ap);\
-            }\
+            if(FUNCNAME##_fake.custom_fake){ \
+                va_list ap; \
+                va_start(ap, arg0); \
+                FUNCNAME##_fake.custom_fake(arg0, ap); \
+                va_end(ap); \
+            } \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -3192,7 +3192,7 @@
 #define FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \
     DECLARE_FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \
     DEFINE_FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
     FFF_EXTERN_C \
@@ -3203,32 +3203,32 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, va_list ap); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                va_list ap;\
-                va_start(ap, arg1);\
-              FUNCNAME##_fake.custom_fake(arg0, arg1, ap);\
-                va_end(ap);\
-            }\
+            if(FUNCNAME##_fake.custom_fake){ \
+                va_list ap; \
+                va_start(ap, arg1); \
+                FUNCNAME##_fake.custom_fake(arg0, arg1, ap); \
+                va_end(ap); \
+            } \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -3236,7 +3236,7 @@
 #define FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
     DECLARE_FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
     DEFINE_FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
     FFF_EXTERN_C \
@@ -3248,34 +3248,34 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, va_list ap); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
             SAVE_ARG(FUNCNAME, 2); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                va_list ap;\
-                va_start(ap, arg2);\
-              FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, ap);\
-                va_end(ap);\
-            }\
+            if(FUNCNAME##_fake.custom_fake){ \
+                va_list ap; \
+                va_start(ap, arg2); \
+                FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, ap); \
+                va_end(ap); \
+            } \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -3283,7 +3283,7 @@
 #define FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
     DECLARE_FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
     DEFINE_FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
     FFF_EXTERN_C \
@@ -3296,36 +3296,36 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, va_list ap); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
             SAVE_ARG(FUNCNAME, 2); \
             SAVE_ARG(FUNCNAME, 3); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
                 SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                va_list ap;\
-                va_start(ap, arg3);\
-              FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, ap);\
-                va_end(ap);\
-            }\
+            if(FUNCNAME##_fake.custom_fake){ \
+                va_list ap; \
+                va_start(ap, arg3); \
+                FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, ap); \
+                va_end(ap); \
+            } \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -3333,7 +3333,7 @@
 #define FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
     DECLARE_FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
     DEFINE_FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
     FFF_EXTERN_C \
@@ -3347,38 +3347,38 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, va_list ap); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
             SAVE_ARG(FUNCNAME, 2); \
             SAVE_ARG(FUNCNAME, 3); \
             SAVE_ARG(FUNCNAME, 4); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
                 SAVE_ARG_HISTORY(FUNCNAME, 3); \
                 SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                va_list ap;\
-                va_start(ap, arg4);\
-              FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, ap);\
-                va_end(ap);\
-            }\
+            if(FUNCNAME##_fake.custom_fake){ \
+                va_list ap; \
+                va_start(ap, arg4); \
+                FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, ap); \
+                va_end(ap); \
+            } \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -3386,7 +3386,7 @@
 #define FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
     DECLARE_FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
     DEFINE_FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
     FFF_EXTERN_C \
@@ -3401,14 +3401,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, va_list ap); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -3416,25 +3416,25 @@
             SAVE_ARG(FUNCNAME, 3); \
             SAVE_ARG(FUNCNAME, 4); \
             SAVE_ARG(FUNCNAME, 5); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
                 SAVE_ARG_HISTORY(FUNCNAME, 3); \
                 SAVE_ARG_HISTORY(FUNCNAME, 4); \
                 SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                va_list ap;\
-                va_start(ap, arg5);\
-              FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, ap);\
-                va_end(ap);\
-            }\
+            if(FUNCNAME##_fake.custom_fake){ \
+                va_list ap; \
+                va_start(ap, arg5); \
+                FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, ap); \
+                va_end(ap); \
+            } \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -3442,7 +3442,7 @@
 #define FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
     DECLARE_FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
     DEFINE_FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
     FFF_EXTERN_C \
@@ -3458,14 +3458,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, va_list ap); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -3474,7 +3474,7 @@
             SAVE_ARG(FUNCNAME, 4); \
             SAVE_ARG(FUNCNAME, 5); \
             SAVE_ARG(FUNCNAME, 6); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -3482,18 +3482,18 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 4); \
                 SAVE_ARG_HISTORY(FUNCNAME, 5); \
                 SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                va_list ap;\
-                va_start(ap, arg6);\
-              FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap);\
-                va_end(ap);\
-            }\
+            if(FUNCNAME##_fake.custom_fake){ \
+                va_list ap; \
+                va_start(ap, arg6); \
+                FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
+                va_end(ap); \
+            } \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -3501,7 +3501,7 @@
 #define FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
     DECLARE_FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
     DEFINE_FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
     FFF_EXTERN_C \
@@ -3518,14 +3518,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, va_list ap); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -3535,7 +3535,7 @@
             SAVE_ARG(FUNCNAME, 5); \
             SAVE_ARG(FUNCNAME, 6); \
             SAVE_ARG(FUNCNAME, 7); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -3544,18 +3544,18 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 5); \
                 SAVE_ARG_HISTORY(FUNCNAME, 6); \
                 SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                va_list ap;\
-                va_start(ap, arg7);\
-              FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap);\
-                va_end(ap);\
-            }\
+            if(FUNCNAME##_fake.custom_fake){ \
+                va_list ap; \
+                va_start(ap, arg7); \
+                FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
+                va_end(ap); \
+            } \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -3563,7 +3563,7 @@
 #define FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
     DECLARE_FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
     DEFINE_FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
     FFF_EXTERN_C \
@@ -3581,14 +3581,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, va_list ap); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -3599,7 +3599,7 @@
             SAVE_ARG(FUNCNAME, 6); \
             SAVE_ARG(FUNCNAME, 7); \
             SAVE_ARG(FUNCNAME, 8); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -3609,18 +3609,18 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 6); \
                 SAVE_ARG_HISTORY(FUNCNAME, 7); \
                 SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                va_list ap;\
-                va_start(ap, arg8);\
-              FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap);\
-                va_end(ap);\
-            }\
+            if(FUNCNAME##_fake.custom_fake){ \
+                va_list ap; \
+                va_start(ap, arg8); \
+                FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
+                va_end(ap); \
+            } \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -3628,7 +3628,7 @@
 #define FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
     DECLARE_FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
     DEFINE_FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
     FFF_EXTERN_C \
@@ -3647,14 +3647,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, va_list ap); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -3666,7 +3666,7 @@
             SAVE_ARG(FUNCNAME, 7); \
             SAVE_ARG(FUNCNAME, 8); \
             SAVE_ARG(FUNCNAME, 9); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -3677,18 +3677,18 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 7); \
                 SAVE_ARG_HISTORY(FUNCNAME, 8); \
                 SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                va_list ap;\
-                va_start(ap, arg9);\
-              FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap);\
-                va_end(ap);\
-            }\
+            if(FUNCNAME##_fake.custom_fake){ \
+                va_list ap; \
+                va_start(ap, arg9); \
+                FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap); \
+                va_end(ap); \
+            } \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -3696,7 +3696,7 @@
 #define FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
     DECLARE_FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
     DEFINE_FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
     FFF_EXTERN_C \
@@ -3716,14 +3716,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, va_list ap); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -3736,7 +3736,7 @@
             SAVE_ARG(FUNCNAME, 8); \
             SAVE_ARG(FUNCNAME, 9); \
             SAVE_ARG(FUNCNAME, 10); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -3748,18 +3748,18 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 8); \
                 SAVE_ARG_HISTORY(FUNCNAME, 9); \
                 SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                va_list ap;\
-                va_start(ap, arg10);\
-              FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap);\
-                va_end(ap);\
-            }\
+            if(FUNCNAME##_fake.custom_fake){ \
+                va_list ap; \
+                va_start(ap, arg10); \
+                FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap); \
+                va_end(ap); \
+            } \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -3767,7 +3767,7 @@
 #define FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
     DECLARE_FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
     DEFINE_FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
     FFF_EXTERN_C \
@@ -3788,14 +3788,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, va_list ap); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -3809,7 +3809,7 @@
             SAVE_ARG(FUNCNAME, 9); \
             SAVE_ARG(FUNCNAME, 10); \
             SAVE_ARG(FUNCNAME, 11); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -3822,18 +3822,18 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 9); \
                 SAVE_ARG_HISTORY(FUNCNAME, 10); \
                 SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                va_list ap;\
-                va_start(ap, arg11);\
-              FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, ap);\
-                va_end(ap);\
-            }\
+            if(FUNCNAME##_fake.custom_fake){ \
+                va_list ap; \
+                va_start(ap, arg11); \
+                FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, ap); \
+                va_end(ap); \
+            } \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -3841,7 +3841,7 @@
 #define FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
     DECLARE_FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
     DEFINE_FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
     FFF_EXTERN_C \
@@ -3863,14 +3863,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, va_list ap); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -3885,7 +3885,7 @@
             SAVE_ARG(FUNCNAME, 10); \
             SAVE_ARG(FUNCNAME, 11); \
             SAVE_ARG(FUNCNAME, 12); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -3899,18 +3899,18 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 10); \
                 SAVE_ARG_HISTORY(FUNCNAME, 11); \
                 SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                va_list ap;\
-                va_start(ap, arg12);\
-              FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, ap);\
-                va_end(ap);\
-            }\
+            if(FUNCNAME##_fake.custom_fake){ \
+                va_list ap; \
+                va_start(ap, arg12); \
+                FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, ap); \
+                va_end(ap); \
+            } \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -3918,7 +3918,7 @@
 #define FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
     DECLARE_FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
     DEFINE_FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC15_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
     FFF_EXTERN_C \
@@ -3941,14 +3941,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, va_list ap); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC15_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -3964,7 +3964,7 @@
             SAVE_ARG(FUNCNAME, 11); \
             SAVE_ARG(FUNCNAME, 12); \
             SAVE_ARG(FUNCNAME, 13); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -3979,18 +3979,18 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 11); \
                 SAVE_ARG_HISTORY(FUNCNAME, 12); \
                 SAVE_ARG_HISTORY(FUNCNAME, 13); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                va_list ap;\
-                va_start(ap, arg13);\
-              FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, ap);\
-                va_end(ap);\
-            }\
+            if(FUNCNAME##_fake.custom_fake){ \
+                va_list ap; \
+                va_start(ap, arg13); \
+                FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, ap); \
+                va_end(ap); \
+            } \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -3998,7 +3998,7 @@
 #define FAKE_VOID_FUNC15_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
     DECLARE_FAKE_VOID_FUNC15_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
     DEFINE_FAKE_VOID_FUNC15_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
     FFF_EXTERN_C \
@@ -4022,14 +4022,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, va_list ap); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -4046,7 +4046,7 @@
             SAVE_ARG(FUNCNAME, 12); \
             SAVE_ARG(FUNCNAME, 13); \
             SAVE_ARG(FUNCNAME, 14); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -4062,18 +4062,18 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 12); \
                 SAVE_ARG_HISTORY(FUNCNAME, 13); \
                 SAVE_ARG_HISTORY(FUNCNAME, 14); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                va_list ap;\
-                va_start(ap, arg14);\
-              FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, ap);\
-                va_end(ap);\
-            }\
+            if(FUNCNAME##_fake.custom_fake){ \
+                va_list ap; \
+                va_start(ap, arg14); \
+                FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, ap); \
+                va_end(ap); \
+            } \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -4081,7 +4081,7 @@
 #define FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
     DECLARE_FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
     DEFINE_FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
     FFF_EXTERN_C \
@@ -4106,14 +4106,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, va_list ap); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -4131,7 +4131,7 @@
             SAVE_ARG(FUNCNAME, 13); \
             SAVE_ARG(FUNCNAME, 14); \
             SAVE_ARG(FUNCNAME, 15); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -4148,18 +4148,18 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 13); \
                 SAVE_ARG_HISTORY(FUNCNAME, 14); \
                 SAVE_ARG_HISTORY(FUNCNAME, 15); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                va_list ap;\
-                va_start(ap, arg15);\
-              FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, ap);\
-                va_end(ap);\
-            }\
+            if(FUNCNAME##_fake.custom_fake){ \
+                va_list ap; \
+                va_start(ap, arg15); \
+                FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, ap); \
+                va_end(ap); \
+            } \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -4167,7 +4167,7 @@
 #define FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
     DECLARE_FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
     DEFINE_FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
     FFF_EXTERN_C \
@@ -4193,14 +4193,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, va_list ap); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -4219,7 +4219,7 @@
             SAVE_ARG(FUNCNAME, 14); \
             SAVE_ARG(FUNCNAME, 15); \
             SAVE_ARG(FUNCNAME, 16); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -4237,18 +4237,18 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 14); \
                 SAVE_ARG_HISTORY(FUNCNAME, 15); \
                 SAVE_ARG_HISTORY(FUNCNAME, 16); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                va_list ap;\
-                va_start(ap, arg16);\
-              FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, ap);\
-                va_end(ap);\
-            }\
+            if(FUNCNAME##_fake.custom_fake){ \
+                va_list ap; \
+                va_start(ap, arg16); \
+                FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, ap); \
+                va_end(ap); \
+            } \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -4256,7 +4256,7 @@
 #define FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
     DECLARE_FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
     DEFINE_FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
     FFF_EXTERN_C \
@@ -4283,14 +4283,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, va_list ap); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -4310,7 +4310,7 @@
             SAVE_ARG(FUNCNAME, 15); \
             SAVE_ARG(FUNCNAME, 16); \
             SAVE_ARG(FUNCNAME, 17); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -4329,18 +4329,18 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 15); \
                 SAVE_ARG_HISTORY(FUNCNAME, 16); \
                 SAVE_ARG_HISTORY(FUNCNAME, 17); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                va_list ap;\
-                va_start(ap, arg17);\
-              FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, ap);\
-                va_end(ap);\
-            }\
+            if(FUNCNAME##_fake.custom_fake){ \
+                va_list ap; \
+                va_start(ap, arg17); \
+                FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, ap); \
+                va_end(ap); \
+            } \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -4348,7 +4348,7 @@
 #define FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
     DECLARE_FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
     DEFINE_FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VOID_FUNC20_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
     FFF_EXTERN_C \
@@ -4376,14 +4376,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, va_list ap); \
             void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VOID_FUNC20_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -4404,7 +4404,7 @@
             SAVE_ARG(FUNCNAME, 16); \
             SAVE_ARG(FUNCNAME, 17); \
             SAVE_ARG(FUNCNAME, 18); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -4424,18 +4424,18 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 16); \
                 SAVE_ARG_HISTORY(FUNCNAME, 17); \
                 SAVE_ARG_HISTORY(FUNCNAME, 18); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                va_list ap;\
-                va_start(ap, arg18);\
-              FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, ap);\
-                va_end(ap);\
-            }\
+            if(FUNCNAME##_fake.custom_fake){ \
+                va_list ap; \
+                va_start(ap, arg18); \
+                FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, ap); \
+                va_end(ap); \
+            } \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -4443,7 +4443,7 @@
 #define FAKE_VOID_FUNC20_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
     DECLARE_FAKE_VOID_FUNC20_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
     DEFINE_FAKE_VOID_FUNC20_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \
     FFF_EXTERN_C \
@@ -4454,33 +4454,33 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, va_list ap); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                RETURN_TYPE ret;\
-                va_list ap;\
-                va_start(ap, arg0);\
-                ret = FUNCNAME##_fake.custom_fake(arg0, ap);\
-                va_end(ap);\
-                return ret;\
-            }\
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            if(FUNCNAME##_fake.custom_fake){ \
+                RETURN_TYPE ret; \
+                va_list ap; \
+                va_start(ap, arg0); \
+                ret = FUNCNAME##_fake.custom_fake(arg0, ap); \
+                va_end(ap); \
+                return ret; \
+            } \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -4488,7 +4488,7 @@
 #define FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \
     DECLARE_FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \
     DEFINE_FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
     FFF_EXTERN_C \
@@ -4500,35 +4500,35 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, va_list ap); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                RETURN_TYPE ret;\
-                va_list ap;\
-                va_start(ap, arg1);\
-                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, ap);\
-                va_end(ap);\
-                return ret;\
-            }\
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            if(FUNCNAME##_fake.custom_fake){ \
+                RETURN_TYPE ret; \
+                va_list ap; \
+                va_start(ap, arg1); \
+                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, ap); \
+                va_end(ap); \
+                return ret; \
+            } \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -4536,7 +4536,7 @@
 #define FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
     DECLARE_FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
     DEFINE_FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
     FFF_EXTERN_C \
@@ -4549,37 +4549,37 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, va_list ap); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
             SAVE_ARG(FUNCNAME, 2); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                RETURN_TYPE ret;\
-                va_list ap;\
-                va_start(ap, arg2);\
-                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, ap);\
-                va_end(ap);\
-                return ret;\
-            }\
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            if(FUNCNAME##_fake.custom_fake){ \
+                RETURN_TYPE ret; \
+                va_list ap; \
+                va_start(ap, arg2); \
+                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, ap); \
+                va_end(ap); \
+                return ret; \
+            } \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -4587,7 +4587,7 @@
 #define FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
     DECLARE_FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
     DEFINE_FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
     FFF_EXTERN_C \
@@ -4601,39 +4601,39 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, va_list ap); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
             SAVE_ARG(FUNCNAME, 2); \
             SAVE_ARG(FUNCNAME, 3); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
                 SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                RETURN_TYPE ret;\
-                va_list ap;\
-                va_start(ap, arg3);\
-                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, ap);\
-                va_end(ap);\
-                return ret;\
-            }\
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            if(FUNCNAME##_fake.custom_fake){ \
+                RETURN_TYPE ret; \
+                va_list ap; \
+                va_start(ap, arg3); \
+                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, ap); \
+                va_end(ap); \
+                return ret; \
+            } \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -4641,7 +4641,7 @@
 #define FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
     DECLARE_FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
     DEFINE_FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
     FFF_EXTERN_C \
@@ -4656,41 +4656,41 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, va_list ap); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
             SAVE_ARG(FUNCNAME, 2); \
             SAVE_ARG(FUNCNAME, 3); \
             SAVE_ARG(FUNCNAME, 4); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
                 SAVE_ARG_HISTORY(FUNCNAME, 3); \
                 SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                RETURN_TYPE ret;\
-                va_list ap;\
-                va_start(ap, arg4);\
-                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, ap);\
-                va_end(ap);\
-                return ret;\
-            }\
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            if(FUNCNAME##_fake.custom_fake){ \
+                RETURN_TYPE ret; \
+                va_list ap; \
+                va_start(ap, arg4); \
+                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, ap); \
+                va_end(ap); \
+                return ret; \
+            } \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -4698,7 +4698,7 @@
 #define FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
     DECLARE_FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
     DEFINE_FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
     FFF_EXTERN_C \
@@ -4714,14 +4714,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, va_list ap); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -4729,28 +4729,28 @@
             SAVE_ARG(FUNCNAME, 3); \
             SAVE_ARG(FUNCNAME, 4); \
             SAVE_ARG(FUNCNAME, 5); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
                 SAVE_ARG_HISTORY(FUNCNAME, 3); \
                 SAVE_ARG_HISTORY(FUNCNAME, 4); \
                 SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                RETURN_TYPE ret;\
-                va_list ap;\
-                va_start(ap, arg5);\
-                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, ap);\
-                va_end(ap);\
-                return ret;\
-            }\
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            if(FUNCNAME##_fake.custom_fake){ \
+                RETURN_TYPE ret; \
+                va_list ap; \
+                va_start(ap, arg5); \
+                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, ap); \
+                va_end(ap); \
+                return ret; \
+            } \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -4758,7 +4758,7 @@
 #define FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
     DECLARE_FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
     DEFINE_FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
     FFF_EXTERN_C \
@@ -4775,14 +4775,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, va_list ap); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -4791,7 +4791,7 @@
             SAVE_ARG(FUNCNAME, 4); \
             SAVE_ARG(FUNCNAME, 5); \
             SAVE_ARG(FUNCNAME, 6); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -4799,21 +4799,21 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 4); \
                 SAVE_ARG_HISTORY(FUNCNAME, 5); \
                 SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                RETURN_TYPE ret;\
-                va_list ap;\
-                va_start(ap, arg6);\
-                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap);\
-                va_end(ap);\
-                return ret;\
-            }\
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            if(FUNCNAME##_fake.custom_fake){ \
+                RETURN_TYPE ret; \
+                va_list ap; \
+                va_start(ap, arg6); \
+                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
+                va_end(ap); \
+                return ret; \
+            } \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -4821,7 +4821,7 @@
 #define FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
     DECLARE_FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
     DEFINE_FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
     FFF_EXTERN_C \
@@ -4839,14 +4839,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, va_list ap); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -4856,7 +4856,7 @@
             SAVE_ARG(FUNCNAME, 5); \
             SAVE_ARG(FUNCNAME, 6); \
             SAVE_ARG(FUNCNAME, 7); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -4865,21 +4865,21 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 5); \
                 SAVE_ARG_HISTORY(FUNCNAME, 6); \
                 SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                RETURN_TYPE ret;\
-                va_list ap;\
-                va_start(ap, arg7);\
-                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap);\
-                va_end(ap);\
-                return ret;\
-            }\
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            if(FUNCNAME##_fake.custom_fake){ \
+                RETURN_TYPE ret; \
+                va_list ap; \
+                va_start(ap, arg7); \
+                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
+                va_end(ap); \
+                return ret; \
+            } \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -4887,7 +4887,7 @@
 #define FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
     DECLARE_FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
     DEFINE_FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
     FFF_EXTERN_C \
@@ -4906,14 +4906,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, va_list ap); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -4924,7 +4924,7 @@
             SAVE_ARG(FUNCNAME, 6); \
             SAVE_ARG(FUNCNAME, 7); \
             SAVE_ARG(FUNCNAME, 8); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -4934,21 +4934,21 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 6); \
                 SAVE_ARG_HISTORY(FUNCNAME, 7); \
                 SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                RETURN_TYPE ret;\
-                va_list ap;\
-                va_start(ap, arg8);\
-                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap);\
-                va_end(ap);\
-                return ret;\
-            }\
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            if(FUNCNAME##_fake.custom_fake){ \
+                RETURN_TYPE ret; \
+                va_list ap; \
+                va_start(ap, arg8); \
+                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
+                va_end(ap); \
+                return ret; \
+            } \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -4956,7 +4956,7 @@
 #define FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
     DECLARE_FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
     DEFINE_FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
     FFF_EXTERN_C \
@@ -4976,14 +4976,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, va_list ap); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -4995,7 +4995,7 @@
             SAVE_ARG(FUNCNAME, 7); \
             SAVE_ARG(FUNCNAME, 8); \
             SAVE_ARG(FUNCNAME, 9); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -5006,21 +5006,21 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 7); \
                 SAVE_ARG_HISTORY(FUNCNAME, 8); \
                 SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                RETURN_TYPE ret;\
-                va_list ap;\
-                va_start(ap, arg9);\
-                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap);\
-                va_end(ap);\
-                return ret;\
-            }\
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            if(FUNCNAME##_fake.custom_fake){ \
+                RETURN_TYPE ret; \
+                va_list ap; \
+                va_start(ap, arg9); \
+                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap); \
+                va_end(ap); \
+                return ret; \
+            } \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -5028,7 +5028,7 @@
 #define FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
     DECLARE_FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
     DEFINE_FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
     FFF_EXTERN_C \
@@ -5049,14 +5049,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, va_list ap); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -5069,7 +5069,7 @@
             SAVE_ARG(FUNCNAME, 8); \
             SAVE_ARG(FUNCNAME, 9); \
             SAVE_ARG(FUNCNAME, 10); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -5081,21 +5081,21 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 8); \
                 SAVE_ARG_HISTORY(FUNCNAME, 9); \
                 SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                RETURN_TYPE ret;\
-                va_list ap;\
-                va_start(ap, arg10);\
-                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap);\
-                va_end(ap);\
-                return ret;\
-            }\
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            if(FUNCNAME##_fake.custom_fake){ \
+                RETURN_TYPE ret; \
+                va_list ap; \
+                va_start(ap, arg10); \
+                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap); \
+                va_end(ap); \
+                return ret; \
+            } \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -5103,7 +5103,7 @@
 #define FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
     DECLARE_FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
     DEFINE_FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
     FFF_EXTERN_C \
@@ -5125,14 +5125,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, va_list ap); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -5146,7 +5146,7 @@
             SAVE_ARG(FUNCNAME, 9); \
             SAVE_ARG(FUNCNAME, 10); \
             SAVE_ARG(FUNCNAME, 11); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -5159,21 +5159,21 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 9); \
                 SAVE_ARG_HISTORY(FUNCNAME, 10); \
                 SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                RETURN_TYPE ret;\
-                va_list ap;\
-                va_start(ap, arg11);\
-                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, ap);\
-                va_end(ap);\
-                return ret;\
-            }\
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            if(FUNCNAME##_fake.custom_fake){ \
+                RETURN_TYPE ret; \
+                va_list ap; \
+                va_start(ap, arg11); \
+                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, ap); \
+                va_end(ap); \
+                return ret; \
+            } \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -5181,7 +5181,7 @@
 #define FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
     DECLARE_FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
     DEFINE_FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC14_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
     FFF_EXTERN_C \
@@ -5204,14 +5204,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, va_list ap); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC14_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -5226,7 +5226,7 @@
             SAVE_ARG(FUNCNAME, 10); \
             SAVE_ARG(FUNCNAME, 11); \
             SAVE_ARG(FUNCNAME, 12); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -5240,21 +5240,21 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 10); \
                 SAVE_ARG_HISTORY(FUNCNAME, 11); \
                 SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                RETURN_TYPE ret;\
-                va_list ap;\
-                va_start(ap, arg12);\
-                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, ap);\
-                va_end(ap);\
-                return ret;\
-            }\
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            if(FUNCNAME##_fake.custom_fake){ \
+                RETURN_TYPE ret; \
+                va_list ap; \
+                va_start(ap, arg12); \
+                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, ap); \
+                va_end(ap); \
+                return ret; \
+            } \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -5262,7 +5262,7 @@
 #define FAKE_VALUE_FUNC14_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
     DECLARE_FAKE_VALUE_FUNC14_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
     DEFINE_FAKE_VALUE_FUNC14_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
     FFF_EXTERN_C \
@@ -5286,14 +5286,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, va_list ap); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -5309,7 +5309,7 @@
             SAVE_ARG(FUNCNAME, 11); \
             SAVE_ARG(FUNCNAME, 12); \
             SAVE_ARG(FUNCNAME, 13); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -5324,21 +5324,21 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 11); \
                 SAVE_ARG_HISTORY(FUNCNAME, 12); \
                 SAVE_ARG_HISTORY(FUNCNAME, 13); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                RETURN_TYPE ret;\
-                va_list ap;\
-                va_start(ap, arg13);\
-                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, ap);\
-                va_end(ap);\
-                return ret;\
-            }\
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            if(FUNCNAME##_fake.custom_fake){ \
+                RETURN_TYPE ret; \
+                va_list ap; \
+                va_start(ap, arg13); \
+                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, ap); \
+                va_end(ap); \
+                return ret; \
+            } \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -5346,7 +5346,7 @@
 #define FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
     DECLARE_FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
     DEFINE_FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
     FFF_EXTERN_C \
@@ -5371,14 +5371,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, va_list ap); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -5395,7 +5395,7 @@
             SAVE_ARG(FUNCNAME, 12); \
             SAVE_ARG(FUNCNAME, 13); \
             SAVE_ARG(FUNCNAME, 14); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -5411,21 +5411,21 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 12); \
                 SAVE_ARG_HISTORY(FUNCNAME, 13); \
                 SAVE_ARG_HISTORY(FUNCNAME, 14); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                RETURN_TYPE ret;\
-                va_list ap;\
-                va_start(ap, arg14);\
-                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, ap);\
-                va_end(ap);\
-                return ret;\
-            }\
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            if(FUNCNAME##_fake.custom_fake){ \
+                RETURN_TYPE ret; \
+                va_list ap; \
+                va_start(ap, arg14); \
+                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, ap); \
+                va_end(ap); \
+                return ret; \
+            } \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -5433,7 +5433,7 @@
 #define FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
     DECLARE_FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
     DEFINE_FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
     FFF_EXTERN_C \
@@ -5459,14 +5459,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, va_list ap); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -5484,7 +5484,7 @@
             SAVE_ARG(FUNCNAME, 13); \
             SAVE_ARG(FUNCNAME, 14); \
             SAVE_ARG(FUNCNAME, 15); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -5501,21 +5501,21 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 13); \
                 SAVE_ARG_HISTORY(FUNCNAME, 14); \
                 SAVE_ARG_HISTORY(FUNCNAME, 15); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                RETURN_TYPE ret;\
-                va_list ap;\
-                va_start(ap, arg15);\
-                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, ap);\
-                va_end(ap);\
-                return ret;\
-            }\
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            if(FUNCNAME##_fake.custom_fake){ \
+                RETURN_TYPE ret; \
+                va_list ap; \
+                va_start(ap, arg15); \
+                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, ap); \
+                va_end(ap); \
+                return ret; \
+            } \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -5523,7 +5523,7 @@
 #define FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
     DECLARE_FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
     DEFINE_FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
     FFF_EXTERN_C \
@@ -5550,14 +5550,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, va_list ap); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -5576,7 +5576,7 @@
             SAVE_ARG(FUNCNAME, 14); \
             SAVE_ARG(FUNCNAME, 15); \
             SAVE_ARG(FUNCNAME, 16); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -5594,21 +5594,21 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 14); \
                 SAVE_ARG_HISTORY(FUNCNAME, 15); \
                 SAVE_ARG_HISTORY(FUNCNAME, 16); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                RETURN_TYPE ret;\
-                va_list ap;\
-                va_start(ap, arg16);\
-                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, ap);\
-                va_end(ap);\
-                return ret;\
-            }\
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            if(FUNCNAME##_fake.custom_fake){ \
+                RETURN_TYPE ret; \
+                va_list ap; \
+                va_start(ap, arg16); \
+                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, ap); \
+                va_end(ap); \
+                return ret; \
+            } \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -5616,7 +5616,7 @@
 #define FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
     DECLARE_FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
     DEFINE_FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC19_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
     FFF_EXTERN_C \
@@ -5644,14 +5644,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, va_list ap); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC19_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -5671,7 +5671,7 @@
             SAVE_ARG(FUNCNAME, 15); \
             SAVE_ARG(FUNCNAME, 16); \
             SAVE_ARG(FUNCNAME, 17); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -5690,21 +5690,21 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 15); \
                 SAVE_ARG_HISTORY(FUNCNAME, 16); \
                 SAVE_ARG_HISTORY(FUNCNAME, 17); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                RETURN_TYPE ret;\
-                va_list ap;\
-                va_start(ap, arg17);\
-                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, ap);\
-                va_end(ap);\
-                return ret;\
-            }\
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            if(FUNCNAME##_fake.custom_fake){ \
+                RETURN_TYPE ret; \
+                va_list ap; \
+                va_start(ap, arg17); \
+                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, ap); \
+                va_end(ap); \
+                return ret; \
+            } \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -5712,7 +5712,7 @@
 #define FAKE_VALUE_FUNC19_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
     DECLARE_FAKE_VALUE_FUNC19_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
     DEFINE_FAKE_VALUE_FUNC19_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
-    
+
 
 #define DECLARE_FAKE_VALUE_FUNC20_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
     FFF_EXTERN_C \
@@ -5741,14 +5741,14 @@
             DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
             RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, va_list ap); \
             RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
+        } FUNCNAME##_Fake; \
+        extern FUNCNAME##_Fake FUNCNAME##_fake; \
         void FUNCNAME##_reset(void); \
     FFF_END_EXTERN_C \
 
 #define DEFINE_FAKE_VALUE_FUNC20_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
     FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
+        FUNCNAME##_Fake FUNCNAME##_fake; \
         RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ...){ \
             SAVE_ARG(FUNCNAME, 0); \
             SAVE_ARG(FUNCNAME, 1); \
@@ -5769,7 +5769,7 @@
             SAVE_ARG(FUNCNAME, 16); \
             SAVE_ARG(FUNCNAME, 17); \
             SAVE_ARG(FUNCNAME, 18); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
+            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
                 SAVE_ARG_HISTORY(FUNCNAME, 0); \
                 SAVE_ARG_HISTORY(FUNCNAME, 1); \
                 SAVE_ARG_HISTORY(FUNCNAME, 2); \
@@ -5789,21 +5789,21 @@
                 SAVE_ARG_HISTORY(FUNCNAME, 16); \
                 SAVE_ARG_HISTORY(FUNCNAME, 17); \
                 SAVE_ARG_HISTORY(FUNCNAME, 18); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
+            } \
+            else{ \
+                HISTORY_DROPPED(FUNCNAME); \
+            } \
             INCREMENT_CALL_COUNT(FUNCNAME); \
             REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                RETURN_TYPE ret;\
-                va_list ap;\
-                va_start(ap, arg18);\
-                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, ap);\
-                va_end(ap);\
-                return ret;\
-            }\
-            RETURN_FAKE_RESULT(FUNCNAME)  \
+            if(FUNCNAME##_fake.custom_fake){ \
+                RETURN_TYPE ret; \
+                va_list ap; \
+                va_start(ap, arg18); \
+                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, ap); \
+                va_end(ap); \
+                return ret; \
+            } \
+            RETURN_FAKE_RESULT(FUNCNAME) \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     FFF_END_EXTERN_C \
@@ -5811,7 +5811,7 @@
 #define FAKE_VALUE_FUNC20_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
     DECLARE_FAKE_VALUE_FUNC20_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
     DEFINE_FAKE_VALUE_FUNC20_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
-    
+
 
 #define PP_NARG_MINUS2(...)     PP_NARG_MINUS2_(__VA_ARGS__, PP_RSEQ_N_MINUS2())
 
