OSDN Git Service

Version 5.91
[vbslib/main.git] / _src / Test / tools / feq / _setup_generated / clib.c
index a539ed1..2f8accc 100644 (file)
@@ -1,3 +1,4 @@
+/* Character Code Encoding: "WHITE SQUARE" is \81  */\r
 /* The source file was composed by module mixer */ \r
 \r
 #include  "include_c.h"\r
@@ -486,9 +487,9 @@ err:  e = E_OTHERS;  goto fin;
 /***********************************************************************\r
   <<< [FileT_isSameBinaryFile] >>> \r
 ************************************************************************/\r
-int  FileT_isSameBinaryFile( const TCHAR* PathA, const TCHAR* PathB, int Flags, bool* out_IsSame )\r
+errnum_t  FileT_isSameBinaryFile( const TCHAR* PathA, const TCHAR* PathB, int Flags, bool* out_IsSame )\r
 {\r
-       int       e;\r
+       errnum_t  e;\r
        HANDLE    file_a = INVALID_HANDLE_VALUE;\r
        HANDLE    file_b = INVALID_HANDLE_VALUE;\r
        HANDLE    mem_a  = INVALID_HANDLE_VALUE;\r
@@ -505,11 +506,11 @@ int  FileT_isSameBinaryFile( const TCHAR* PathA, const TCHAR* PathB, int Flags,
 \r
        // file_a,  file_b : open PathA,  PathB\r
        file_a = CreateFile( PathA, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,\r
-                                                                                        FILE_ATTRIBUTE_NORMAL, 0 );\r
+               FILE_ATTRIBUTE_NORMAL, 0 );\r
        IF( file_a == INVALID_HANDLE_VALUE ) goto err_gt;\r
 \r
        file_b = CreateFile( PathB, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,\r
-                                                                                        FILE_ATTRIBUTE_NORMAL, 0 );\r
+               FILE_ATTRIBUTE_NORMAL, 0 );\r
        IF( file_b == INVALID_HANDLE_VALUE ) goto err_gt;\r
 \r
        // size_a,  size_b : size of file_a, file_b\r
