OSDN Git Service

Version 4.90
[vbslib/main.git] / _src / Test / tools / feq / _setup_generated / clib.h
index 2bd223b..6a5d36a 100644 (file)
 \r
  \r
 /*=================================================================*/\r
+/* <<< [Error4_Type/Error4_Type.h] >>> */ \r
+/*=================================================================*/\r
\r
+/***********************************************************************\r
+  <<< [errnum_t] >>> \r
+************************************************************************/\r
+typedef  int  errnum_t;  /* 0=no error */\r
+\r
+#ifndef  NO_ERROR  /* same as windows.h */\r
+       enum { NO_ERROR = 0 };  /* NO_ERROR symbol is for magic code warning only */\r
+#endif\r
+\r
+enum { E_CATEGORY_MASK = 0xFFFFFF00 };  /* E_CATEGORY_* */\r
+enum { E_OFFSET_MASK   = 0x000000FF };\r
+\r
+#ifndef  E_CATEGORY_COMMON  /* If not duplicated */\r
+       #define  E_CATEGORY_COMMON  E_CATEGORY_COMMON\r
+       enum { E_CATEGORY_COMMON = 0x00000400 };  /* 0x001, 0x400 .. 0x4FF : Reseved meaning by clib */\r
+#endif\r
+\r
+#ifndef  E_OTHERS\r
+       #define  E_OTHERS  E_OTHERS\r
+       enum { E_OTHERS = 1 };\r
+#endif\r
+\r
+enum { E_GET_LAST_ERROR     = E_CATEGORY_COMMON | 0x01 }; /* 1025 */\r
+enum { E_HRESULT            = E_CATEGORY_COMMON | 0x02 }; /* 1026 */\r
+enum { E_ERRNO              = E_CATEGORY_COMMON | 0x03 }; /* 1027 */\r
+enum { E_UNKNOWN            = E_CATEGORY_COMMON | 0x04 }; /* 1028 */\r
+enum { E_IN_ERROR           = E_CATEGORY_COMMON | 0x05 }; /* 1029 */\r
+enum { E_IN_FINALLY         = E_CATEGORY_COMMON | 0x06 }; /* 1030 */\r
+enum { E_INVALID_VALUE      = E_CATEGORY_COMMON | 0x07 }; /* 1031 */\r
+enum { E_NOT_IMPLEMENT_YET  = E_CATEGORY_COMMON | 0x09 }; /* 1033 */\r
+enum { E_ORIGINAL           = E_CATEGORY_COMMON | 0x0A }; /* 1034 */\r
+enum { E_LIMITATION         = E_CATEGORY_COMMON | 0x0F }; /* 1039 */\r
+enum { E_FEW_MEMORY         = E_CATEGORY_COMMON | 0x10 }; /* 1040 */\r
+enum { E_FEW_ARRAY          = E_CATEGORY_COMMON | 0x11 }; /* 1041 */\r
+enum { E_CANNOT_OPEN_FILE   = E_CATEGORY_COMMON | 0x12 }; /* 1042 */\r
+enum { E_NOT_FOUND_DLL_FUNC = E_CATEGORY_COMMON | 0x13 }; /* 1043 */\r
+enum { E_BAD_COMMAND_ID     = E_CATEGORY_COMMON | 0x14 }; /* 1044 */\r
+enum { E_NOT_FOUND_SYMBOL   = E_CATEGORY_COMMON | 0x15 }; /* 1045 */\r
+enum { E_NO_NEXT            = E_CATEGORY_COMMON | 0x16 }; /* 1046 */\r
+enum { E_ACCESS_DENIED      = E_CATEGORY_COMMON | 0x17 }; /* 1047 */\r
+enum { E_PATH_NOT_FOUND     = E_CATEGORY_COMMON | 0x18 }; /* 1048 */\r
+enum { E_OUT_OF_WRITABLE    = E_CATEGORY_COMMON | 0x25 }; /* 1061 */\r
+enum { E_NOT_INIT_GLOBAL    = E_CATEGORY_COMMON | 0x6B }; /* 1131 */\r
+enum { E_TIME_OUT           = E_CATEGORY_COMMON | 0x70 }; /* 1136 */\r
+enum { E_BINARY_FILE        = E_CATEGORY_COMMON | 0xBF }; /* 1215 */\r
+enum { E_DEBUG_BREAK        = E_CATEGORY_COMMON | 0xDB }; /* 1243 */\r
+enum { E_EXIT_TEST          = E_CATEGORY_COMMON | 0xE7 }; /* 1255 */\r
+enum { E_FIFO_OVER          = E_CATEGORY_COMMON | 0xF0 }; /* 1264 */\r
+\r
+\r
\r
+/*=================================================================*/\r
 /* <<< [CRT/CRT.h] >>> */ \r
 /*=================================================================*/\r
  \r
 #include  <direct.h> \r
  \r
 /*=================================================================*/\r
-/* <<< [CRT_plus/CRT_plus.h] >>> */ \r
+/* <<< [CRT_plus_1/CRT_plus_1.h] >>> */ \r
 /*=================================================================*/\r
  \r
 /***********************************************************************\r
@@ -74,12 +129,21 @@ typedef  unsigned int    bool_t;     /* MISRA-C:1998 No.13 */  /* This is not C9
 typedef  unsigned int    bool32_t;   /* For 32bit compiler */\r
 typedef  unsigned short  bool16_t;\r
 typedef  unsigned char   bool8_t;\r
+typedef  int             int_fast32_t;\r
+typedef  int             int_fast16_t;\r
+typedef  int             int_fast8_t;\r
+typedef  unsigned int    uint_fast32_t;\r
+typedef  unsigned int    uint_fast16_t;\r
+typedef  unsigned int    uint_fast8_t;\r
 \r
 \r
  \r
 /*********************************************************************************************\r
+  <<< [bit_flags32_t] [bit_flags_fast32_t] >>> \r
   <<< [BitField] [BIT_FIELD_ENDIAN] [BIT_FIELD_LITTLE_ENDIAN] [BIT_FIELD_BIG_ENDIAN] >>> \r
 **********************************************************************************************/\r
+typedef  uint32_t      bit_flags32_t; \r
+typedef  uint_fast32_t bit_flags_fast32_t;\r
 typedef  unsigned int  BitField; \r
 typedef  uint32_t      BitField32;\r
 #define  BIT_FIELD_ENDIAN           BIT_FIELD_LITTLE_ENDIAN\r
@@ -89,6 +153,34 @@ typedef  uint32_t      BitField32;
 \r
  \r
 /***********************************************************************\r
+  <<< [IsBitSet]        Check 1 bit >>> \r
+  <<< [IsAnyBitsSet]    Check multiple bits >>> \r
+  <<< [IsAllBitsSet]    Check multiple bits >>> \r
+  <<< [IsBitNotSet]     Check 1 bit >>> \r
+  <<< [IsAnyBitsNotSet] Check multiple bits >>> \r
+  <<< [IsAllBitsNotSet] Check multiple bits >>> \r
+************************************************************************/\r
+#define  IsBitSet( variable, const_value ) \\r
+       ( ( (variable) & (const_value) ) != 0 )\r
+\r
+#define  IsAnyBitsSet( variable, or_const_value ) \\r
+       ( ( (variable) & (or_const_value) ) != 0 )\r
+\r
+#define  IsAllBitsSet( variable, or_const_value ) \\r
+       ( ( (variable) & (or_const_value) ) == (or_const_value) )\r
+\r
+#define  IsBitNotSet( variable, const_value ) \\r
+       ( ( (variable) & (const_value) ) == 0 )\r
+\r
+#define  IsAnyBitsNotSet( variable, or_const_value ) \\r
+       ( ( (variable) & (or_const_value) ) != (or_const_value) )\r
+\r
+#define  IsAllBitsNotSet( variable, or_const_value ) \\r
+       ( ( (variable) & (or_const_value) ) == 0 )\r
+\r
+\r
\r
+/***********************************************************************\r
   <<< [bool type] >>> \r
 ************************************************************************/\r
 #ifndef  __cplusplus\r
@@ -102,6 +194,16 @@ typedef  uint32_t      BitField32;
 \r
  \r
 /***********************************************************************\r
+  <<< [FuncType] >>> \r
+************************************************************************/\r
+typedef  int (*FuncType)( void* Param ); \r
+typedef  errnum_t (* InitializeFuncType )( void* self, void* Parameter );\r
+//typedef  int (*FinishFuncType)( void* m, int e );  /*[FinishFuncType]*/\r
+typedef  errnum_t (*FinalizeFuncType)( void* self, errnum_t e );  /*[FinalizeFuncType]*/\r
+\r
+\r
\r
+/***********************************************************************\r
   <<< [fopen_ccs] >>> \r
 ************************************************************************/\r
 #if defined(_UNICODE) \r
@@ -113,16 +215,6 @@ typedef  uint32_t      BitField32;
 \r
  \r
 /***********************************************************************\r
-  <<< [FlagsOnlyConfigClass] >>> \r
-************************************************************************/\r
-typedef struct _FlagsOnlyConfigClass  FlagsOnlyConfigClass;\r
-struct _FlagsOnlyConfigClass {\r
-       BitField  Flags;\r
-};\r
-\r
-\r
\r
-/***********************************************************************\r
   <<< [inline] [SUPPORT_INLINE_C_FUNC] [NOT_USE_INLINE_MACRO] >>> \r
 ************************************************************************/\r
 #ifndef  SUPPORT_INLINE_C_FUNC\r
