\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
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
\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
\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
\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
\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
}\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
}\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
/* 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
<<< [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
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
bool GetCommandLineExist( const TCHAR* Name, bool bCase );\r
\r
#if ! _UNICODE\r
- #define GetCommandLineNamedC8 GetCommandLineNamed\r
+ #define GetCommandLineNamedC8 GetCommandLineNamed\r
#endif\r
\r
\r
#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