@@ -582,7 +583,7 @@ int  FileT_callByNestFind( const TCHAR* Path, BitField Flags, void* Argument, Fu
 \r
 \r
                /* FullPathMem \82Ì\8dÅ\8cã\82É \ \82ª\96³\82¢\82È\82ç\92Ç\89Á\82·\82é */\r
-               p = _tcschr( data.FullPathMem, _T('\0') );\r
+               p = StrT_chr( data.FullPathMem, _T('\0') );\r
                p--;\r
                if ( *p != _T('\\') ) {\r
                        p++;\r
@@ -676,7 +677,7 @@ int  FileT_callByNestFind_sub( FileT_CallByNestFindDataIn* m )
                if ( data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) {\r
                        TCHAR*  prev_fname = m->FileName;\r
 \r
-                       p = _tcschr( m->FileName, _T('\0') );\r
+                       p = StrT_chr( m->FileName, _T('\0') );\r
 \r
                        IF( p >= m->FullPathMem + (sizeof(m->FullPathMem) / sizeof(TCHAR)) - 2 )goto err_fa;\r
                        *p = _T('\\');  *(p+1) = _T('\0');\r
@@ -797,6 +798,74 @@ errnum_t  FileT_closeAndNULL( FILE** in_out_File, errnum_t e )
 \r
 \r
  \r
+/***********************************************************************\r
+* Class: ViewOfFileClass\r
+************************************************************************/\r
+\r
+/***********************************************************************\r
+* Function: ViewOfFileClass_initConst\r
+************************************************************************/\r
+void  ViewOfFileClass_initConst( ViewOfFileClass* self )\r
+{\r
+       self->Data   = NULL;\r
+       self->File   = INVALID_HANDLE_VALUE;\r
+       self->Memory = INVALID_HANDLE_VALUE;\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
+* Function: ViewOfFileClass_initializeFromBinaryFile\r
+************************************************************************/\r
+errnum_t  ViewOfFileClass_initializeFromBinaryFile( ViewOfFileClass* self,\r
+       const TCHAR* Path )\r
+{\r
+       errnum_t  e;\r
+\r
+\r
+       self->File = CreateFile( Path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,\r
+               FILE_ATTRIBUTE_NORMAL, 0 );\r
+       IF( self->File == INVALID_HANDLE_VALUE ) { e=E_GET_LAST_ERROR; goto fin; }\r
+\r
+       self->Size = GetFileSize( self->File, NULL );\r
+\r
+       self->Memory = CreateFileMapping( self->File, NULL, PAGE_READONLY, 0, self->Size, NULL );\r
+               IF( self->Memory == INVALID_HANDLE_VALUE ) { e=E_GET_LAST_ERROR; goto fin; }\r
+\r
+       self->Data = MapViewOfFile( self->Memory, FILE_MAP_READ, 0, 0, 0 );\r
+               IF ( self->Data == NULL ) { e=E_GET_LAST_ERROR; goto fin; }\r
+\r
+\r
+       e=0;\r
+fin:\r
+       if ( e != 0 ) {\r
+               e= ViewOfFileClass_finalize( self, e );\r
+       }\r
+       return  e;\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
+* Function: ViewOfFileClass_finalize\r
+************************************************************************/\r
+errnum_t  ViewOfFileClass_finalize( ViewOfFileClass* self,  errnum_t e )\r
+{\r
+       BOOL  b;\r
+\r
+       if ( self->Data != NULL )                 { b= UnmapViewOfFile( self->Data ); IF(!b&&!e) e=SaveWindowsLastError(); }\r
+       if ( self->Memory != INVALID_HANDLE_VALUE ) { b= CloseHandle( self->Memory ); IF(!b&&!e) e=SaveWindowsLastError(); }\r
+       if ( self->File   != INVALID_HANDLE_VALUE ) { b= CloseHandle( self->File );   IF(!b&&!e) e=SaveWindowsLastError(); }\r
+       self->Data   = NULL;\r
+       self->File   = INVALID_HANDLE_VALUE;\r
+       self->Memory = INVALID_HANDLE_VALUE;\r
+\r
+       return  e;\r
+}\r
+\r
+\r
+/* Section: Global */\r
\r
 /*=================================================================*/\r
 /* <<< [Error4/Error4.c] >>> */ \r
 /*=================================================================*/\r
@@ -1214,7 +1283,7 @@ void  Error4_getErrStr( int ErrNum, TCHAR* out_ErrStr, size_t ErrStrSize )
                        FormatMessage( FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM,\r
                                NULL, err_win, LANG_USER_DEFAULT,\r
                                str_pointer,  (TCHAR*)( (char*)out_ErrStr + ErrStrSize ) - str_pointer, NULL );\r
-                       str_pointer = _tcschr( str_pointer, _T('\0') );\r
+                       str_pointer = StrT_chr( str_pointer, _T('\0') );\r
                        if ( *( str_pointer - 2 ) == _T('\r') && *( str_pointer - 1 ) == _T('\n') )\r
                                str_pointer -= 2;\r
                        stcpy_part_r( out_ErrStr, ErrStrSize, str_pointer, NULL, _T("\"/>"), NULL );\r
@@ -1249,6 +1318,16 @@ errnum_t  SaveWindowsLastError()
 ************************************************************************/\r
 void  Error4_showToStdErr( int err_num )\r
 {\r
+       Error4_showToStdIO( stderr, err_num );\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
+  <<< [Error4_showToStdIO] >>> \r
+************************************************************************/\r
+void  Error4_showToStdIO( FILE* out, int err_num )\r
+{\r
        TCHAR  msg[1024];\r
        #if _UNICODE\r
                char  msg2[1024];\r
@@ -1259,13 +1338,13 @@ void  Error4_showToStdErr( int err_num )
                #if _UNICODE\r
                        setlocale( LC_ALL, ".OCP" );\r
                        sprintf_s( msg2, sizeof(msg2), "%S", msg );\r
-                       fprintf( stderr, "%s\n", msg2 );  // _ftprintf_s \82Å\82Í\93ú\96{\8cê\82ª\8fo\82Ü\82¹\82ñ\r
+                       fprintf( out, "%s\n", msg2 );  // _ftprintf_s \82Å\82Í\93ú\96{\8cê\82ª\8fo\82Ü\82¹\82ñ\r
                #else\r
-                       fprintf( stderr, "%s\n", msg );\r
+                       fprintf( out, "%s\n", msg );\r
                #endif\r
 \r
                #if ERR2_ENABLE_ERROR_BREAK\r
-                       fprintf( stderr, "\81i\8aJ\94­\8eÒ\82Ö\81j\83\81\83C\83\93\8aÖ\90\94\82Å SetBreakErrorID( %d ); \82ð\8cÄ\82Ñ\8fo\82µ\82Ä\82­\82¾\82³\82¢\81B\n",\r
+                       fprintf( out, "\81i\8aJ\94­\8eÒ\82Ö\81j\83\81\83C\83\93\8aÖ\90\94\82Å SetBreakErrorID( %d ); \82ð\8cÄ\82Ñ\8fo\82µ\82Ä\82­\82¾\82³\82¢\81B\n",\r
                                g_Err2.ErrID );\r
                #else\r
 #if 0\r
@@ -1273,7 +1352,7 @@ void  Error4_showToStdErr( int err_num )
                                /* Not show the message for developper */\r
                        }\r
                        else {\r
-                               fprintf( stderr, "\81i\8aJ\94­\8eÒ\82Ö\81jERR2_ENABLE_ERROR_BREAK \82ð\92è\8b`\82µ\82Ä\8dÄ\83R\83\93\83p\83C\83\8b\82µ\82Ä\82­\82¾\82³\82¢\81B\n" );\r
+                               fprintf( out, "\81i\8aJ\94­\8eÒ\82Ö\81jERR2_ENABLE_ERROR_BREAK \82ð\92è\8b`\82µ\82Ä\8dÄ\83R\83\93\83p\83C\83\8b\82µ\82Ä\82­\82¾\82³\82¢\81B\n" );\r
                        }\r
 #endif\r
                #endif\r
@@ -1330,6 +1409,35 @@ errnum_t  StrT_cpy( TCHAR* Dst, size_t DstSize, const TCHAR* Src )
 \r
  \r
 /***********************************************************************\r
+  <<< [StrT_chr] >>> \r
+************************************************************************/\r
+TCHAR*  StrT_chr( const TCHAR* String, TCHAR Key )\r
+{\r
+       const TCHAR*  return_value = _tcschr( String, Key );\r
+\r
+       if ( return_value == NULL  &&  Key == _T('\0') ) {\r
+               return_value = String + _tcslen( String );\r
+       }\r
+\r
+       return  (TCHAR*) return_value;\r
+}\r
+\r
\r
+/***********************************************************************\r
+  <<< [StrT_chrNext] >>> \r
+************************************************************************/\r
+TCHAR*  StrT_chrNext( const TCHAR* in_Start, TCHAR in_KeyCharactor )\r
+{\r
+       const TCHAR*  p = _tcschr( in_Start, in_KeyCharactor );\r
+\r
+       if ( p != NULL )\r
+               { p += 1; }\r
+\r
+       return  (TCHAR*) p;\r
+}\r
+\r
\r
+/***********************************************************************\r
   <<< [MallocAndCopyString] >>> \r
 ************************************************************************/\r
 errnum_t  MallocAndCopyString( const TCHAR** out_NewString, const TCHAR* SourceString )\r
@@ -1385,6 +1493,7 @@ errnum_t  MallocAndCopyStringByLength( const TCHAR** out_NewString, const TCHAR*
        size_t  size = ( CountOfCharacter + 1 ) * sizeof(TCHAR);\r
 \r
        ASSERT_D( *out_NewString == NULL, __noop() );\r
+       ASSERT_D( CountOfCharacter < 0x7FFFFFFF, __noop() );\r
 \r
        str = (TCHAR*) malloc( size );\r
        if ( str == NULL ) { return  E_FEW_MEMORY; }\r
@@ -1500,19 +1609,38 @@ bool  StrT_isCIdentifier( TCHAR Character )
 TCHAR*  StrT_searchOverOfCIdentifier( const TCHAR* Text )\r
 {\r
        const TCHAR*  p;\r
-       TCHAR         c;\r
+\r
+       for ( p = Text;\r
+               StrT_isCIdentifier( *p );\r
+               p += 1 )\r
+       {\r
+       }\r
+       return  (TCHAR*) p;\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
+  <<< [StrT_searchOverOfIdiom] >>> \r
+************************************************************************/\r
+TCHAR*  StrT_searchOverOfIdiom( const TCHAR* Text )\r
+{\r
+       const TCHAR*  p;\r
 \r
        p = Text;\r
-       c = *p;\r
-       for (;;) {\r
-               if ( StrT_isCIdentifier( c ) ) {\r
-                       p += 1;\r
-                       c = *p;\r
-               }\r
-               else {\r
-                       return  (TCHAR*) p;\r
-               }\r
+       for ( p = Text;\r
+               StrT_isCIdentifier( *p )  ||  *p == _T(' ');\r
+               p += 1 )\r
+       {\r
+       }\r
+\r
+       for ( p -= 1;\r
+               *p == _T(' ')  &&  p >= Text;\r
+               p -= 1 )\r
+       {\r
        }\r
+\r
+       return  (TCHAR*) p + 1;\r
 }\r
 \r
 \r
@@ -1520,19 +1648,19 @@ TCHAR*  StrT_searchOverOfCIdentifier( const TCHAR* Text )
 /***********************************************************************\r
   <<< [StrT_cmp_part] >>> \r
 ************************************************************************/\r
-int  StrT_cmp_part( const TCHAR* StringA_Start, const TCHAR* StringA_Over,\r
-       const TCHAR* StringB )\r
+int  StrT_cmp_part( const TCHAR* in_StringA_Start, const TCHAR* in_StringA_Over,\r
+       const TCHAR* in_StringB )\r
 {\r
        const TCHAR*  a;\r
        const TCHAR*  b;\r
        TCHAR  aa;\r
        TCHAR  bb;\r
 \r
-       a = StringA_Start;\r
-       b = StringB;\r
+       a = in_StringA_Start;\r
+       b = in_StringB;\r
 \r
        for (;;) {\r
-               if ( a >= StringA_Over ) {\r
+               if ( a >= in_StringA_Over ) {\r
                        bb = *b;\r
                        if ( bb == _T('\0') )\r
                                { return  0; }\r
@@ -1557,19 +1685,60 @@ int  StrT_cmp_part( const TCHAR* StringA_Start, const TCHAR* StringA_Over,
 \r
  \r
 /***********************************************************************\r
+  <<< [StrT_cmp_i_part] >>> \r
+************************************************************************/\r
+int  StrT_cmp_i_part( const TCHAR* in_StringA_Start, const TCHAR* in_StringA_Over,\r
+       const TCHAR* in_StringB )\r
+{\r
+       const TCHAR*  a;\r
+       const TCHAR*  b;\r
+       TCHAR  aa;\r
+       TCHAR  bb;\r
+\r
+       a = in_StringA_Start;\r
+       b = in_StringB;\r
+\r
+       for (;;) {\r
+               if ( a >= in_StringA_Over ) {\r
+                       bb = *b;\r
+                       if ( bb == _T('\0') )\r
+                               { return  0; }\r
+                       else\r
+                               { return  -bb; }\r
+               }\r
+\r
+               aa = *a;\r
+               bb = *b;\r
+\r
+               if ( bb == _T('\0') )\r
+                       { return  aa; }\r
+\r
+               if ( aa != bb ) {\r
+                       if ( _totlower( aa ) != _totlower( bb ) )\r
+                               { return  aa - bb; }\r
+               }\r
+\r
+               a += 1;\r
+               b += 1;\r
+       }\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
   <<< [StrT_cmp_part2] >>> \r
 ************************************************************************/\r
-int  StrT_cmp_part2( const TCHAR* StringA_Start, const TCHAR* StringA_Over,\r
-       const TCHAR* StringB_Start, const TCHAR* StringB_Over )\r
+int  StrT_cmp_part2( const TCHAR* in_StringA_Start, const TCHAR* in_StringA_Over,\r
+       const TCHAR* in_StringB_Start, const TCHAR* in_StringB_Over )\r
 {\r
-       int  length_A = StringA_Over - StringA_Start;\r
-       int  length_B = StringB_Over - StringB_Start;\r
+       int  length_A = in_StringA_Over - in_StringA_Start;\r
+       int  length_B = in_StringB_Over - in_StringB_Start;\r
 \r
        if ( length_A != length_B ) {\r
                return  length_A - length_B;\r
        }\r
        else {\r
-               return  _tcsncmp( StringA_Start, StringB_Start, length_A );\r
+               return  _tcsncmp( in_StringA_Start, in_StringB_Start, length_A );\r
        }\r
 }\r
 \r
@@ -1583,7 +1752,7 @@ TCHAR*  StrT_refFName( const TCHAR* s )
        const TCHAR*  p;\r
        TCHAR  c;\r
 \r
-       p = _tcschr( s, _T('\0') );\r
+       p = StrT_chr( s, _T('\0') );\r
 \r
        if ( p == s )  return  (TCHAR*) s;\r
 \r
@@ -1603,17 +1772,33 @@ TCHAR*  StrT_refExt( const TCHAR* s )
 {\r
        const TCHAR*  p;\r
 \r
-       p = _tcschr( s, _T('\0') );\r
+       p = StrT_chr( s, _T('\0') );\r
 \r
-       if ( p == s )  return  (TCHAR*) s;\r
+       if ( p == s )  { return  (TCHAR*) s; }\r
 \r
        for ( p--; p>s; p-- ) {\r
                if ( *p == _T('.') )  return  (TCHAR*) p+1;\r
-               if ( *p == _T('/') || *p == _T('\\') )  return  (TCHAR*) _tcschr( p, _T('\0') );\r
+               if ( *p == _T('/') || *p == _T('\\') )\r
+                       { return  (TCHAR*) StrT_chr( p, _T('\0') ); }\r
        }\r
        if ( *p == _T('.') )  return  (TCHAR*) p+1;\r
 \r
-       return  (TCHAR*) _tcschr( s, _T('\0') );\r
+       return  (TCHAR*) StrT_chr( s, _T('\0') );\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
+* Function: StrT_cutFragmentInPath\r
+************************************************************************/\r
+void  StrT_cutFragmentInPath( TCHAR* in_out_Path )\r
+{\r
+       TCHAR*  p;\r
+\r
+       p = _tcschr( in_out_Path, _T('#') );\r
+       if ( p != NULL ) {\r
+               *p = _T('\0');\r
+       }\r
 }\r
 \r
 \r
@@ -1653,7 +1838,7 @@ errnum_t  StrT_trim( TCHAR* out_Str, size_t out_Str_Size, const TCHAR* in_Str )
        TCHAR   c;\r
 \r
        p1 = in_Str;  while ( *p1 == _T(' ') || *p1 == _T('\t') )  p1++;\r
-       for ( p2 = _tcschr( p1, _T('\0') ) - 1;  p2 >= p1;  p2-- ) {\r
+       for ( p2 = StrT_chr( p1, _T('\0') ) - 1;  p2 >= p1;  p2-- ) {\r
                c = *p2;\r
                if ( c != _T(' ') && c != _T('\t') && c != _T('\n') && c != _T('\r') )\r
                        break;\r
@@ -1664,11 +1849,43 @@ errnum_t  StrT_trim( TCHAR* out_Str, size_t out_Str_Size, const TCHAR* in_Str )
 \r
  \r
 /***********************************************************************\r
+  <<< [StrT_cutPart] >>> \r
+************************************************************************/\r
+errnum_t  StrT_cutPart( TCHAR*  in_out_String,  TCHAR*  in_StartOfCut,  TCHAR*  in_OverOfCut )\r
+{\r
+       errnum_t  e;\r
+       TCHAR*    over_of_cut = StrT_chr( in_StartOfCut, _T('\0') );\r
+\r
+#ifndef  NDEBUG\r
+       TCHAR*    over_of_string = StrT_chr( in_out_String, _T('\0') );\r
+\r
+       ASSERT_D( over_of_cut == over_of_string,   e=E_OTHERS; goto fin );\r
+       ASSERT_D( in_StartOfCut >= in_out_String,   e=E_OTHERS; goto fin );\r
+       ASSERT_D( in_StartOfCut <= over_of_string,  e=E_OTHERS; goto fin );\r
+       ASSERT_D( in_OverOfCut  >= in_out_String,   e=E_OTHERS; goto fin );\r
+       ASSERT_D( in_OverOfCut  <= over_of_string,  e=E_OTHERS; goto fin );\r
+       ASSERT_D( in_StartOfCut <= in_OverOfCut,    e=E_OTHERS; goto fin );\r
+#endif\r
+       UNREFERENCED_VARIABLE( in_out_String );\r
+\r
+       memmove( in_StartOfCut,  in_OverOfCut,\r
+               PointerType_diff( over_of_cut + 1,  in_OverOfCut ) );\r
+\r
+       e=0;\r
+#ifndef  NDEBUG\r
+fin:\r
+#endif\r
+       return  e;\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
   <<< [StrT_cutLastOf] >>> \r
 ************************************************************************/\r
 errnum_t  StrT_cutLastOf( TCHAR* in_out_Str, TCHAR Charactor )\r
 {\r
-       TCHAR*  last = _tcschr( in_out_Str, _T('\0') );\r
+       TCHAR*  last = StrT_chr( in_out_Str, _T('\0') );\r
 \r
        if ( last > in_out_Str ) {\r
                if ( *( last - 1 ) == Charactor )\r
@@ -1691,7 +1908,7 @@ errnum_t  StrT_cutLineComment( TCHAR* out_Str, size_t out_Str_Size, const TCHAR*
        p1 = in_Str;  while ( *p1 == _T(' ') || *p1 == _T('\t') )  p1++;\r
 \r
        p2 = _tcsstr( p1, CommentSign );\r
-       if ( p2 == NULL )  p2 = _tcschr( p1, _T('\0') );\r
+       if ( p2 == NULL )  p2 = StrT_chr( p1, _T('\0') );\r
 \r
        for ( p2 = p2 - 1;  p2 >= p1;  p2-- ) {\r
                c = *p2;\r
@@ -1703,6 +1920,207 @@ errnum_t  StrT_cutLineComment( TCHAR* out_Str, size_t out_Str_Size, const TCHAR*
 \r
 \r
  \r
+/***********************************************************************\r
+  <<< [StrT_insert] >>> \r
+************************************************************************/\r
+errnum_t  StrT_insert( TCHAR*  in_out_WholeString,  size_t  in_MaxSize_of_WholeString,\r
+       TCHAR*  in_out_Target_in_WholeString,  TCHAR**  out_NextTarget_in_WholeString,\r
+       const TCHAR*  in_InsertString )\r
+{\r
+       errnum_t  e;\r
+       TCHAR*    over_of_whole_string = StrT_chr( in_out_WholeString, _T('\0') );\r
+       size_t    insert_length = _tcslen( in_InsertString );\r
+\r
+       ASSERT_D( in_out_Target_in_WholeString >= in_out_WholeString,   e=E_OTHERS; goto fin );\r
+       ASSERT_D( in_out_Target_in_WholeString <= over_of_whole_string, e=E_OTHERS; goto fin );\r
+\r
+       ASSERT_R( PointerType_diff( over_of_whole_string + 1,  in_out_WholeString ) + ( insert_length * sizeof(TCHAR) )\r
+               <= in_MaxSize_of_WholeString,  e=E_FEW_ARRAY; goto fin );\r
+\r
+       memmove( in_out_Target_in_WholeString + insert_length,  in_out_Target_in_WholeString,\r
+               PointerType_diff( over_of_whole_string + 1,  in_out_Target_in_WholeString ) );\r
+\r
+       memcpy( in_out_Target_in_WholeString,  in_InsertString,  insert_length * sizeof(TCHAR) );\r
+\r
+       if ( out_NextTarget_in_WholeString != NULL ) {\r
+               *out_NextTarget_in_WholeString = in_out_Target_in_WholeString + insert_length;\r
+       }\r
+\r
+       e=0;\r
+fin:\r
+       return  e;\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
+  <<< [StrHS_insert] >>> \r
+************************************************************************/\r
+errnum_t  StrHS_insert( TCHAR**  in_out_WholeString,\r
+       int  in_TargetIndexInWholeString,  int*  out_NextWholeInWholeString,\r
+       const TCHAR*  in_InsertString )\r
+{\r
+       errnum_t  e;\r
+       TCHAR*    string = *in_out_WholeString;\r
+       size_t    target_length = _tcslen( string );\r
+       size_t    insert_length = _tcslen( in_InsertString );\r
+       size_t    max_size = _msize( string ) / sizeof( TCHAR );\r
+       size_t    new_max_size = target_length + insert_length + 1;\r
+       TCHAR*    next_target;\r
+\r
+\r
+       if ( max_size < new_max_size ) {\r
+               TCHAR*  new_string = (TCHAR*) realloc( string,  new_max_size * sizeof( TCHAR ) );\r
+\r
+               IF ( new_string == NULL ) { e=E_FEW_MEMORY; goto fin; }\r
+               max_size = new_max_size;\r
+               string = new_string;\r
+       }\r
+\r
+       e= StrT_insert( string,  max_size * sizeof( TCHAR ),\r
+               string + in_TargetIndexInWholeString,  &next_target,\r
+               in_InsertString ); IF(e){goto fin;}\r
+\r
+       if ( out_NextWholeInWholeString != NULL ) {\r
+               *out_NextWholeInWholeString = next_target - string;\r
+       }\r
+\r
+       e=0;\r
+fin:\r
+       *in_out_WholeString = string;\r
+       return  e;\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
+  <<< [StrHS_printfPartV] >>> \r
+************************************************************************/\r
+errnum_t  StrHS_printfPartV( TCHAR**  in_out_String,\r
+       int  in_IndexInString,  int*  out_NextIndexInString,\r
+       const TCHAR*  in_Format,  va_list  in_VaList )\r
+{\r
+       enum { first_max_size = 40 };\r
+       enum { size_times = 4 };\r
+\r
+       errnum_t  e;\r
+       size_t    max_size;\r
+       TCHAR*    string = *in_out_String;\r
+\r
+\r
+       if ( string == NULL ) {\r
+               max_size = 0;\r
+\r
+               ASSERT_R( in_IndexInString == 0,  e=E_OTHERS; goto fin );\r
+       }\r
+       else {\r
+               max_size = _msize( string ) / sizeof( TCHAR );\r
+\r
+               ASSERT_R( in_IndexInString >= 0  &&  (size_t) in_IndexInString < max_size,\r
+                       e=E_OTHERS; goto fin );\r
+               ASSERT_D( (size_t) in_IndexInString <= _tcslen( string ), __noop() );\r
+       }\r
+\r
+\r
+       if ( string == NULL ) {\r
+               string = (TCHAR*) malloc( first_max_size * sizeof( TCHAR ) );\r
+               max_size = first_max_size;\r
+       }\r
+\r
+\r
+       for (;;) {\r
+\r
+               #if _MSC_VER\r
+                       #pragma warning(push)\r
+                       #pragma warning(disable: 4996)\r
+               #endif\r
+\r
+               #ifdef  _UNICODE\r
+                       int  r = _vsnwprintf( string + in_IndexInString,  max_size - in_IndexInString,\r
+                               in_Format,  in_VaList );\r
+               #else\r
+                       int  r = _vsnprintf( string + in_IndexInString,  max_size - in_IndexInString,\r
+                               in_Format,  in_VaList );\r
+               #endif\r
+\r
+               #if _MSC_VER\r
+                       #pragma warning(pop)\r
+               #endif\r
+\r
+               if ( r >= 0 ) {\r
+                       if ( out_NextIndexInString != NULL ) {\r
+                               *out_NextIndexInString = in_IndexInString + r;\r
+                       }\r
+\r
+                       break;\r
+               }\r
+\r
+               {\r
+                       size_t  new_max_size = max_size * size_times + first_max_size;\r
+                       TCHAR*  new_string = (TCHAR*) realloc( string,  new_max_size * sizeof( TCHAR ) );\r
+\r
+                       IF ( new_string == NULL ) { e=E_FEW_MEMORY; goto fin; }\r
+                       max_size = new_max_size;\r
+                       string = new_string;\r
+               }\r
+       }\r
+\r
+       e=0;\r
+fin:\r
+       *in_out_String = string;\r
+       return  e;\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
+  <<< [StrHS_printfPart] >>> \r
+************************************************************************/\r
+errnum_t  StrHS_printfPart( TCHAR**  in_out_String,\r
+       int  in_IndexInString,  int*  out_NextIndexInString,\r
+       const TCHAR*  in_Format,  ... )\r
+{\r
+       errnum_t  e;\r
+       va_list   va;\r
+       va_start( va, in_Format );\r
+\r
+       e = StrHS_printfPartV( in_out_String,  in_IndexInString,  out_NextIndexInString,  in_Format,  va );\r
+\r
+       va_end( va );\r
+       return  e;\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
+  <<< [StrHS_printfV] >>> \r
+************************************************************************/\r
+errnum_t  StrHS_printfV( TCHAR**  in_out_String,\r
+       const TCHAR*  in_Format,  va_list  in_VaList )\r
+{\r
+       return  StrHS_printfPartV( in_out_String,  0,  NULL,  in_Format,  in_VaList );\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
+  <<< [StrHS_printf] >>> \r
+************************************************************************/\r
+errnum_t  StrHS_printf( TCHAR**  in_out_String,\r
+       const TCHAR*  in_Format,  ... )\r
+{\r
+       errnum_t  e;\r
+       va_list   va;\r
+       va_start( va, in_Format );\r
+\r
+       e = StrHS_printfPartV( in_out_String,  0,  NULL,  in_Format,  va );\r
+\r
+       va_end( va );\r
+       return  e;\r
+}\r
+\r
+\r
\r
 /**************************************************************************\r
   <<< [StrT_meltCSV] >>> \r
 *************************************************************************/\r
@@ -1811,7 +2229,7 @@ errnum_t  StrT_parseCSV_f( const TCHAR* StringOfCSV, bit_flags32_t* out_ReadFlag
        bit_flags32_t  read_flags;\r
        bit_flags32_t  next_read_flag;\r
        TCHAR*         out_str;\r
-       size_t         str_size;\r
+       size_t         str_size = SIZE_MAX;  /* SIZE_MAX = Avoid warning */\r
 \r
 \r
        va_start( va, Types );\r
@@ -2332,6 +2750,17 @@ bool  StrT_isFullPath( const TCHAR* path )
                const TCHAR*  slash = _tcschr( path, _T('/') );\r
                const TCHAR*  colon = _tcschr( path, _T(':') );\r
 \r
+               if ( colon != NULL ) {\r
+                       const TCHAR*  p;\r
+\r
+                       for ( p = path;  p < colon;  p += 1 ) {\r
+                               if ( ! _istalnum( *p ) ) {\r
+                                       colon = NULL;\r
+                                       break;\r
+                               }\r
+                       }\r
+               }\r
+\r
                ret = ( colon != NULL ) &&\r
                        ( back_slash == colon + 1  ||  slash == colon + 1 );\r
        }\r
@@ -2352,7 +2781,6 @@ errnum_t  StrT_getFullPath_part( TCHAR* out_FullPath, size_t FullPathSize, TCHAR
        TCHAR*        out_full_path_over = (TCHAR*)( (uint8_t*) out_FullPath + FullPathSize );\r
        TCHAR*        null_position = NULL;\r
 \r
-\r
        #if  CHECK_ARG\r
                /* "BasePath" must be out of "out_FullPath" */\r
                ASSERT_R( BasePath < out_FullPath  ||\r
@@ -2552,7 +2980,7 @@ errnum_t  StrT_getFullPath_part( TCHAR* out_FullPath, size_t FullPathSize, TCHAR
 \r
        /* Cut last \. */\r
        {\r
-               TCHAR*  over = _tcschr( OutStart, _T('\0') );\r
+               TCHAR*  over = StrT_chr( OutStart, _T('\0') );\r
 \r
                while ( over - 2 >= OutStart  &&\r
                                *( over - 1 ) == _T('.')  &&  *( over - 2 ) == separator ) {\r
@@ -2640,7 +3068,7 @@ errnum_t  StrT_getParentFullPath_part( TCHAR* Str, size_t StrSize, TCHAR* StrSta
 \r
 \r
        /* Cut last \ */\r
-       p = _tcschr( StrStart, _T('\0') );\r
+       p = StrT_chr( StrStart, _T('\0') );\r
        if ( p > StrStart ) {\r
                TCHAR  c = *( p - 1 );\r
                if ( c == _T('\\')  ||  c == _T('/') )\r
@@ -2761,9 +3189,8 @@ errnum_t  StrT_getStepPath( TCHAR* out_StepPath, size_t StepPathSize,
 \r
 \r
        /* FullPath \82Æ BasePath \82Ì\8aÖ\8cW\82ª\81A\95Ð\95û\82Ì\88ê\95\94\82ª\82à\82¤\95Ð\95û\82Ì\91S\91Ì\82Å\82 \82é\82Æ\82« */\r
-       if (  abs_char == _T('/')  ||  abs_char == _T('\\')  ||\r
-            base_char == _T('/')  || base_char == _T('\\')  ) {\r
-            /* other character is '\0' */\r
+       if ( ( ( abs_char == _T('/')  ||  abs_char == _T('\\') )  &&  base_char == _T('\0') ) ||\r
+            (  base_char == _T('/')  || base_char == _T('\\') )  &&   abs_char == _T('\0') ) {\r
 \r
                if ( separator == 0 )\r
                        { separator = abs_char; }\r
@@ -2886,11 +3313,11 @@ errnum_t  StrT_addLastOfFileName( TCHAR* out_Path, size_t PathSize,
        size_t          copy_size;\r
        size_t          free_size;\r
        char*           out_pos;\r
-       const TCHAR*    last_pos_in_base = _tcschr( BasePath, _T('\0') );\r
+       const TCHAR*    last_pos_in_base = StrT_chr( BasePath, _T('\0') );\r
        const TCHAR*    term_pos_in_base;\r
        const TCHAR*     add_pos_in_base;\r
        const TCHAR*  period_pos_in_base = _tcsrchr( BasePath, _T('.') );  // > term_pos_in_base\r
-       const TCHAR*    last_pos_in_add  = _tcschr( AddName, _T('\0') );\r
+       const TCHAR*    last_pos_in_add  = StrT_chr( AddName, _T('\0') );\r
        const TCHAR*    term_pos_in_add;\r
        const TCHAR*  period_pos_in_add  = _tcsrchr( AddName,  _T('.') );  // > term_pos_in_add\r
 \r
@@ -2918,9 +3345,9 @@ errnum_t  StrT_addLastOfFileName( TCHAR* out_Path, size_t PathSize,
        }\r
        else {\r
                if ( term_pos_in_base < BasePath )\r
-                       add_pos_in_base = _tcschr( BasePath, _T('\0') );\r
+                       add_pos_in_base = StrT_chr( BasePath, _T('\0') );\r
                else\r
-                       add_pos_in_base = _tcschr( term_pos_in_base, _T('\0') );\r
+                       add_pos_in_base = StrT_chr( term_pos_in_base, _T('\0') );\r
        }\r
 \r
 \r
@@ -2978,17 +3405,100 @@ err_fa:
 \r
  \r
 /***********************************************************************\r
+  <<< [StrT_encodeToValidPath] >>> \r
+************************************************************************/\r
+errnum_t  StrT_encodeToValidPath( TCHAR* out_Path,  size_t in_OutPathSize,  const TCHAR* in_Path,  bool  in_IsName )\r
+{\r
+       errnum_t  e;\r
+\r
+       int  i_in;   /* index of "in_Path" */\r
+       int  i_out = 0;  /* index of "out_Path" */\r
+       int  i_out_over = (int)( in_OutPathSize / sizeof(TCHAR) );\r
+       bool is_colon = in_IsName;\r
+\r
+       ASSERT_R( in_Path != out_Path,  e=E_OTHERS; goto fin );\r
+\r
+       for ( i_in = 0;  ;  i_in += 1 ) {\r
+               bool  is_percent;\r
+               int   chara = in_Path[ i_in ];  /* a character */\r
+\r
+               if ( chara == _T('\0') )\r
+                       { break; }\r
+\r
+\r
+               /* Set "is_percent" */\r
+               switch ( chara ) {\r
+                       case _T(','):  case _T(';'):  case _T('*'):  case _T('?'):  case _T('"'):\r
+                       case _T('<'):  case _T('>'):  case _T('|'):  case _T('%'):\r
+                               is_percent = true;\r
+                               break;\r
+                       case _T(':'):\r
+                               is_percent = is_colon;\r
+                               is_colon = true;\r
+                               break;\r
+                       case _T('\\'):  case _T('/'):\r
+                               is_percent = in_IsName;\r
+                               is_colon = true;\r
+                               break;\r
+                       default:\r
+                               is_percent = false;\r
+                               break;\r
+               }\r
+\r
+\r
+               /* Set "out_Path[ i_out ]" */\r
+               if ( is_percent ) {\r
+                       int  high = chara / 0x10;\r
+                       int  low  = chara & 0xF;\r
+\r
+                       if ( high <= 9 ) {\r
+                               high += _T('0');\r
+                       } else {\r
+                               high = ( high - 0xA ) + _T('a');\r
+                       }\r
+\r
+                       if ( low <= 9 ) {\r
+                               low += _T('0');\r
+                       } else {\r
+                               low = ( low - 0xA ) + _T('a');\r
+                       }\r
+\r
+                       ASSERT_R( i_out + 3 < i_out_over,  e=E_FEW_ARRAY; goto fin );\r
+\r
+                       out_Path[ i_out + 0 ] = _T('%');\r
+                       out_Path[ i_out + 1 ] = (TCHAR) high;\r
+                       out_Path[ i_out + 2 ] = (TCHAR) low;\r
+                       i_out += 3;\r
+               }\r
+               else {\r
+                       ASSERT_R( i_out + 1 < i_out_over,  e=E_FEW_ARRAY; goto fin );\r
+\r
+                       out_Path[ i_out ] = (TCHAR) chara;\r
+                       i_out += 1;\r
+               }\r
+       }\r
+\r
+       e=0;\r
+fin:\r
+       out_Path[ i_out ] = _T('\0');\r
+\r
+       return  e;\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
   <<< [Strs_init] >>> \r
 ************************************************************************/\r
 enum { Strs_FirstSize = 0x0F00 };\r
 \r
 errnum_t  Strs_init( Strs* self )\r
 {\r
-       char*  p;\r
+       byte_t*  p;\r
 \r
        self->MemoryAddress = NULL;\r
 \r
-       p = (char*) malloc( Strs_FirstSize );\r
+       p = (byte_t*) malloc( Strs_FirstSize );\r
        IF( p == NULL )  return  E_FEW_MEMORY;\r
 \r
        self->MemoryAddress = p;\r
@@ -3048,7 +3558,7 @@ errnum_t  Strs_toEmpty( Strs* self )
 ************************************************************************/\r
 errnum_t  Strs_add( Strs* self, const TCHAR* Str, const TCHAR** out_AllocStr )\r
 {\r
-       return  Strs_addBinary( self, Str, _tcschr( Str, _T('\0') ) + 1, out_AllocStr );\r
+       return  Strs_addBinary( self, Str, StrT_chr( Str, _T('\0') ) + 1, out_AllocStr );\r
 }\r
 \r
 \r
@@ -3058,8 +3568,8 @@ errnum_t  Strs_addBinary( Strs* self, const TCHAR* Str, const TCHAR* StrOver, co
        size_t  str_size;\r
        size_t  elem_size;\r
 \r
-       str_size  = ( (char*) StrOver - (char*) Str );\r
-       elem_size = ( sizeof(TCHAR*) + str_size + sizeof(void*) - 1 ) & ~(sizeof(void*) - 1);\r
+       str_size  = ( (byte_t*) StrOver - (byte_t*) Str );\r
+       elem_size = ( sizeof(TCHAR*) + str_size + ( sizeof(void*) - 1 ) ) & ~(sizeof(void*) - 1);\r
 \r
        if ( self->NextElem + elem_size > self->MemoryOver )\r
                { e= Strs_expandSize( self, str_size ); IF(e)goto fin; }\r
@@ -3126,10 +3636,10 @@ errnum_t  Strs_freeLast( Strs* self, TCHAR* AllocStr )
        }\r
 \r
        // [ FirstStr | NextStr | TCHAR[] | NULL    | TCHAR[] | ... ]\r
-       else if ( (char*) prev_of_last_str >= self->MemoryAddress  &&\r
-                 (char*) prev_of_last_str <  self->MemoryOver ) {\r
-               self->NextElem = (char*)last_str - sizeof(TCHAR*);\r
-               self->PointerToNextStrInPrevElem = (TCHAR**)( (char*)prev_of_last_str - sizeof(TCHAR*) );\r
+       else if ( (byte_t*) prev_of_last_str >= self->MemoryAddress  &&\r
+                 (byte_t*) prev_of_last_str <  self->MemoryOver ) {\r
+               self->NextElem = (byte_t*)last_str - sizeof(TCHAR*);\r
+               self->PointerToNextStrInPrevElem = (TCHAR**)( (byte_t*)prev_of_last_str - sizeof(TCHAR*) );\r
        }\r
 \r
        // [ FirstStr | NextStr | TCHAR[] | NextStr | TCHAR[] ], [ NULL | TCHAR[] | ... ]\r
@@ -3174,7 +3684,7 @@ errnum_t  Strs_expandSize( Strs* self, size_t FreeSize )
        Strs*   mp2;\r
        size_t  elem_size = ( sizeof(TCHAR*) + FreeSize + sizeof(void*) - 1 ) & ~(sizeof(void*) - 1);\r
        size_t  memory_size;\r
-       char*   new_memory;\r
+       byte_t* new_memory;\r
 \r
        // [ NULL     | ... ]\r
        // [ FirstStr | NULL    | TCHAR[] | ... ]\r
@@ -3186,7 +3696,7 @@ errnum_t  Strs_expandSize( Strs* self, size_t FreeSize )
                //=== alloc\r
                mp = (Strs*) malloc( sizeof(Strs) ); IF(mp==NULL) goto err_fm;\r
                memory_size = ( self->MemoryOver - self->MemoryAddress ) * 2;\r
-               new_memory = (char*) malloc( memory_size );\r
+               new_memory = (byte_t*) malloc( memory_size );\r
                IF( new_memory == NULL )  { free( mp );  goto err_fm; }\r
 \r
                //=== move old memory\r
@@ -3222,8 +3732,8 @@ errnum_t  Strs_commit( Strs* self, TCHAR* StrOver )
        size_t  elem_size;\r
 \r
        if ( StrOver == NULL )\r
-               { StrOver = _tcschr( (TCHAR*)( self->NextElem + sizeof(TCHAR*) ), _T('\0') ) + 1; }\r
-       elem_size = ( ( (char*)StrOver - self->NextElem ) + sizeof(void*) - 1 ) & ~(sizeof(void*) - 1);\r
+               { StrOver = StrT_chr( (TCHAR*)( self->NextElem + sizeof(TCHAR*) ), _T('\0') ) + 1; }\r
+       elem_size = ( ( (byte_t*)StrOver - self->NextElem ) + sizeof(void*) - 1 ) & ~(sizeof(void*) - 1);\r
 \r
        //=== fill elem\r
        *(TCHAR**) self->NextElem = NULL;\r
@@ -3241,6 +3751,39 @@ errnum_t  Strs_commit( Strs* self, TCHAR* StrOver )
 \r
  \r
 /***********************************************************************\r
+  <<< [Strs_allocateArray] >>> \r
+************************************************************************/\r
+errnum_t  Strs_allocateArray( Strs* self,  TCHAR*** out_PointerArray,  int* out_Count )\r
+{\r
+       errnum_t  e;\r
+       TCHAR*    p;\r
+       TCHAR**   pp;\r
+       int       count;\r
+\r
+       count = 0;\r
+       for ( Strs_forEach( self, &p ) ) {\r
+               count += 1;\r
+       }\r
+\r
+       e= HeapMemory_allocateArray( &pp, count ); IF(e){goto fin;}\r
+\r
+       count = 0;\r
+       for ( Strs_forEach( self, &p ) ) {\r
+               pp[ count ] = p;\r
+               count += 1;\r
+       }\r
+\r
+       *out_PointerArray = pp;\r
+       *out_Count = count;\r
+\r
+       e=0;\r
+fin:\r
+       return  e;\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
   <<< [StrArr] >>> \r
 ************************************************************************/\r
 \r
@@ -3439,7 +3982,7 @@ int  GetDebugBreakCount()
 /***********************************************************************\r
   <<< [Set2_init] >>> \r
 ************************************************************************/\r
-int  Set2_init( Set2* m, int FirstSize )\r
+errnum_t  Set2_init( Set2* m, int FirstSize )\r
 {\r
        m->First = malloc( FirstSize );\r
        if ( m->First == NULL )  return  E_FEW_MEMORY;\r
@@ -3456,7 +3999,7 @@ int  Set2_init( Set2* m, int FirstSize )
 /***********************************************************************\r
   <<< [Set2_finish] >>> \r
 ************************************************************************/\r
-int  Set2_finish( Set2* m, int e )\r
+errnum_t  Set2_finish( Set2* m, errnum_t e )\r
 {\r
        if ( m->First != NULL )  { free( m->First );  m->First = NULL; }\r
        return  e;\r
@@ -3466,7 +4009,7 @@ int  Set2_finish( Set2* m, int e )
 /***********************************************************************\r
   <<< [Set2_ref_imp] >>> \r
 ************************************************************************/\r
-int  Set2_ref_imp( Set2* m, int iElem, void* out_pElem, size_t ElemSize )\r
+errnum_t  Set2_ref_imp( Set2* m, int iElem, void* out_pElem, size_t ElemSize )\r
 {\r
        int    e;\r
        char*  p;\r
@@ -3548,9 +4091,9 @@ void*  Set2_IteratorClass_getPrevious( Set2_IteratorClass* self )
 /***********************************************************************\r
   <<< [Set2_alloc_imp] >>> \r
 ************************************************************************/\r
-int  Set2_alloc_imp( Set2* m, void* pp, size_t size )\r
+errnum_t  Set2_alloc_imp( Set2* m, void* pp, size_t size )\r
 {\r
-       int  e;\r
+       errnum_t  e;\r
 \r
        e= Set2_expandIfOverByAddr( m, (char*) m->Next + size ); IF(e)goto fin;\r
        *(void**)pp = m->Next;\r
@@ -3564,10 +4107,13 @@ fin:
 }\r
 \r
 \r
-int  Set2_allocMulti_sub( Set2* m, void* out_pElem, size_t ElemsSize )\r
+/***********************************************************************\r
+  <<< [Set2_allocMulti_sub] >>> \r
+************************************************************************/\r
+errnum_t  Set2_allocMulti_sub( Set2* m, void* out_pElem, size_t ElemsSize )\r
 {\r
-       int    e;\r
-       char*  p;\r
+       errnum_t  e;\r
+       char*     p;\r
 \r
        e= Set2_expandIfOverByAddr( m, (char*) m->Next + ElemsSize ); IF(e)goto fin;\r
        p = (char*) m->Next;\r
@@ -3596,7 +4142,7 @@ errnum_t  Set2_expandIfOverByAddr_imp( Set2* m, void* OverAddrBasedOnNowFirst )
        offset_of_next = (unsigned)( (char*)OverAddrBasedOnNowFirst - (char*)m->First );\r
        offset_of_over = (unsigned)( ( (char*)m->Over - (char*)m->First ) ) * 2;\r
        IF_D( offset_of_next >= 0x80000000 ) { e=E_OTHERS; goto fin; }\r
-       IF_D( offset_of_over == 0 ) { e=E_OTHERS; goto fin; }\r
+       if ( offset_of_over == 0 ) { offset_of_over = 0x100; }\r
        while ( offset_of_over < offset_of_next ) { offset_of_over *= 2; }\r
        IF( offset_of_over >= 0x10000000 ) { e=E_OTHERS; goto fin; }\r
 \r
@@ -3620,15 +4166,45 @@ fin:
 \r
  \r
 /***********************************************************************\r
+  <<< [Set2_free_imp] >>> \r
+************************************************************************/\r
+errnum_t  Set2_free_imp( Set2* self,  void* in_PointerOfPointer,  size_t  in_Size_ofElement,  errnum_t  e )\r
+{\r
+       void*  element;\r
+\r
+       element = *(void**) in_PointerOfPointer;\r
+\r
+       if ( element != NULL ) {\r
+               if ( element != ( (byte_t*) self->Next - in_Size_ofElement ) ) {\r
+                       if ( e == 0 ) { e=E_OTHERS; }\r
+               }\r
+               else {\r
+                       #ifndef NDEBUG\r
+                               memset( element, 0xFE, in_Size_ofElement );\r
+                       #endif\r
+\r
+                       self->Next = element;\r
+\r
+                       *(void**) in_PointerOfPointer = NULL;\r
+               }\r
+       }\r
+       return  e;\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
   <<< [Set2_separate] >>> \r
 ************************************************************************/\r
-int  Set2_separate( Set2* m, int NextSize, void** allocate_Array )\r
+errnum_t  Set2_separate( Set2* m, int NextSize, void** allocate_Array )\r
 {\r
-       int    e;\r
-       void*  p = m->First;\r
+       errnum_t  e;\r
+       void*     p = m->First;\r
 \r
        if ( NextSize == 0 ) {\r
                m->First = NULL;\r
+               m->Next  = NULL;\r
+               m->Over  = NULL;\r
        }\r
        else {\r
                e= Set2_init( m, NextSize ); IF(e)goto fin;\r
@@ -3645,10 +4221,10 @@ fin:
 /***********************************************************************\r
   <<< [Set2_pop_imp] >>> \r
 ************************************************************************/\r
-int  Set2_pop_imp( Set2* m, void* pp, size_t size )\r
+errnum_t  Set2_pop_imp( Set2* m, void* pp, size_t size )\r
 {\r
-       int    e;\r
-       void*  p;\r
+       errnum_t  e;\r
+       void*     p;\r
 \r
        p = (char*) m->Next - size;\r
 \r
@@ -3715,10 +4291,16 @@ errnum_t  vswprintf_r( wchar_t* s, size_t s_size, const wchar_t* format, va_list
 {\r
        size_t  tsize = s_size / sizeof(wchar_t);\r
 \r
-       #pragma warning(push)\r
-       #pragma warning(disable: 4996)\r
-               int  r = _vsnwprintf( s, tsize, format, va );\r
-       #pragma warning(pop)\r
+       #if _MSC_VER\r
+               #pragma warning(push)\r
+               #pragma warning(disable: 4996)\r
+       #endif\r
+\r
+       int  r = _vsnwprintf( s, tsize, format, va );\r
+\r
+       #if _MSC_VER\r
+               #pragma warning(pop)\r
+       #endif\r
 \r
        if ( r == (int) tsize || r == -1 ) { s[tsize-1] = '\0';  return E_FEW_ARRAY; }\r
        else  return  0;\r
@@ -3754,7 +4336,8 @@ errnum_t  stcpy_part_r( TCHAR* s, size_t s_size, TCHAR* s_start, TCHAR** p_s_las
 \r
        IF_D( s_start < s || (char*)s_start >= (char*)s + s_size )  { return 1; }\r
 \r
-       if ( src_over == NULL )  { src_over = _tcschr( src, _T('\0') ); }\r
+       if ( src_over == NULL )  { src_over = StrT_chr( src, _T('\0') ); }\r
+       IF_D( src > src_over )  { return 1; }\r
        src_size = (char*)src_over - (char*)src;\r
        IF ( src_size >= s_space ) {\r
                s_space -= sizeof(TCHAR);\r
@@ -3789,7 +4372,7 @@ errnum_t  stprintf_part_r( TCHAR* s, size_t s_size, TCHAR* s_start, TCHAR** p_s_
        IF_D( s_start < s || (char*)s_start >= (char*)s + s_size ) {return E_OTHERS;}\r
 \r
        e = vstprintf_r( s_start, s_size - ( (char*)s_start - (char*)s), format, va );\r
-       va_end( va );  if ( p_s_last != NULL )  *p_s_last = _tcschr( s_start, '\0' );\r
+       va_end( va );  if ( p_s_last != NULL )  *p_s_last = StrT_chr( s_start, '\0' );\r
        return  e;\r
 }\r
 \r