@@ -142,354 +234,535 @@ struct _FlagsOnlyConfigClass {
 \r
 \r
  \r
-/***********************************************************************\r
-  <<< [FuncType] [FinishFuncType] >>> \r
-************************************************************************/\r
-typedef  int (*FuncType)( void* Param ); \r
-typedef  int (*FinishFuncType)( void* m, int e );\r
+/**************************************************************************\r
+ <<< [ttoi_ex] >>> \r
+***************************************************************************/\r
+int  ttoi_ex( const TCHAR* string,  bit_flags_fast32_t options );\r
 \r
 \r
  \r
 /*=================================================================*/\r
-/* <<< [DebugTools/DebugTools.h] >>> */ \r
+/* <<< [Error4_Inline/Error4_Inline.h] >>> */ \r
 /*=================================================================*/\r
  \r
-#if  __cplusplus\r
- extern "C" {  /* Start of C Symbol */ \r
-#endif\r
+/***********************************************************************\r
+  <<< [UNREFERENCED_VARIABLE] >>> \r
+  <<< [UNREFERENCED_VARIABLE_2] >>>\r
+  <<< [UNREFERENCED_VARIABLE_3] >>>\r
+  <<< [UNREFERENCED_VARIABLE_4] >>>\r
+************************************************************************/\r
+#ifdef  __linux__\r
+       #define  UNREFERENCED_VARIABLE( x )\r
+       #define  UNREFERENCED_VARIABLES( x )\r
+#else\r
 \r
+#define  UNREFERENCED_VARIABLE( a1 )       UNREFERENCED_VARIABLE_Sub( &(a1) )\r
+#define  UNREFERENCED_VARIABLE_2( a1,a2 )  UNREFERENCED_VARIABLE_2_Sub( &(a1), &(a2) )\r
+#define  UNREFERENCED_VARIABLE_3( a1,a2,a3 )     UNREFERENCED_VARIABLE_3_Sub( &(a1), &(a2), &(a3) )\r
+#define  UNREFERENCED_VARIABLE_4( a1,a2,a3,a4 )  UNREFERENCED_VARIABLE_4_Sub( &(a1), &(a2), &(a3), &(a4) )\r
+\r
+inline void  UNREFERENCED_VARIABLE_Sub( const void* a1 ) { a1; }\r
+inline void  UNREFERENCED_VARIABLE_2_Sub( const void* a1, const void* a2 ) { a1,a2; }\r
+inline void  UNREFERENCED_VARIABLE_3_Sub( const void* a1, const void* a2, const void* a3 ) { a1,a2,a3; }\r
+inline void  UNREFERENCED_VARIABLE_4_Sub( const void* a1, const void* a2, const void* a3, const void* a4 ) { a1,a2,a3,a4; }\r
 \r
-#ifndef NDEBUG\r
-       #define  NDEBUG_ERROR\r
-#else\r
-       #define  NDEBUG_ERROR  ___cut_NDEBUG_ERROR\r
 #endif\r
 \r
+\r
  \r
-#ifndef  dll_global_g_DebugBreakCount\r
-       #define  dll_global_g_DebugBreakCount  /* [dll_global_g_DebugBreakCount_NotDLL] */\r
-#endif\r
+/*=================================================================*/\r
+/* <<< [Lock_1/Lock_1.h] >>> */ \r
+/*=================================================================*/\r
  \r
 /***********************************************************************\r
-  <<< [TestableDebugBreak] >>> \r
+  <<< [SingletonInitializerClass] >>> \r
 ************************************************************************/\r
-#define  TestableDebugBreak()  ( g_DebugBreakCount++, (TestableDebugBreak_isEnabled() ? (DebugBreak(),0) : 0 ) )\r
-int      TestableDebugBreak_isEnabled(void);\r
-dll_global_g_DebugBreakCount extern  int  g_bTestableDebugBreak_Disable;\r
-dll_global_g_DebugBreakCount extern  int  g_DebugBreakCount;\r
-\r
+typedef struct {\r
+       volatile LONG  InitializeStep;\r
+} SingletonInitializerClass;\r
 \r
\r
-#if  __cplusplus\r
- }  /* End of C Symbol */ \r
+#ifndef  SingletonInitializerClass_FailSleepTime\r
+       #ifndef NDEBUG\r
+               #define  SingletonInitializerClass_FailSleepTime  60000\r
+       #else\r
+               #define  SingletonInitializerClass_FailSleepTime  0\r
+       #endif\r
 #endif\r
 \r
+bool  SingletonInitializerClass_isFirst( SingletonInitializerClass* self );\r
+void  SingletonInitializerClass_onFinishedInitialize( SingletonInitializerClass* self, int e );\r
+bool  SingletonInitializerClass_isInitialized( SingletonInitializerClass* self );\r
+\r
 \r
  \r
 /*=================================================================*/\r
-/* <<< [Error4/Error4.h] >>> */ \r
+/* <<< [Print/Print2.h] >>> */ \r
 /*=================================================================*/\r
  \r
 #if  __cplusplus\r
  extern "C" {  /* Start of C Symbol */ \r
 #endif\r
-\r
-\r
-/***********************************************************************\r
-  <<< [errnum_t] >>> \r
-************************************************************************/\r
-typedef  int  errnum_t;  /* 0=no error */\r
-\r
-#ifndef  NO_ERROR  /* same as windows.h */\r
-       enum { NO_ERROR = 0 };  /* NO_ERROR symbol is for magic code warning only */\r
-#endif\r
-\r
-enum { E_CATEGORY_MASK = 0xFFFFFF00 };  /* E_CATEGORY_* */\r
-enum { E_OFFSET_MASK   = 0x000000FF };\r
-\r
-#ifndef  E_CATEGORY_COMMON  /* If not duplicated */\r
-       #define  E_CATEGORY_COMMON  E_CATEGORY_COMMON\r
-       enum { E_CATEGORY_COMMON = 0x00000400 };  /* 0x001, 0x400 .. 0x4FF : Reseved meaning by clib */\r
\r
+errnum_t  vsprintf_r( char* s, size_t s_size, const char* format, va_list va ); \r
\r
+errnum_t  vswprintf_r( wchar_t* s, size_t s_size, const wchar_t* format, va_list va ); \r
\r
+/*[vstprintf_r]*/\r
+#if defined(_UNICODE) \r
+  #define  vstprintf_r  vswprintf_r\r
+#else\r
+  #define  vstprintf_r  vsprintf_r\r
 #endif\r
-\r
-#ifndef  E_OTHERS\r
-       #define  E_OTHERS  E_OTHERS\r
-       enum { E_OTHERS = 1 };\r
\r
+errnum_t  stprintf_r( TCHAR* s, size_t s_size, const TCHAR* format, ... ); \r
\r
+errnum_t  stcpy_part_r( TCHAR* s, size_t s_size, TCHAR* s_start, TCHAR** p_s_last, \r
+                   const TCHAR* src, const TCHAR* src_over );\r
+errnum_t  stprintf_part_r( TCHAR* s, size_t s_size, TCHAR* s_start, TCHAR** p_s_last,\r
+                      const TCHAR* format, ... );\r
\r
+#if  __cplusplus\r
+ }    /* End of C Symbol */ \r
 #endif\r
 \r
-enum { E_GET_LAST_ERROR     = E_CATEGORY_COMMON | 0x01 }; /* 1025 */\r
-enum { E_HRESULT            = E_CATEGORY_COMMON | 0x02 }; /* 1026 */\r
-enum { E_ERRNO              = E_CATEGORY_COMMON | 0x03 }; /* 1027 */\r
-enum { E_UNKNOWN            = E_CATEGORY_COMMON | 0x04 }; /* 1028 */\r
-enum { E_IN_ERROR           = E_CATEGORY_COMMON | 0x05 }; /* 1029 */\r
-enum { E_IN_FINALLY         = E_CATEGORY_COMMON | 0x06 }; /* 1030 */\r
-enum { E_INVALID_VALUE      = E_CATEGORY_COMMON | 0x07 }; /* 1031 */\r
-enum { E_NOT_IMPLEMENT_YET  = E_CATEGORY_COMMON | 0x09 }; /* 1033 */\r
-enum { E_ORIGINAL           = E_CATEGORY_COMMON | 0x0A }; /* 1034 */\r
-enum { E_LIMITATION         = E_CATEGORY_COMMON | 0x0F }; /* 1039 */\r
-enum { E_FEW_MEMORY         = E_CATEGORY_COMMON | 0x10 }; /* 1040 */\r
-enum { E_FEW_ARRAY          = E_CATEGORY_COMMON | 0x11 }; /* 1041 */\r
-enum { E_CANNOT_OPEN_FILE   = E_CATEGORY_COMMON | 0x12 }; /* 1042 */\r
-enum { E_NOT_FOUND_DLL_FUNC = E_CATEGORY_COMMON | 0x13 }; /* 1043 */\r
-enum { E_BAD_COMMAND_ID     = E_CATEGORY_COMMON | 0x14 }; /* 1044 */\r
-enum { E_NOT_FOUND_SYMBOL   = E_CATEGORY_COMMON | 0x15 }; /* 1045 */\r
-enum { E_NO_NEXT            = E_CATEGORY_COMMON | 0x16 }; /* 1046 */\r
-enum { E_ACCESS_DENIED      = E_CATEGORY_COMMON | 0x17 }; /* 1047 */\r
-enum { E_PATH_NOT_FOUND     = E_CATEGORY_COMMON | 0x18 }; /* 1048 */\r
-enum { E_OUT_OF_WRITABLE    = E_CATEGORY_COMMON | 0x25 }; /* 1061 */\r
-enum { E_NOT_INIT_GLOBAL    = E_CATEGORY_COMMON | 0x6B }; /* 1131 */\r
-enum { E_TIME_OUT           = E_CATEGORY_COMMON | 0x70 }; /* 1136 */\r
-enum { E_DEBUG_BREAK        = E_CATEGORY_COMMON | 0xDB }; /* 1243 */\r
-enum { E_EXIT_TEST          = E_CATEGORY_COMMON | 0xE7 }; /* 1255 */\r
-enum { E_FIFO_OVER          = E_CATEGORY_COMMON | 0xF0 }; /* 1264 */\r
\r
+/*=================================================================*/\r
+/* <<< [SetX/SetX.h] >>> */ \r
+/*=================================================================*/\r
\r
+#ifndef  __SETX_H \r
+#define  __SETX_H\r
 \r
+#ifdef  __cplusplus\r
+ extern "C" {  /* Start of C Symbol */\r
+#endif\r
 \r
  \r
 /***********************************************************************\r
-  <<< [SetBreakErrorID] >>> \r
+  <<< [Set2] >>> \r
 ************************************************************************/\r
-#ifndef  ERR2_ENABLE_ERROR_BREAK\r
-       #if ! NDEBUG\r
-               #define  ERR2_ENABLE_ERROR_BREAK  1\r
-       #else\r
-               #define  ERR2_ENABLE_ERROR_BREAK  0\r
+typedef  struct _Set2  Set2;\r
+struct _Set2 {\r
+       void*  First;\r
+       void*  Next;\r
+       void*  Over;\r
+\r
+       #ifdef _DEBUG\r
+       void**   PointerOfDebugArray;  /* void<type> */\r
        #endif\r
-#endif\r
+};\r
 \r
-#if ERR2_ENABLE_ERROR_BREAK\r
-       /* "IF" is able to break at nearest code raising error */\r
-       #define  IF_D(x)  IF(x)\r
-       #define  IF(x) \\r
-               if( (x) && ( TryOnIfTrue_imp((const char*)__FILE__,__LINE__) ? (TestableDebugBreak(),1) : (1) ) )\r
+//[Set2_IteratorClass]\r
+typedef struct _Set2_IteratorClass  Set2_IteratorClass;\r
+struct _Set2_IteratorClass {\r
+       Set2*     Parent;\r
+       int       ElementSize;\r
+       uint8_t*  Current;\r
+};\r
 \r
-       #define  ASSERT_R( x, goto_err_or_Statement ) \\r
-               __pragma(warning(push)) \\r
-               __pragma(warning(disable:4127)) \\r
-                       do{  IF(!(x)) { goto_err_or_Statement; } }  while(0)   /* do-while is CERT standard PRE10-C */ \\r
-               __pragma(warning(pop))\r
+#define  Set2_initConst( m )  ( (m)->First = NULL, (m)->Next = NULL )\r
+int  Set2_init( Set2* m, int FirstSize );\r
+int  Set2_finish( Set2* m, int e );\r
+#define  Set2_isInited( m )  ( (m)->First != NULL )\r
 \r
-       #define  ASSERT_D( x, goto_err_or_Statement )  ASSERT_R( x, goto_err_or_Statement )\r
-#else\r
-       #define  IF(x)  if(x)\r
-       #define  IF_D(x) \\r
-               __pragma(warning(push)) \\r
-               __pragma(warning(disable:4127)) \\r
-                       if(0) \\r
-               __pragma(warning(pop))\r
+#define  Set2_alloc( m, pp, type ) \\r
+       Set2_alloc_imp( m, (void*)(pp), sizeof(type) )\r
 \r
-       #define  ASSERT_R( x, goto_err_or_Statement ) \\r
-               __pragma(warning(push)) \\r
-               __pragma(warning(disable:4127)) \\r
-                       do{  if(!(x)) { goto_err_or_Statement; } }while(0)   /* do-while is CERT standard PRE10-C */ \\r
-               __pragma(warning(pop))\r
+int  Set2_alloc_imp( Set2* m, void* pm, size_t size );\r
 \r
-       #define  ASSERT_D( x, goto_err_or_Statement )\r
-#endif\r
+#define  Set2_push( m, pp, type ) \\r
+       Set2_alloc_imp( m, (void*)(pp), sizeof(type) )\r
 \r
+#define  Set2_pop( m, pp, type ) \\r
+       Set2_pop_imp( m, (void*)(pp), sizeof(type) )\r
 \r
-#if ! ERR2_ENABLE_ERROR_BREAK\r
-       inline void  SetBreakErrorID( int ID ) { ID=ID; /* avoid warning */ }\r
-       inline void  ClearError() {}\r
-       inline bool  IsErrorMode() { return 0; }\r
-       inline void  IfErrThenBreak() {}\r
-       typedef  int  ErrStackAreaClass;  // dummy type\r
-       #define  PushErr( ErrStackArea )  UNREFERENCED_VARIABLES( ErrStackArea )\r
-       #define  PopErr(  ErrStackArea )  UNREFERENCED_VARIABLES( ErrStackArea )\r
-#else\r
-       void  SetBreakErrorID( int ID );\r
-       void  ClearError(void);\r
-       bool  IsErrorMode(void);\r
-       void  IfErrThenBreak(void);\r
-       typedef  struct _Err2  ErrStackAreaClass;\r
-       void  PushErr( ErrStackAreaClass* ErrStackArea );\r
-       void  PopErr(  ErrStackAreaClass* ErrStackArea );\r
+int  Set2_pop_imp( Set2* m, void* pp, size_t size );\r
 \r
-       int   TryOnIfTrue_imp( const char* FilePath, int LineNum );\r
+#define  Set2_freeLast( m, p, type, e ) \\r
+       ( ((char*)(m)->Next - sizeof(type) == (char*)(p)) ? \\r
+               (m)->Next = (p), (e) : \\r
+               ((e)?(e):E_OTHERS) )\r
 \r
-       typedef  struct _Err2  Err2;\r
-       struct _Err2 {\r
-               int  ErrID;\r
-               int  BreakErrID;\r
-               int  IsErr;\r
-               const char*  FilePath;\r
-               int          LineNum;\r
-       };\r
-       dll_global_g_DebugBreakCount extern  Err2  g_Err2;\r
-#endif\r
+#define  Set2_toEmpty( m ) \\r
+       ( (m)->Next = (m)->First, 0 )\r
 \r
+#define  Set2_expandIfOverByAddr( m, OverAddrBasedOnNowFirst ) \\r
+       ( (void*)(OverAddrBasedOnNowFirst) <= (m)->Over ? 0 : \\r
+               Set2_expandIfOverByAddr_imp( m, OverAddrBasedOnNowFirst ) )\r
 \r
\r
-/***********************************************************************\r
-  <<< [ErrorMessage] >>> \r
-************************************************************************/\r
-void  Error4_printf( const TCHAR* format, ... );\r
-void  Error4_getErrStr( int ErrNum, TCHAR* out_ErrStr, size_t ErrStrSize );\r
-void  Error4_clear( int err_num );\r
-errnum_t  SaveWindowsLastError(void);\r
+#define  Set2_expandIfOverByOffset( m, Size ) \\r
+       Set2_expandIfOverByAddr( m, (char*)(m)->First + (Size) )\r
+int  Set2_expandIfOverByAddr_imp( Set2* m, void* OverAddrBasedOnNowFirst );\r
 \r
+#define  Set2_allocMulti( m, out_pElem, ElemType, nElem ) \\r
+       Set2_allocMulti_sub( m, (void*)(out_pElem), sizeof(ElemType) * (nElem) )\r
+int  Set2_allocMulti_sub( Set2* m, void* out_pElem, size_t ElemsSize );\r
+\r
+#define  Set2_forEach( self, Item, Item_Over, Type ) \\r
+       *(Item) = (Type*)( (self)->First ),  *(Item_Over) = (Type*)( (self)->Next ); \\r
+       *(Item) < *(Item_Over); \\r
+       *(Item) += 1\r
+\r
+errnum_t  Set2_getIterator( Set2* self, Set2_IteratorClass* out_Iterator, int ElementSize );\r
+errnum_t  Set2_getDescendingIterator( Set2* self, Set2_IteratorClass* out_Iterator, int ElementSize );\r
+void*  Set2_IteratorClass_getNext( Set2_IteratorClass* self );\r
+void*  Set2_IteratorClass_getPrevious( Set2_IteratorClass* self );\r
+\r
+\r
+//[Set2_forEach2]\r
+#define  Set2_forEach2( self, Iterator, out_Element ) \\r
+       Set2_forEach2_1( self, Iterator, out_Element, sizeof(**(out_Element)) ); \\r
+       Set2_forEach2_2( self, Iterator, out_Element ); \\r
+       Set2_forEach2_3( self, Iterator, out_Element )\r
+\r
+inline void  Set2_forEach2_1( Set2* self, Set2_IteratorClass* Iterator,  void* out_Element,\r
+       size_t ElementSize )\r
+{\r
+       Set2_getIterator( self, Iterator, ElementSize );\r
+       *(void**) out_Element = Set2_IteratorClass_getNext( Iterator );\r
+}\r
+\r
+inline bool  Set2_forEach2_2( Set2* self,  Set2_IteratorClass* Iterator,  void* out_Element )\r
+{\r
+       UNREFERENCED_VARIABLE_2( self, Iterator );\r
+       return  ( *(void**) out_Element != NULL );\r
+}\r
+\r
+inline void  Set2_forEach2_3( Set2* self, Set2_IteratorClass* Iterator,  void* out_Element )\r
+{\r
+       UNREFERENCED_VARIABLE( self );\r
+       *(void**) out_Element = Set2_IteratorClass_getNext( Iterator );\r
+}\r
+\r
+\r
+#define  Set2_ref( m, iElem, out_pElem, ElemType ) \\r
+       Set2_ref_imp( m, iElem, out_pElem, sizeof(ElemType) )\r
+\r
+int  Set2_ref_imp( Set2* m, int iElem, void* out_pElem, size_t ElemSize );\r
+\r
+#define  Set2_getCount( m, Type ) \\r
+       ( (Type*)(m)->Next - (Type*)(m)->First )\r
+\r
+#define  Set2_checkPtrInArr( m, p ) \\r
+       ( (m)->First <= (p) && (p) < (m)->Over ? 0 : E_NOT_FOUND_SYMBOL )\r
+\r
+int  Set2_separate( Set2* m, int NextSize, void** allocate_Array );\r
+\r
+#ifdef _DEBUG\r
+void  Set2_setDebug( Set2* m, void* PointerOfDebugArray );\r
+#endif\r
 \r
  \r
-/***********************************************************************\r
-  <<< [stdio] >>> \r
-************************************************************************/\r
-void  Error4_showToStdErr( int err_num );\r
+#ifdef  __cplusplus\r
+ }  /* End of C Symbol */ \r
+#endif\r
+#endif\r
\r
+/*=================================================================*/\r
+/* <<< [DebugTools/DebugTools.h] >>> */ \r
+/*=================================================================*/\r
\r
+#if  __cplusplus\r
+ extern "C" {  /* Start of C Symbol */ \r
+#endif\r
 \r
 \r
+#ifndef NDEBUG\r
+       #define  NDEBUG_ERROR\r
+#else\r
+       #define  NDEBUG_ERROR  ___cut_NDEBUG_ERROR\r
+#endif\r
+\r
\r
+/*[dll_global_g_DebugBreakCount]*/\r
+#ifndef  dll_global_g_DebugBreakCount\r
+       #define  dll_global_g_DebugBreakCount\r
+#endif\r
  \r
 /***********************************************************************\r
-  <<< [errno] >>> \r
+  <<< [TestableDebugBreak] >>> \r
 ************************************************************************/\r
-int  Error4_raiseErrno(void);\r
+#define  TestableDebugBreak()  ( TestableDebugBreak_Sub() ? (DebugBreakR(),0) : 0 )\r
+int      TestableDebugBreak_Sub(void);\r
+\r
+void     SetTestableDebugBreak( bool IsEnableBreak );\r
+int      GetDebugBreakCount(void);\r
+\r
 \r
  \r
-/***********************************************************************\r
-  <<< [DEBUG_TRUE, DEBUG_FALSE] >>> \r
-************************************************************************/\r
-#if ! NDEBUG\r
- #define  DEBUG_TRUE   1\r
- #define  DEBUG_FALSE  0\r
-#else\r
- #define  DEBUG_TRUE   __cut_on_debug =\r
- #define  DEBUG_FALSE  0\r
+#if  __cplusplus\r
+ }  /* End of C Symbol */ \r
 #endif\r
 \r
 \r
  \r
-/***********************************************************************\r
-  <<< [DEBUG_CODE] >>> \r
-************************************************************************/\r
-#if ! NDEBUG\r
-       #define  DEBUG_CODE( expression ) \\r
-               __pragma(warning(push)) \\r
-               __pragma(warning(disable:4127)) \\r
-                       do { expression; } while(0)   /* do-while is CERT standard PRE10-C */ \\r
-               __pragma(warning(pop))\r
-#else\r
-       #define  DEBUG_CODE( expression )  /* no execute */\r
+/*=================================================================*/\r
+/* <<< [StrT/StrT.h] >>> */ \r
+/*=================================================================*/\r
\r
+#if  __cplusplus\r
+ extern "C" {  /* Start of C Symbol */ \r
 #endif\r
 \r
+errnum_t  StrT_cpy( TCHAR* Dst, size_t DstSize, const TCHAR* Src );\r
+errnum_t  StrT_cat( TCHAR* Dst, size_t DstSize, const TCHAR* Src );\r
+TCHAR*  StrT_chrs( const TCHAR* s, const TCHAR* keys );\r
+TCHAR*  StrT_rstr( const TCHAR* String, const TCHAR* SearchStart, const TCHAR* Keyword,\r
+       void* NullConfig );\r
+TCHAR*  StrT_skip( const TCHAR* s, const TCHAR* keys );\r
+bool    StrT_isCIdentifier( TCHAR Character );\r
+TCHAR*  StrT_searchOverOfCIdentifier( const TCHAR* Text );\r
+int  StrT_cmp_part( const TCHAR* StringA_Start, const TCHAR* StringA_Over,\r
+       const TCHAR* StringB );\r
+int  StrT_cmp_part2( const TCHAR* StringA_Start, const TCHAR* StringA_Over,\r
+       const TCHAR* StringB_Start, const TCHAR* StringB_Over );\r
+#define  TwoChar8( Character1, Character2 ) \\r
+       ( (Character1) + ( (Character2) << 8 ) )\r
+#define  FourChar8( Character1, Character2, Character3, Character4 ) \\r
+       ( (Character1) + ( (Character2) << 8 ) + ( (Character3) << 16 ) + ( (Character4) << 24 ) )\r
+\r
+inline errnum_t  StrT_cat( TCHAR* Dst, size_t DstSize, const TCHAR* Src )\r
+{\r
+       return  stcpy_part_r( Dst, DstSize, _tcschr( Dst, _T('\0') ), NULL, Src, NULL );\r
+}\r
+\r
+\r
\r
+//[GetStringSizeFromPointer]\r
+inline size_t  GetStringSizeFromPointer( void* String, size_t StringSize, void* Pointer )\r
+{\r
+       return  (uintptr_t) String + StringSize - (uintptr_t) Pointer;\r
+}\r
 \r
  \r
 /***********************************************************************\r
-  <<< [CHECK_ARG] >>> \r
+  <<< [StrT_Malloc] >>> \r
 ************************************************************************/\r
-#ifndef  CHECK_ARG\r
-  #define  CHECK_ARG  1\r
-#endif\r
+errnum_t  MallocAndCopyString( const TCHAR** out_NewString, const TCHAR* SourceString );\r
+errnum_t  MallocAndCopyString_char( const TCHAR** out_NewString, const char* SourceString );\r
+errnum_t  MallocAndCopyStringByLength( const TCHAR** out_NewString, const TCHAR* SourceString,\r
+       unsigned CountOfCharacter );\r
 \r
-/*[GetIsCheckArg][SetIsCheckArg]*/\r
-#if CHECK_ARG\r
-extern bool  g_IsCheckArg;\r
-inline bool  GetIsCheckArg(void)  { return  g_IsCheckArg; }\r
-inline void  SetIsCheckArg( bool IsCheckArg )  { g_IsCheckArg = IsCheckArg; }\r
+#ifndef _UNICODE\r
+       #define  MallocAndCopyString_char  MallocAndCopyString\r
 #endif\r
 \r
-\r
  \r
 /***********************************************************************\r
-  <<< [INVALID_VALUE] >>> \r
+  <<< [StrT_Edit] >>> \r
 ************************************************************************/\r
-enum { INVALID_VALUE = 0xDEDEDEDE };\r
+errnum_t  StrT_trim( TCHAR* out_Str, size_t out_Str_Size, const TCHAR* in_Str );\r
+errnum_t  StrT_cutLastOf( TCHAR* in_out_Str, TCHAR Charactor );\r
+errnum_t  StrT_cutLineComment( TCHAR* out_Str, size_t out_Str_Size, const TCHAR* in_Str, const TCHAR* CommentSign );\r
+errnum_t  StrT_meltCmdLine( TCHAR* out_Str, size_t out_Str_Size, const TCHAR** pLine );\r
+errnum_t  StrT_getExistSymbols( unsigned* out, bool bCase, const TCHAR* Str, const TCHAR* Symbols, ... );\r
+errnum_t  StrT_replace1( TCHAR* in_out_String, TCHAR FromCharacter, TCHAR ToCharacter,\r
+       unsigned Opt );\r
 \r
 \r
  \r
 /***********************************************************************\r
-  <<< [DUMMY_INITIAL_VALUE] >>> \r
+  <<< [W3CDTF] >>> \r
 ************************************************************************/\r
-#ifndef NDEBUG\r
-       enum { DUMMY_INITIAL_VALUE = 0xDEDEDEDE };\r
-       enum { DUMMY_INITIAL_VALUE_8BIT  = 0xDE };\r
-       enum { DUMMY_INITIAL_VALUE_16BIT = 0xDEDE };\r
-       #ifdef _UNICODE\r
-               enum { DUMMY_INITIAL_VALUE_TCHAR = 0xDEDE };\r
-       #else\r
-               enum { DUMMY_INITIAL_VALUE_TCHAR = 0xDE - 0x100 };  /* 0x100 is to change to signed type */\r
-       #endif\r
-       /* Disable VC++ warning C4701 : local variable may be used without having been initialized */\r
-       /* 0xDEDEDEDE means "not initialized" */\r
-#else\r
-       enum { DUMMY_INITIAL_VALUE = 0 };\r
-       enum { DUMMY_INITIAL_VALUE_8BIT  = 0 };\r
-       enum { DUMMY_INITIAL_VALUE_16BIT = 0 };\r
-       enum { DUMMY_INITIAL_VALUE_TCHAR = 0 };\r
-       /* 0 reduces code size */\r
-#endif\r
+enum { W3CDTF_MAX_LENGTH = 27+3 };  /* \8f¬\90\943\8c\85 */\r
+enum { W3CDTF_CURRENT_TIME_ZONE = 9999 };\r
+\r
+errnum_t  W3CDTF_fromSYSTEMTIME( TCHAR* out_W3CDTF, size_t W3CDTF_ByteSize,\r
+       const SYSTEMTIME* Time, int TimeZoneMinute );\r
+errnum_t  W3CDTF_toSYSTEMTIME( const TCHAR* String, SYSTEMTIME* out_Time, int* out_BiasMinute );\r
+errnum_t  W3CDTF_getTimeZoneDesignator( TCHAR* out_TZD, size_t TZD_ByteSize,\r
+       int  BiasMinute );\r
 \r
 \r
  \r
 /***********************************************************************\r
-  <<< [MEMSET_TO_NOT_INIT] >>> \r
+  <<< [StrT_Path] >>> \r
 ************************************************************************/\r
-#ifndef  USE_MEMSET_TO_NOT_INIT\r
- #if ! NDEBUG\r
-  #define  USE_MEMSET_TO_NOT_INIT  1\r
- #else\r
-  #define  USE_MEMSET_TO_NOT_INIT  0\r
- #endif\r
-#endif\r
+enum { StrT_LocalPathMaxSize = 4096 };\r
+enum { MAX_LOCAL_PATH = 4096 };\r
+TCHAR*  StrT_refFName( const TCHAR* s );\r
+TCHAR*  StrT_refExt( const TCHAR* s );\r
+bool  StrT_isFullPath( const TCHAR* s );\r
+\r
+errnum_t  StrT_getFullPath_part( TCHAR* Str, size_t StrSize, TCHAR* StrStart,\r
+       TCHAR** out_StrLast, const TCHAR* StepPath, const TCHAR* BasePath );\r
+errnum_t  StrT_allocateFullPath( TCHAR** out_FullPath, const TCHAR* StepPath, TCHAR* BasePath );\r
+errnum_t  StrT_getStepPath( TCHAR* out_StepPath, size_t StepPathSize,\r
+       const TCHAR* FullPath, const TCHAR* BasePath );\r
+errnum_t  StrT_getParentFullPath_part( TCHAR* Str, size_t StrSize, TCHAR* StrStart,\r
+       TCHAR** out_StrLast, const TCHAR* StepPath, const TCHAR* BasePath );\r
+errnum_t  StrT_getBaseName_part( TCHAR* Str, size_t StrSize, TCHAR* StrStart,\r
+       TCHAR** out_StrLast, const TCHAR* SrcPath );\r
+errnum_t  StrT_addLastOfFileName( TCHAR* out_Path, size_t PathSize,\r
+                             const TCHAR* BasePath, const TCHAR* AddName );\r
+\r
+inline errnum_t  StrT_getFullPath( TCHAR* out_FullPath, size_t FullPathSize,\r
+       const TCHAR* StepPath, const TCHAR* BasePath )\r
+{\r
+       return  StrT_getFullPath_part( out_FullPath, FullPathSize, out_FullPath,\r
+               NULL, StepPath, BasePath );\r
+}\r
+\r
+inline errnum_t  StrT_getParentFullPath( TCHAR* Str, size_t StrSize,\r
+       const TCHAR* SrcPath, const TCHAR* BasePath )\r
+{\r
+       return StrT_getParentFullPath_part( Str, StrSize, Str, NULL, SrcPath, BasePath );\r
+}\r
+\r
+inline errnum_t  StrT_getBaseName( TCHAR* Str, size_t StrSize, const TCHAR* SrcPath )\r
+{\r
+       return  StrT_getBaseName_part( Str, StrSize, Str, NULL, SrcPath );\r
+}\r
 \r
-#if  USE_MEMSET_TO_NOT_INIT\r
-  #define  MEMSET_TO_NOT_INIT( Address, ByteSize )  memset( Address, 0xDE, ByteSize )\r
-#else\r
-  #define  MEMSET_TO_NOT_INIT( Address, ByteSize )\r
-#endif\r
 \r
  \r
-/***********************************************************************\r
-  <<< [NAME_STR] >>> \r
-************************************************************************/\r
-#ifndef  NAME_STR\r
- #if ! NDEBUG\r
-  #define  NAME_STR  1\r
- #else\r
-  #define  NAME_STR  0\r
- #endif\r
-#endif\r
+/**************************************************************************\r
+  <<< [Strs] >>> \r
+***************************************************************************/\r
+typedef  struct _Strs  Strs;\r
+struct _Strs {\r
+       char*   MemoryAddress;   /* first memory = [ TCHAR* FirstStr | elem[] ],  other memory = [ elem[] ] */\r
+       char*   MemoryOver;\r
+       char*   NextElem;        /* elem = [ TCHAR* NextStr | TCHAR[] ] */\r
+       TCHAR** PointerToNextStrInPrevElem;  /* first = &FirstStr,  other = &NextStr */\r
+       TCHAR** Prev_PointerToNextStrInPrevElem;\r
+\r
+       Strs*   FirstOfStrs;\r
+       Strs*   NextStrs;\r
+};\r
+\r
+void Strs_initConst( Strs* m );\r
+errnum_t  Strs_init( Strs* m );\r
+errnum_t  Strs_finish( Strs* m, errnum_t e );\r
+errnum_t  Strs_toEmpty( Strs* m );\r
+bool Strs_isInited( Strs* m );\r
+errnum_t  Strs_add( Strs* m, const TCHAR* Str, const TCHAR** out_pAlloc );\r
+errnum_t  Strs_addBinary( Strs* m, const TCHAR* Str, const TCHAR* StrOver, const TCHAR** out_AllocStr );\r
+errnum_t  Strs_freeLast( Strs* m, TCHAR* AllocStr );\r
+errnum_t  Strs_toEmpty( Strs* m );\r
+/* for ( Strs_forEach( Strs* m, TCHAR** in_out_Str ) ); */\r
+TCHAR*  Strx_getFirst( Strs* m );\r
+TCHAR*  Strx_getNext( Strs* m, TCHAR* Str );\r
+\r
+\r
+#define  Strs_initConst( m )  ( (m)->MemoryAddress =  NULL )\r
+#define  Strs_isInited( m )    ( (m)->MemoryAddress != NULL )\r
+\r
+#define  Strs_forEach( m, pStr ) \\r
+       *(pStr) = Strs_getFirst( m ); \\r
+       *(pStr) != NULL; \\r
+       *(pStr) = Strs_getNext( m, *(pStr) )\r
+\r
+#define  Strs_getFirst( m ) \\r
+       ( *(TCHAR**) (m)->FirstOfStrs->MemoryAddress )\r
+\r
+#define  Strs_getNext( m, p ) \\r
+       ( *( (TCHAR**)(p) - 1 ) )\r
+\r
+#define  Strs_getFreeAddr( m )  ( (TCHAR*)( (m)->NextElem + sizeof(TCHAR*) ) )\r
+#define  Strs_getFreeSize( m )  ( (m)->MemoryOver - (char*)(m)->NextElem - sizeof(TCHAR*) )\r
+#define  Strs_getFreeCount( m ) ( Strs_getFreeSize( m ) / sizeof(TCHAR) )\r
+#define  Strs_expandCount( m, c )  ( Strs_expandSize( (m), (c) * sizeof(TCHAR) ) )\r
+errnum_t  Strs_expandSize( Strs* m, size_t FreeSize );\r
+errnum_t  Strs_commit( Strs* m, TCHAR* StrOver );\r
 \r
  \r
 /***********************************************************************\r
-  <<< [UNREFERENCED_VARIABLES] >>> \r
+  <<< [StrArr] >>> \r
 ************************************************************************/\r
-#ifdef  __linux__\r
-       #define  UNREFERENCED_VARIABLE( x )\r
-       #define  UNREFERENCED_VARIABLES( x )\r
-#else\r
-       #define  UNREFERENCED_VARIABLE( x )  x = x\r
-       #define  UNREFERENCED_VARIABLES( x )  x\r
-#endif\r
+typedef struct _StrArr  StrArr;\r
+struct _StrArr {\r
+       Set2  Array;  // array of TCHAR*\r
+       Strs  Chars;\r
+};\r
+\r
+errnum_t  StrArr_init( StrArr* m );\r
+errnum_t  StrArr_finish( StrArr* m, errnum_t e );\r
+\r
+errnum_t  StrArr_add( StrArr* m, const TCHAR* Str, int* out_I );\r
+errnum_t  StrArr_commit( StrArr* m );\r
+errnum_t  StrArr_fillTo( StrArr* m, int n, const TCHAR* Str );\r
+errnum_t  StrArr_toEmpty( StrArr* m );\r
+\r
+#define  StrArr_initConst( m )   Set2_initConst( &(m)->Array )\r
+#define  StrArr_getFreeAddr( m )  Strs_getFreeAddr( &(m)->Chars )\r
+#define  StrArr_getFreeSize( m )  Strs_getFreeSize( &(m)->Chars )\r
+#define  StrArr_getFreeCount( m ) Strs_getFreeCount( &(m)->Chars )\r
+#define  StrArr_expandSize( m, sz )  Strs_expandSize( &(m)->Chars, sz )\r
+#define  StrArr_expandCount( m, c )  Strs_expandCount( &(m)->Chars, c )\r
+#define  StrArr_getArray( m )     ((TCHAR**)(m)->Array.First)\r
+//#define  StrArr_getN( m )          Set2_getCount( &(m)->Array, TCHAR* )\r
+#define  StrArr_getCount( m )        Set2_getCount( &(m)->Array, TCHAR* )\r
 \r
 \r
  \r
 /***********************************************************************\r
-  <<< [Error4_VariablesClass] >>> \r
+  <<< [StrArr_forEach] >>> \r
 ************************************************************************/\r
-typedef struct _Error4_VariablesClass  Error4_VariablesClass;\r
-struct _Error4_VariablesClass {\r
-       DWORD  WindowsLastError;\r
+#define  StrArr_forEach( self, Iterator, out_String ) \\r
+       StrArr_forEach_1( self, Iterator, out_String ); \\r
+       StrArr_forEach_2( Iterator ); \\r
+       StrArr_forEach_3( Iterator, out_String )\r
+\r
+/*[StrArrIterator]*/\r
+typedef struct _StrArrIterator  StrArrIterator;\r
+struct _StrArrIterator {\r
+       const TCHAR**  Pointer;\r
+       const TCHAR**  PointerOver;\r
 };\r
 \r
-Error4_VariablesClass*  Get_Error4_Variables(void);\r
+inline void  StrArr_forEach_1( StrArr* self, StrArrIterator* Iterator, const TCHAR** out_String )\r
+{\r
+       Iterator->Pointer = (const TCHAR**) self->Array.First;\r
+       Iterator->PointerOver = (const TCHAR**) self->Array.Next;\r
+       *out_String = *Iterator->Pointer;\r
+}\r
 \r
-#ifdef _DEBUG\r
-       extern Error4_VariablesClass*  g_Error4_Variables;\r
-#endif\r
+inline bool  StrArr_forEach_2( StrArrIterator* Iterator )\r
+{\r
+       return  Iterator->Pointer < Iterator->PointerOver;\r
+}\r
+\r
+inline void  StrArr_forEach_3( StrArrIterator* Iterator, const TCHAR** out_String )\r
+{\r
+       Iterator->Pointer += 1;\r
+       *out_String = *Iterator->Pointer;\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
+  <<< [CSV] >>> \r
+************************************************************************/\r
+errnum_t  StrT_meltCSV( TCHAR* out_Str, size_t out_Str_Size, const TCHAR** pCSV );\r
+errnum_t  StrArr_parseCSV( StrArr* m, const TCHAR* CSVLine );\r
+errnum_t  StrT_parseCSV_f( const TCHAR* StringOfCSV, bit_flags32_t* out_ReadFlags, const TCHAR* Types, ... );\r
 \r
 \r
  \r
 #if  __cplusplus\r
  }  /* End of C Symbol */ \r
 #endif\r
+\r
  \r
 /*=================================================================*/\r
 /* <<< [CRT_plus_2/CRT_plus_2.h] >>> */ \r
 /*=================================================================*/\r
  \r
 /***********************************************************************\r
-  <<< [MallocMemory] >>> \r
+  <<< [HeapMemory_allocate] >>> \r
+  <<< [HeapMemory_allocateArray] >>> \r
 ************************************************************************/\r
-inline errnum_t  MallocMemory( void* out_MemoryAddress, size_t MemorySize )\r
+\r
+#define  HeapMemory_allocate( out_Pointer ) \\r
+    HeapMemory_allocateBytes( out_Pointer, sizeof( **(out_Pointer) ) )\r
+\r
+#define  HeapMemory_allocateArray( out_Pointer, Count ) \\r
+    HeapMemory_allocateBytes( out_Pointer, sizeof( **(out_Pointer) ) * (Count) )\r
+\r
+inline errnum_t  HeapMemory_allocateBytes( void* out_Pointer, size_t MemorySize )\r
 {\r
-       void**  out = (void**) out_MemoryAddress;\r
+       void**  out = (void**) out_Pointer;\r
 \r
        *out = malloc( MemorySize );\r
 \r
@@ -500,11 +773,18 @@ inline errnum_t  MallocMemory( void* out_MemoryAddress, size_t MemorySize )
 }\r
 \r
 \r
+/*[MallocMemory]*/\r
+inline errnum_t  MallocMemory( void* out_MemoryAddress, size_t MemorySize )\r
+{\r
+       return  HeapMemory_allocateBytes( out_MemoryAddress, MemorySize );\r
+}\r
+\r
+\r
  \r
 /***********************************************************************\r
-  <<< [FreeMemory] >>> \r
+  <<< [HeapMemory_free] >>> \r
 ************************************************************************/\r
-inline errnum_t  FreeMemory( void* in_out_MemoryAddress, errnum_t e )\r
+inline errnum_t  HeapMemory_free( const void* in_out_MemoryAddress, errnum_t e )\r
 {\r
        void*  address = *(void**) in_out_MemoryAddress;\r
 \r
@@ -517,298 +797,294 @@ inline errnum_t  FreeMemory( void* in_out_MemoryAddress, errnum_t e )
 }\r
 \r
 \r
+/*[FreeMemory]*/\r
+inline errnum_t  FreeMemory( const void* in_out_MemoryAddress, errnum_t e )\r
+{\r
+       return  HeapMemory_free( in_out_MemoryAddress, e );\r
+}\r
+\r
+\r
  \r
 /*=================================================================*/\r
-/* <<< [Print/Print2.h] >>> */ \r
+/* <<< [Error4/Error4.h] >>> */ \r
 /*=================================================================*/\r
  \r
 #if  __cplusplus\r
  extern "C" {  /* Start of C Symbol */ \r
 #endif\r
\r
-errnum_t  vsprintf_r( char* s, size_t s_size, const char* format, va_list va ); \r
\r
-errnum_t  vswprintf_r( wchar_t* s, size_t s_size, const wchar_t* format, va_list va ); \r
\r
-/*[vstprintf_r]*/\r
-#if defined(_UNICODE) \r
-  #define  vstprintf_r  vswprintf_r\r
-#else\r
-  #define  vstprintf_r  vsprintf_r\r
-#endif\r
\r
-errnum_t  stprintf_r( TCHAR* s, size_t s_size, const TCHAR* format, ... ); \r
\r
-errnum_t  stcpy_part_r( TCHAR* s, size_t s_size, TCHAR* s_start, TCHAR** p_s_last, \r
-                   const TCHAR* src, const TCHAR* src_over );\r
-errnum_t  stprintf_part_r( TCHAR* s, size_t s_size, TCHAR* s_start, TCHAR** p_s_last,\r
-                      const TCHAR* format, ... );\r
\r
-#if  __cplusplus\r
- }    /* End of C Symbol */ \r
-#endif\r
 \r
\r
-/*=================================================================*/\r
-/* <<< [SetX/SetX.h] >>> */ \r
-/*=================================================================*/\r
\r
-#ifndef  __SETX_H \r
-#define  __SETX_H\r
-\r
-#ifdef  __cplusplus\r
- extern "C" {  /* Start of C Symbol */\r
-#endif\r
 \r
  \r
 /***********************************************************************\r
-  <<< [Set2] >>> \r
+  <<< [SetBreakErrorID] >>> \r
 ************************************************************************/\r
-typedef  struct _Set2  Set2;\r
-struct _Set2 {\r
-       void*  First;\r
-       void*  Next;\r
-       void*  Over;\r
-\r
-       #ifdef _DEBUG\r
-       void**   PointerOfDebugArray;  /* void<type> */\r
+#ifndef  ENABLE_ERROR_BREAK_IN_ERROR_CLASS\r
+       #if ! NDEBUG\r
+               #define  ENABLE_ERROR_BREAK_IN_ERROR_CLASS  1\r
+       #else\r
+               #define  ENABLE_ERROR_BREAK_IN_ERROR_CLASS  0\r
        #endif\r
-};\r
-\r
-#define  Set2_initConst( m )  ( (m)->First = NULL, (m)->Next = NULL )\r
-int  Set2_init( Set2* m, int FirstSize );\r
-int  Set2_finish( Set2* m, int e );\r
-#define  Set2_isInited( m )  ( (m)->First != NULL )\r
+#endif\r
 \r
-#define  Set2_alloc( m, pp, type ) \\r
-       Set2_alloc_imp( m, (void*)(pp), sizeof(type) )\r
+#ifndef  ENABLE_DEBUG_ERROR_BREAK_IN_ERROR_CLASS\r
+       #if ! NDEBUG\r
+               #define  ENABLE_DEBUG_ERROR_BREAK_IN_ERROR_CLASS  1\r
+       #else\r
+               #define  ENABLE_DEBUG_ERROR_BREAK_IN_ERROR_CLASS  0\r
+       #endif\r
+#endif\r
 \r
-int  Set2_alloc_imp( Set2* m, void* pm, size_t size );\r
+#ifndef  IS_MULTI_THREAD_ERROR_CLASS\r
\r
+       #define  IS_MULTI_THREAD_ERROR_CLASS  0  /*[IS_MULTI_THREAD_ERROR_CLASS]:single*/\r
\r
+#endif\r
 \r
-#define  Set2_freeLast( m, p, type, e ) \\r
-       ( ((char*)(m)->Next - sizeof(type) == (char*)(p)) ? \\r
-               (m)->Next = (p), (e) : \\r
-               ((e)?(e):E_OTHERS) )\r
+/*[dll_global_g_Error]*/\r
+#ifndef  dll_global_g_Error\r
+       #define  dll_global_g_Error\r
+#endif\r
 \r
-#define  Set2_toEmpty( m ) \\r
-       ( (m)->Next = (m)->First, 0 )\r
 \r
-#define  Set2_expandIfOverByAddr( m, OverAddrBasedOnNowFirst ) \\r
-       ( (void*)(OverAddrBasedOnNowFirst) <= (m)->Over ? 0 : \\r
-               Set2_expandIfOverByAddr_imp( m, OverAddrBasedOnNowFirst ) )\r
+#if ENABLE_ERROR_BREAK_IN_ERROR_CLASS\r
+       /*[IF][IF_D][ASSERT_R][ASSERT_D]*/\r
+       /* "IF" is able to break at nearest code raising error */\r
+       #define  IF_D(x)  IF(x)\r
+       #define  IF(x) \\r
+               if( (x) && ( OnRaisingError_Sub((const char*)__FILE__,__LINE__) ? (DebugBreakR(),1) : (1) ) )\r
 \r
-#define  Set2_expandIfOverByOffset( m, Size ) \\r
-       Set2_expandIfOverByAddr( m, (char*)(m)->First + (Size) )\r
-int  Set2_expandIfOverByAddr_imp( Set2* m, void* OverAddrBasedOnNowFirst );\r
+       #define  ASSERT_R( x, goto_err_or_Statement ) \\r
+               __pragma(warning(push)) \\r
+               __pragma(warning(disable:4127)) \\r
+                       do{  IF(!(x)) { goto_err_or_Statement; } }  while(0)   /* do-while is CERT standard PRE10-C */ \\r
+               __pragma(warning(pop))\r
 \r
-#define  Set2_allocMulti( m, out_pElem, ElemType, nElem ) \\r
-       Set2_allocMulti_sub( m, (void*)(out_pElem), sizeof(ElemType) * (nElem) )\r
-int  Set2_allocMulti_sub( Set2* m, void* out_pElem, size_t ElemsSize );\r
+       #define  ASSERT_D( x, goto_err_or_Statement )  ASSERT_R( x, goto_err_or_Statement )\r
+#else\r
+       #define  IF(x)  if(x)\r
+       #define  IF_D(x) \\r
+               __pragma(warning(push)) \\r
+               __pragma(warning(disable:4127)) \\r
+                       if(0) \\r
+               __pragma(warning(pop))\r
 \r
-#define  Set2_forEach( self, Item, Item_Over, Type ) \\r
-       *(Item) = (Type*)( (self)->First ),  *(Item_Over) = (Type*)( (self)->Next ); \\r
-       *(Item) < *(Item_Over); \\r
-       *(Item) += 1\r
+       #define  ASSERT_R( x, goto_err_or_Statement ) \\r
+               __pragma(warning(push)) \\r
+               __pragma(warning(disable:4127)) \\r
+                       do{  if(!(x)) { goto_err_or_Statement; } }while(0)   /* do-while is CERT standard PRE10-C */ \\r
+               __pragma(warning(pop))\r
 \r
-#define  Set2_ref( m, iElem, out_pElem, ElemType ) \\r
-       Set2_ref_imp( m, iElem, out_pElem, sizeof(ElemType) )\r
+       #define  ASSERT_D( x, goto_err_or_Statement )\r
+#endif\r
 \r
-int  Set2_ref_imp( Set2* m, int iElem, void* out_pElem, size_t ElemSize );\r
 \r
-#define  Set2_getCount( m, Type ) \\r
-       ( (Type*)(m)->Next - (Type*)(m)->First )\r
+void  DebugBreakR(void);\r
+#if ! ENABLE_ERROR_BREAK_IN_ERROR_CLASS\r
+       inline void  SetBreakErrorID( int ID ) { ID=ID; /* avoid warning */ }\r
+       inline void  ClearError() {}\r
+       inline void  IfErrThenBreak() {}\r
+       typedef  int  ErrStackAreaClass;  // dummy type\r
+       inline void  PushErr( ErrStackAreaClass* ErrStackArea )  { UNREFERENCED_VARIABLE( ErrStackArea ); }\r
+       inline void  PopErr(  ErrStackAreaClass* ErrStackArea )  { UNREFERENCED_VARIABLE( ErrStackArea ); }\r
+#else\r
+       void  SetBreakErrorID( int ID );\r
+       void  ClearError(void);\r
+       void  IfErrThenBreak(void);\r
+       typedef  struct _ErrorClass  ErrStackAreaClass;\r
+       void  PushErr( ErrStackAreaClass* ErrStackArea );\r
+       void  PopErr(  ErrStackAreaClass* ErrStackArea );\r
 \r
-#define  Set2_checkPtrInArr( m, p ) \\r
-       ( (m)->First <= (p) && (p) < (m)->Over ? 0 : E_NOT_FOUND_SYMBOL )\r
+       bool  OnRaisingError_Sub( const char* FilePath, int LineNum );\r
 \r
-int  Set2_separate( Set2* m, int NextSize, void** allocate_Array );\r
+       typedef  struct _ErrorClass  ErrorClass;  /*[ErrorClass]*/\r
+       struct _ErrorClass {\r
+               bool         IsError;\r
+               #if  ENABLE_DEBUG_ERROR_BREAK_IN_ERROR_CLASS\r
+                       int     ErrorID;\r
+               #endif\r
+               int          BreakErrorID;\r
+               const char*  FilePath;\r
+               int          LineNum;\r
 \r
-#ifdef _DEBUG\r
-void  Set2_setDebug( Set2* m, void** PointerOfDebugArray );\r
-#endif\r
+               #if IS_MULTI_THREAD_ERROR_CLASS\r
+                       FinalizerClass  Finalizer;\r
+                       #if  ENABLE_DEBUG_ERROR_BREAK_IN_ERROR_CLASS\r
+                               DWORD  ThreadID;\r
+                               int    GlobalErrorID;\r
+                       #endif\r
+               #endif\r
+       };\r
+       errnum_t  ErrorClass_finalize( ErrorClass* self, errnum_t e );\r
 \r
\r
-#ifdef  __cplusplus\r
- }  /* End of C Symbol */ \r
-#endif\r
-#endif\r
\r
-/*=================================================================*/\r
-/* <<< [StrT/StrT.h] >>> */ \r
-/*=================================================================*/\r
\r
-#if  __cplusplus\r
- extern "C" {  /* Start of C Symbol */ \r
+       #if ! IS_MULTI_THREAD_ERROR_CLASS\r
+               dll_global_g_Error extern  ErrorClass  g_Error;\r
+       #endif\r
 #endif\r
 \r
-errnum_t  StrT_cpy( TCHAR* Dst, size_t DstSize, const TCHAR* Src );\r
-errnum_t  StrT_cat( TCHAR* Dst, size_t DstSize, const TCHAR* Src );\r
-TCHAR*  StrT_chrs( const TCHAR* s, const TCHAR* keys );\r
-TCHAR*  StrT_skip( const TCHAR* s, const TCHAR* keys );\r
-\r
-inline errnum_t  StrT_cat( TCHAR* Dst, size_t DstSize, const TCHAR* Src )\r
-{\r
-       return  stcpy_part_r( Dst, DstSize, _tcschr( Dst, _T('\0') ), NULL, Src, NULL );\r
-}\r
+errnum_t  MergeError( errnum_t e, errnum_t ee );\r
+void  ErrorLog_add( errnum_t e );\r
 \r
 \r
  \r
 /***********************************************************************\r
-  <<< [StrT_Malloc] >>> \r
+  <<< [ErrorMessage] >>> \r
 ************************************************************************/\r
-errnum_t  MallocAndCopyString( TCHAR** out_NewString, const TCHAR* SourceString );\r
-errnum_t  MallocAndCopyString_char( TCHAR** out_NewString, const char* SourceString );\r
-errnum_t  MallocAndCopyStringByLength( TCHAR** out_NewString, const TCHAR* SourceString,\r
-       unsigned CountOfCharacter );\r
+void  Error4_printf( const TCHAR* format, ... );\r
+void  Error4_getErrStr( int ErrNum, TCHAR* out_ErrStr, size_t ErrStrSize );\r
+void  Error4_clear( int err_num );\r
+errnum_t  SaveWindowsLastError(void);\r
 \r
-#ifndef _UNICODE\r
-       #define  MallocAndCopyString_char  MallocAndCopyString\r
-#endif\r
 \r
  \r
 /***********************************************************************\r
-  <<< [StrT_Edit] >>> \r
+  <<< [stdio] >>> \r
 ************************************************************************/\r
-errnum_t  StrT_trim( TCHAR* out_Str, size_t out_Str_Size, const TCHAR* in_Str );\r
-errnum_t  StrT_cutLastOf( TCHAR* in_out_Str, TCHAR Charactor );\r
-errnum_t  StrT_cutLineComment( TCHAR* out_Str, size_t out_Str_Size, const TCHAR* in_Str, const TCHAR* CommentSign );\r
-errnum_t  StrT_meltCmdLine( TCHAR* out_Str, size_t out_Str_Size, const TCHAR** pLine );\r
-errnum_t  StrT_getExistSymbols( unsigned* out, bool bCase, const TCHAR* Str, const TCHAR* Symbols, ... );\r
-errnum_t  StrT_replace1( TCHAR* in_out_String, TCHAR FromCharacter, TCHAR ToCharacter,\r
-       unsigned Opt );\r
+void  Error4_showToStdErr( int err_num );\r
 \r
 \r
  \r
 /***********************************************************************\r
-  <<< [StrT_Path] >>> \r
+  <<< [errno] >>> \r
 ************************************************************************/\r
-enum { StrT_LocalPathMaxSize = 4096 };\r
-enum { MAX_LOCAL_PATH = 4096 };\r
-TCHAR*  StrT_refFName( const TCHAR* s );\r
-TCHAR*  StrT_refExt( const TCHAR* s );\r
-bool  StrT_isAbsPath( const TCHAR* s );\r
-\r
-errnum_t  StrT_getAbsPath_part( TCHAR* Str, size_t StrSize, TCHAR* StrStart,\r
-       TCHAR** out_StrLast, const TCHAR* StepPath, const TCHAR* BasePath );\r
-errnum_t  StrT_getStepPath( TCHAR* out_StepPath, size_t StepPathSize,\r
-       const TCHAR* AbsPath, const TCHAR* BasePath );\r
-errnum_t  StrT_getParentAbsPath_part( TCHAR* Str, size_t StrSize, TCHAR* StrStart,\r
-       TCHAR** out_StrLast, const TCHAR* StepPath, const TCHAR* BasePath );\r
-errnum_t  StrT_getBaseName_part( TCHAR* Str, size_t StrSize, TCHAR* StrStart,\r
-       TCHAR** out_StrLast, const TCHAR* SrcPath );\r
-errnum_t  StrT_addLastOfFileName( TCHAR* out_Path, size_t PathSize,\r
-                             const TCHAR* BasePath, const TCHAR* AddName );\r
-\r
-inline errnum_t  StrT_getAbsPath( TCHAR* out_AbsPath, size_t AbsPathSize,\r
-       const TCHAR* StepPath, const TCHAR* BasePath )\r
-{\r
-       return  StrT_getAbsPath_part( out_AbsPath, AbsPathSize, out_AbsPath, NULL, StepPath, BasePath );\r
-}\r
-\r
-inline errnum_t  StrT_getParentAbsPath( TCHAR* Str, size_t StrSize,\r
-       const TCHAR* SrcPath, const TCHAR* BasePath )\r
-{\r
-       return StrT_getParentAbsPath_part( Str, StrSize, Str, NULL, SrcPath, BasePath );\r
-}\r
+int  Error4_raiseErrno(void);\r
 \r
-inline errnum_t  StrT_getBaseName( TCHAR* Str, size_t StrSize, const TCHAR* SrcPath )\r
-{\r
-       return  StrT_getBaseName_part( Str, StrSize, Str, NULL, SrcPath );\r
-}\r
\r
+/***********************************************************************\r
+  <<< [DEBUG_TRUE, DEBUG_FALSE] >>> \r
+************************************************************************/\r
+#if ! NDEBUG\r
+ #define  DEBUG_TRUE   1\r
+ #define  DEBUG_FALSE  0\r
+#else\r
+ #define  DEBUG_TRUE   __cut_on_debug =\r
+ #define  DEBUG_FALSE  0\r
+#endif\r
 \r
 \r
  \r
-/**************************************************************************\r
-  <<< [Strs] >>> \r
-***************************************************************************/\r
-typedef  struct _Strs  Strs;\r
-struct _Strs {\r
-       char*   MemoryAddress;   /* first memory = [ TCHAR* FirstStr | elem[] ],  other memory = [ elem[] ] */\r
-       char*   MemoryOver;\r
-       char*   NextElem;        /* elem = [ TCHAR* NextStr | TCHAR[] ] */\r
-       TCHAR** PointerToNextStrInPrevElem;  /* first = &FirstStr,  other = &NextStr */\r
-       TCHAR** Prev_PointerToNextStrInPrevElem;\r
+/***********************************************************************\r
+  <<< [DEBUG_CODE] >>> \r
+************************************************************************/\r
+#if ! NDEBUG\r
+       #define  DEBUG_CODE( expression ) \\r
+               __pragma(warning(push)) \\r
+               __pragma(warning(disable:4127)) \\r
+                       do { expression; } while(0)   /* do-while is CERT standard PRE10-C */ \\r
+               __pragma(warning(pop))\r
+#else\r
+       #define  DEBUG_CODE( expression )  /* no execute */\r
+#endif\r
 \r
-       Strs*   FirstOfStrs;\r
-       Strs*   NextStrs;\r
-};\r
 \r
-void Strs_initConst( Strs* m );\r
-errnum_t  Strs_init( Strs* m );\r
-errnum_t  Strs_finish( Strs* m, errnum_t e );\r
-errnum_t  Strs_toEmpty( Strs* m );\r
-bool Strs_isInited( Strs* m );\r
-errnum_t  Strs_add( Strs* m, const TCHAR* Str, const TCHAR** out_pAlloc );\r
-errnum_t  Strs_addBinary( Strs* m, const TCHAR* Str, const TCHAR* StrOver, const TCHAR** out_AllocStr );\r
-errnum_t  Strs_freeLast( Strs* m, TCHAR* AllocStr );\r
-errnum_t  Strs_toEmpty( Strs* m );\r
-/* for ( Strs_forEach( Strs* m, TCHAR** in_out_Str ) ); */\r
-TCHAR*  Strx_getFirst( Strs* m );\r
-TCHAR*  Strx_getNext( Strs* m, TCHAR* Str );\r
\r
+/***********************************************************************\r
+  <<< [CHECK_ARG] >>> \r
+************************************************************************/\r
+#ifndef  CHECK_ARG\r
+  #define  CHECK_ARG  1\r
+#endif\r
 \r
+/*[GetIsCheckArg][SetIsCheckArg]*/\r
+#if CHECK_ARG\r
+extern bool  g_IsCheckArg;\r
+inline bool  GetIsCheckArg(void)  { return  g_IsCheckArg; }\r
+inline void  SetIsCheckArg( bool IsCheckArg )  { g_IsCheckArg = IsCheckArg; }\r
+#endif\r
 \r
-#define  Strs_initConst( m )  ( (m)->MemoryAddress =  NULL )\r
-#define  Strs_isInited( m )    ( (m)->MemoryAddress != NULL )\r
 \r
-#define  Strs_forEach( m, pStr ) \\r
-       *(pStr) = Strs_getFirst( m ); \\r
-       *(pStr) != NULL; \\r
-       *(pStr) = Strs_getNext( m, *(pStr) )\r
\r
+/***********************************************************************\r
+  <<< [INVALID_VALUE] >>> \r
+************************************************************************/\r
+enum { INVALID_VALUE = 0xDEDEDEDE };\r
 \r
-#define  Strs_getFirst( m ) \\r
-       ( *(TCHAR**) (m)->FirstOfStrs->MemoryAddress )\r
 \r
-#define  Strs_getNext( m, p ) \\r
-       ( *( (TCHAR**)(p) - 1 ) )\r
\r
+/***********************************************************************\r
+  <<< [DUMMY_INITIAL_VALUE] >>> \r
+************************************************************************/\r
+#ifndef NDEBUG\r
+       enum { DUMMY_INITIAL_VALUE = 0xDEDEDEDE };\r
+       enum { DUMMY_INITIAL_VALUE_8BIT  = 0xDE };\r
+       enum { DUMMY_INITIAL_VALUE_16BIT = 0xDEDE };\r
+       #ifdef _UNICODE\r
+               enum { DUMMY_INITIAL_VALUE_TCHAR = 0xDEDE };\r
+       #else\r
+               enum { DUMMY_INITIAL_VALUE_TCHAR = 0xDE - 0x100 };  /* 0x100 is to change to signed type */\r
+       #endif\r
+       /* Disable VC++ warning C4701 : local variable may be used without having been initialized */\r
+       /* 0xDEDEDEDE means "not initialized" */\r
+#else\r
+       enum { DUMMY_INITIAL_VALUE = 0 };\r
+       enum { DUMMY_INITIAL_VALUE_8BIT  = 0 };\r
+       enum { DUMMY_INITIAL_VALUE_16BIT = 0 };\r
+       enum { DUMMY_INITIAL_VALUE_TCHAR = 0 };\r
+       /* 0 reduces code size */\r
+#endif\r
 \r
-#define  Strs_getFreeAddr( m )  ( (TCHAR*)( (m)->NextElem + sizeof(TCHAR*) ) )\r
-#define  Strs_getFreeSize( m )  ( (m)->MemoryOver - (char*)(m)->NextElem - sizeof(TCHAR*) )\r
-#define  Strs_getFreeCount( m ) ( Strs_getFreeSize( m ) / sizeof(TCHAR) )\r
-#define  Strs_expandCount( m, c )  ( Strs_expandSize( (m), (c) * sizeof(TCHAR) ) )\r
-errnum_t  Strs_expandSize( Strs* m, size_t FreeSize );\r
-errnum_t  Strs_commit( Strs* m, TCHAR* StrOver );\r
 \r
  \r
 /***********************************************************************\r
-  <<< [StrArr] >>> \r
+  <<< [DISCARD_STRUCT] >>> \r
+  <<< [DISCARD_ARRAY] >>> \r
+  <<< [DISCARD_BYTES] >>> \r
+  <<< [MEMSET_TO_NOT_INIT] >>> \r
 ************************************************************************/\r
-typedef struct _StrArr  StrArr;\r
-struct _StrArr {\r
-       Set2  Array;  // array of TCHAR*\r
-       Strs  Chars;\r
-};\r
-\r
-errnum_t  StrArr_init( StrArr* m );\r
-errnum_t  StrArr_finish( StrArr* m, errnum_t e );\r
+#ifndef  ENABLE_DISCARD_STRUCT\r
+ #if ! NDEBUG\r
+  #define  ENABLE_DISCARD_STRUCT  1\r
+ #else\r
+  #define  ENABLE_DISCARD_STRUCT  0\r
+ #endif\r
+#endif\r
 \r
-errnum_t  StrArr_add( StrArr* m, const TCHAR* Str, int* out_I );\r
-errnum_t  StrArr_commit( StrArr* m );\r
-errnum_t  StrArr_fillTo( StrArr* m, int n, const TCHAR* Str );\r
-errnum_t  StrArr_toEmpty( StrArr* m );\r
+#if  USE_MEMSET_TO_NOT_INIT\r
+       #define  DISCARD_STRUCT( TypedAddress ) \\r
+               memset( TypedAddress, 0xDE, sizeof(*(TypedAddress)) )\r
+       #define  DISCARD_ARRAY( TypedAddress, Count ) \\r
+               memset( TypedAddress, 0xDE, sizeof(*(TypedAddress)) * (Count) )\r
+       #define  DISCARD_BYTES( Address, ByteSize )  memset( Address, 0xDE, ByteSize )\r
+//     #define  MEMSET_TO_NOT_INIT( Address, ByteSize )  memset( Address, 0xDE, ByteSize )\r
+#else\r
+       #define  DISCARD_STRUCT( Address )                __noop()\r
+       #define  DISCARD_ARRAY( Address, Count )          __noop()\r
+       #define  DISCARD_BYTES( Address, ByteSize )       __noop()\r
+//     #define  MEMSET_TO_NOT_INIT( Address, ByteSize )  __noop()\r
+#endif\r
 \r
-#define  StrArr_initConst( m )   Set2_initConst( &(m)->Array )\r
-#define  StrArr_getFreeAddr( m )  Strs_getFreeAddr( &(m)->Chars )\r
-#define  StrArr_getFreeSize( m )  Strs_getFreeSize( &(m)->Chars )\r
-#define  StrArr_getFreeCount( m ) Strs_getFreeCount( &(m)->Chars )\r
-#define  StrArr_expandSize( m, sz )  Strs_expandSize( &(m)->Chars, sz )\r
-#define  StrArr_expandCount( m, c )  Strs_expandCount( &(m)->Chars, c )\r
-#define  StrArr_getArray( m )     ((TCHAR**)(m)->Array.First)\r
-#define  StrArr_getN( m )         Set2_getCount( &(m)->Array, TCHAR* )\r
 \r
\r
+/***********************************************************************\r
+  <<< [NAME_STR] >>> \r
+************************************************************************/\r
+#ifndef  NAME_STR\r
+ #if ! NDEBUG\r
+  #define  NAME_STR  1\r
+ #else\r
+  #define  NAME_STR  0\r
+ #endif\r
+#endif\r
 \r
  \r
 /***********************************************************************\r
-  <<< [CSV] >>> \r
+  <<< [Error4_VariablesClass] >>> \r
 ************************************************************************/\r
-errnum_t  StrT_meltCSV( TCHAR* out_Str, size_t out_Str_Size, const TCHAR** pCSV );\r
-errnum_t  StrArr_parseCSV( StrArr* m, const TCHAR* CSVLine );\r
+typedef struct _Error4_VariablesClass  Error4_VariablesClass;\r
+struct _Error4_VariablesClass {\r
+       DWORD  WindowsLastError;\r
+};\r
+\r
+Error4_VariablesClass*  Get_Error4_Variables(void);\r
+\r
+#ifdef _DEBUG\r
+       extern Error4_VariablesClass*  g_Error4_Variables;\r
+#endif\r
 \r
 \r
  \r
 #if  __cplusplus\r
  }  /* End of C Symbol */ \r
 #endif\r
-\r
  \r
 /*=================================================================*/\r
 /* <<< [FileT/FileT.h] >>> */ \r
@@ -831,7 +1107,7 @@ int   FileT_isSameBinaryFile( const TCHAR* PathA, const TCHAR* PathB, int Flags,
 /* FileT_CallByNestFindData */ \r
 typedef struct {\r
        void*     CallerArgument;\r
-       TCHAR*    AbsPath;  // abstruct path\r
+       TCHAR*    FullPath;  // abstruct path\r
        TCHAR*    StepPath;\r
        TCHAR*    FileName;\r
        DWORD     FileAttributes;\r
@@ -848,7 +1124,8 @@ enum { FileT_Folder = FILE_ATTRIBUTE_DIRECTORY };
   <<< [FileT_Read] >>> \r
 ************************************************************************/\r
 int  FileT_openForRead( FILE** out_pFile, const TCHAR* path );\r
-int  FileT_close( FILE* File, int e );\r
+// int  FileT_close( FILE* File, int e );\r
+errnum_t  FileT_closeAndNULL( FILE** in_out_File, errnum_t e );\r
 \r
 \r
  \r
@@ -872,6 +1149,8 @@ int  FileT_close( FILE* File, int e );
 extern char*  g_LocaleSymbol;\r
 int  Locale_init(void);\r
 int  Locale_isInited(void);\r
+\r
+\r
  \r
 #if  __cplusplus\r
  }  /* End of C Symbol */ \r
@@ -890,7 +1169,7 @@ int  GetCommandLineNamedI( const TCHAR* Name, bool bCase, int* out_Value );
 bool GetCommandLineExist( const TCHAR* Name, bool bCase );\r
 \r
 #if ! _UNICODE\r
-  #define  GetCommandLineNamedC8  GetCommandLineNamed\r
+       #define  GetCommandLineNamedC8  GetCommandLineNamed\r
 #endif\r
 \r
  \r
@@ -910,13 +1189,13 @@ bool GetCommandLineExist( const TCHAR* Name, bool bCase );
 #define  USE_GLOBALS  1\r
 \r
 void Globals_initConst(void);\r
-int  Globals_init(void);\r
-int  Globals_finish( int e );\r
+int  Globals_initialize(void);\r
+int  Globals_finalize( int e );\r
 \r
 #if NDEBUG\r
   #define  get_InitedObject( m, isInited )  (m)\r
 #else\r
-  #define  get_InitedObject( m, isInited )  ( isInited( m ) ? (m) : (DebugBreak(), (m)) )\r
+  #define  get_InitedObject( m, isInited )  ( isInited( m ) ? (m) : (DebugBreakR(), (m)) )\r
 #endif\r
 \r
 \r