OSDN Git Service

Version 4.01
[vbslib/main.git] / _src / Test / tools / vbslib_helper_src / _setup_generated / clib.c
index a1f8c69..618bee3 100644 (file)
@@ -9,10 +9,10 @@
 /*=================================================================*/\r
  \r
 /***********************************************************************\r
-  <<< [Globals_init_const] >>> \r
+  <<< [Globals_initConst] >>> \r
 ************************************************************************/\r
 \r
-void  Globals_init_const()\r
+void  Globals_initConst()\r
 {\r
     AppKey_initGlobal_const(); \r
 }\r
@@ -126,7 +126,7 @@ int  GetCommandLineUnnamed( int Index1, TCHAR* out_AParam, size_t AParamSize )
 \r
 err_nf:\r
   if ( AParamSize >= sizeof(TCHAR) )  *out_AParam = _T('\0');\r
-  IF ( Index1 >= 2 )  return  E_NotFoundSymbol;\r
+  IF ( Index1 >= 2 )  return  E_NOT_FOUND_SYMBOL;\r
   return  0;\r
 }\r
 \r
@@ -196,7 +196,7 @@ int  GetCommandLineNamed_sub( const TCHAR* Name, bool bCase, bool* out_IsExist,
         }\r
       }\r
       else {\r
-        IF( bMatch ) return  E_NotFoundSymbol;  // no value error\r
+        IF( bMatch ) return  E_NOT_FOUND_SYMBOL;  // no value error\r
       }\r
     }\r
 \r
@@ -215,7 +215,7 @@ int  GetCommandLineNamed_sub( const TCHAR* Name, bool bCase, bool* out_IsExist,
   }\r
 \r
   *out_IsExist = false;\r
-  return  E_NotFoundSymbol;\r
+  return  E_NOT_FOUND_SYMBOL;\r
 }\r
 \r
 \r
@@ -273,7 +273,7 @@ bool  GetCommandLineExist( const TCHAR* Name, bool bCase )
   TCHAR   v[1];\r
 \r
   e = GetCommandLineNamed_sub( Name, bCase, &is_exist, v, sizeof(v) );\r
-  if ( e == E_NotFoundSymbol )  Err2_clear();\r
+  if ( e == E_NOT_FOUND_SYMBOL )  ClearError();\r
   return  is_exist;\r
 }\r
 \r
@@ -299,7 +299,7 @@ int  env_part( TCHAR* Str,  unsigned StrSize,  TCHAR* StrStart, TCHAR** out_StrL
   IF_D( StrStart < Str || StrStart >= o_last ) goto err;\r
 \r
   c = *p;\r
-  IF_D( StrSize <= 2 ) return  E_FewArray;\r
+  IF_D( StrSize <= 2 ) return  E_FEW_ARRAY;\r
 \r
   while ( c != _T('\0') ) {\r
     if ( c == _T('%') ) {\r
@@ -345,9 +345,9 @@ fin:
   if ( out_StrLast != NULL )  *out_StrLast = o;\r
   return  e;\r
 \r
-err_fa:  e = E_FewArray;  goto fin;\r
-err_ns:  e = E_NotFoundSymbol; goto fin;\r
-err:  e = E_Others;  goto fin;\r
+err_fa:  e = E_FEW_ARRAY;  goto fin;\r
+err_ns:  e = E_NOT_FOUND_SYMBOL; goto fin;\r
+err:  e = E_OTHERS;  goto fin;\r
 }\r
 \r
 \r
@@ -378,7 +378,7 @@ int  env_malloc( TCHAR** out_Value, size_t* out_ValueLen, const TCHAR* Name )
 fin:\r
   return  e;\r
 \r
-err_fm:  e = E_FewMemory;  goto fin;\r
+err_fm:  e = E_FEW_MEMORY;  goto fin;\r
 }\r
 \r
 \r
@@ -426,27 +426,27 @@ bool  FileT_isExist( const TCHAR* path )
 {\r
  #if ! FileT_isExistWildcard\r
 \r
-  DWORD  r;\r
+       DWORD  r;\r
 \r
-  if ( path[0] == _T('\0') )  return  false;\r
-  r = GetFileAttributes( path );\r
-  return  r != (DWORD)-1;\r
+       if ( path[0] == _T('\0') )  return  false;\r
+       r = GetFileAttributes( path );\r
+       return  r != (DWORD)-1;\r
 \r
  #else\r
 \r
-  HANDLE  find;\r
-  WIN32_FIND_DATA  data;\r
+       HANDLE  find;\r
+       WIN32_FIND_DATA  data;\r
 \r
-  find = FindFirstFileEx( path, FindExInfoStandard, &data,\r
-    FindExSearchNameMatch, NULL, 0 );\r
+       find = FindFirstFileEx( path, FindExInfoStandard, &data,\r
+               FindExSearchNameMatch, NULL, 0 );\r
 \r
-  if ( find == INVALID_HANDLE_VALUE ) {\r
-    return  false;\r
-  }\r
-  else {\r
-    FindClose( find );\r
-    return  true;\r
-  }\r
+       if ( find == INVALID_HANDLE_VALUE ) {\r
+               return  false;\r
+       }\r
+       else {\r
+               FindClose( find );\r
+               return  true;\r
+       }\r
 \r
  #endif\r
 }\r
@@ -458,9 +458,9 @@ bool  FileT_isExist( const TCHAR* path )
 ************************************************************************/\r
 bool  FileT_isFile( const TCHAR* path )\r
 {\r
-  DWORD  r = GetFileAttributes( path );\r
-  return  ( r & (FILE_ATTRIBUTE_DIRECTORY | 0x80000000) ) == 0;\r
-    // 0x80000000 \82Í\81A\83t\83@\83C\83\8b\82â\83t\83H\83\8b\83_\82ª\91\8dÝ\82µ\82È\82¢\82±\82Æ\82ð\94»\92è\82·\82é\82½\82ß\r
+       DWORD  r = GetFileAttributes( path );\r
+       return  ( r & (FILE_ATTRIBUTE_DIRECTORY | 0x80000000) ) == 0;\r
+               // 0x80000000 \82Í\81A\83t\83@\83C\83\8b\82â\83t\83H\83\8b\83_\82ª\91\8dÝ\82µ\82È\82¢\82±\82Æ\82ð\94»\92è\82·\82é\82½\82ß\r
 }\r
 \r
 \r
@@ -470,9 +470,9 @@ bool  FileT_isFile( const TCHAR* path )
 ************************************************************************/\r
 bool  FileT_isDir( const TCHAR* path )\r
 {\r
-  DWORD  r = GetFileAttributes( path );\r
-  return  ( r & (FILE_ATTRIBUTE_DIRECTORY | 0x80000000) ) == FILE_ATTRIBUTE_DIRECTORY;\r
-    // 0x80000000 \82Í\81A\83t\83@\83C\83\8b\82â\83t\83H\83\8b\83_\82ª\91\8dÝ\82µ\82È\82¢\82±\82Æ\82ð\94»\92è\82·\82é\82½\82ß\r
+       DWORD  r = GetFileAttributes( path );\r
+       return  ( r & (FILE_ATTRIBUTE_DIRECTORY | 0x80000000) ) == FILE_ATTRIBUTE_DIRECTORY;\r
+               // 0x80000000 \82Í\81A\83t\83@\83C\83\8b\82â\83t\83H\83\8b\83_\82ª\91\8dÝ\82µ\82È\82¢\82±\82Æ\82ð\94»\92è\82·\82é\82½\82ß\r
 }\r
 \r
 \r
@@ -481,17 +481,17 @@ bool  FileT_isDir( const TCHAR* path )
   <<< [FileT_callByNestFind] \83T\83u\83t\83H\83\8b\83_\82à\8aÜ\82ß\82Ä\8ae\83t\83@\83C\83\8b\82Ì\83p\83X\82ð\93n\82· >>> \r
 ************************************************************************/\r
 typedef struct {\r
-  /*--- inherit from FileT_CallByNestFindData */\r
-  void*     CallerArgument;\r
-  TCHAR*    AbsPath;  // abstruct path\r
-  TCHAR*    StepPath;\r
-  TCHAR*    FileName;\r
-  DWORD     FileAttributes;\r
-\r
-  /*---*/\r
-  BitField  Flags;\r
-  FuncType  CallbackFromNestFind;\r
-  TCHAR     AbsPathMem[4096];\r
+       /*--- inherit from FileT_CallByNestFindData */\r
+       void*     CallerArgument;\r
+       TCHAR*    AbsPath;  // abstruct path\r
+       TCHAR*    StepPath;\r
+       TCHAR*    FileName;\r
+       DWORD     FileAttributes;\r
+\r
+       /*---*/\r
+       BitField  Flags;\r
+       FuncType  CallbackFromNestFind;\r
+       TCHAR     AbsPathMem[4096];\r
 } FileT_CallByNestFindDataIn;\r
 \r
 int  FileT_callByNestFind_sub( FileT_CallByNestFindDataIn* m );\r
@@ -499,151 +499,151 @@ int  FileT_callByNestFind_sub( FileT_CallByNestFindDataIn* m );
 \r
 int  FileT_callByNestFind( const TCHAR* Path, BitField Flags, void* Argument, FuncType Callback )\r
 {\r
-  int  e;\r
-  FileT_CallByNestFindDataIn  data;\r
+       int  e;\r
+       FileT_CallByNestFindDataIn  data;\r
 \r
-  {\r
-    TCHAR*  p;\r
+       {\r
+               TCHAR*  p;\r
 \r
-    e= StrT_cpy( data.AbsPathMem, sizeof(data.AbsPathMem), Path ); IF(e)goto fin;\r
+               e= StrT_cpy( data.AbsPathMem, sizeof(data.AbsPathMem), Path ); IF(e)goto fin;\r
 \r
 \r
-    /* AbsPathMem \82Ì\8dÅ\8cã\82É \ \82ª\96³\82¢\82È\82ç\92Ç\89Á\82·\82é */\r
-    p = _tcschr( data.AbsPathMem, _T('\0') );\r
-    p--;\r
-    if ( *p != _T('\\') ) {\r
-      p++;\r
-      IF( p >= data.AbsPathMem + (sizeof(data.AbsPathMem) / sizeof(TCHAR)) - 1 )goto err_fa;\r
-      *p = _T('\\');\r
-    }\r
+               /* AbsPathMem \82Ì\8dÅ\8cã\82É \ \82ª\96³\82¢\82È\82ç\92Ç\89Á\82·\82é */\r
+               p = _tcschr( data.AbsPathMem, _T('\0') );\r
+               p--;\r
+               if ( *p != _T('\\') ) {\r
+                       p++;\r
+                       IF( p >= data.AbsPathMem + (sizeof(data.AbsPathMem) / sizeof(TCHAR)) - 1 )goto err_fa;\r
+                       *p = _T('\\');\r
+               }\r
 \r
 \r
-    /* data \82ð\8f\89\8aú\89»\82·\82é */\r
-    data.CallerArgument = Argument;\r
-    data.AbsPath = data.AbsPathMem;\r
-    data.StepPath = p + 1;\r
-    data.FileName = p + 1;\r
-    data.Flags = Flags;\r
-    data.CallbackFromNestFind = Callback;\r
-  }\r
+               /* data \82ð\8f\89\8aú\89»\82·\82é */\r
+               data.CallerArgument = Argument;\r
+               data.AbsPath = data.AbsPathMem;\r
+               data.StepPath = p + 1;\r
+               data.FileName = p + 1;\r
+               data.Flags = Flags;\r
+               data.CallbackFromNestFind = Callback;\r
+       }\r
 \r
-  /* \8dÄ\8bN\8cÄ\82Ñ\8fo\82µ\8aÖ\90\94\82Ö */\r
-  e= FileT_callByNestFind_sub( &data ); IF(e)goto fin;\r
+       /* \8dÄ\8bN\8cÄ\82Ñ\8fo\82µ\8aÖ\90\94\82Ö */\r
+       e= FileT_callByNestFind_sub( &data ); IF(e)goto fin;\r
 \r
-  e=0;\r
+       e=0;\r
 fin:\r
-  return  e;\r
-err_fa: e= E_FewArray; goto fin;\r
+       return  e;\r
+err_fa: e= E_FEW_ARRAY; goto fin;\r
 }\r
 \r
 \r
 int  FileT_callByNestFind_sub( FileT_CallByNestFindDataIn* m )\r
 {\r
-  int  e;\r
-  HANDLE  find;\r
-  WIN32_FIND_DATA  data;\r
-  TCHAR*  p;\r
-  int  done;\r
+       int  e;\r
+       HANDLE  find;\r
+       WIN32_FIND_DATA  data;\r
+       TCHAR*  p;\r
+       int  done;\r
 \r
 \r
-  /* Path \82É\8ew\92è\82µ\82½\83t\83H\83\8b\83_\82É\91Î\82µ\82Ä\83R\81[\83\8b\83o\83b\83N\82·\82é */\r
-  if ( m->Flags & FileT_FolderBeforeFiles ) {\r
-    *( m->FileName - 1 ) = _T('\0');  // m->AbsPath \82Ì\8dÅ\8cã\82Ì \ \82ð\88ê\8e\9e\93I\82É\83J\83b\83g\r
-    *( m->FileName ) = _T('\0');  // m->FileName, m->StepPath \82ð "" \82É\82·\82é\r
-    m->FileAttributes = FILE_ATTRIBUTE_DIRECTORY;\r
+       /* Path \82É\8ew\92è\82µ\82½\83t\83H\83\8b\83_\82É\91Î\82µ\82Ä\83R\81[\83\8b\83o\83b\83N\82·\82é */\r
+       if ( m->Flags & FileT_FolderBeforeFiles ) {\r
+               *( m->FileName - 1 ) = _T('\0');  // m->AbsPath \82Ì\8dÅ\8cã\82Ì \ \82ð\88ê\8e\9e\93I\82É\83J\83b\83g\r
+               *( m->FileName ) = _T('\0');  // m->FileName, m->StepPath \82ð "" \82É\82·\82é\r
+               m->FileAttributes = FILE_ATTRIBUTE_DIRECTORY;\r
 \r
-    if ( m->StepPath[0] == _T('\0') ) {\r
-      TCHAR*  step_path = m->StepPath;\r
-      TCHAR*  fname     = m->FileName;\r
+               if ( m->StepPath[0] == _T('\0') ) {\r
+                       TCHAR*  step_path = m->StepPath;\r
+                       TCHAR*  fname     = m->FileName;\r
 \r
-      m->StepPath = _T(".");\r
-      m->FileName = StrT_refFName( m->AbsPath );\r
-      e= m->CallbackFromNestFind( m ); IF(e)goto fin;\r
-      m->StepPath = step_path;\r
-      m->FileName = fname;\r
-    }\r
-    else if ( m->FileName[0] == _T('\0') ) {\r
-      TCHAR*  fname = m->FileName;\r
+                       m->StepPath = _T(".");\r
+                       m->FileName = StrT_refFName( m->AbsPath );\r
+                       e= m->CallbackFromNestFind( m ); IF(e)goto fin;\r
+                       m->StepPath = step_path;\r
+                       m->FileName = fname;\r
+               }\r
+               else if ( m->FileName[0] == _T('\0') ) {\r
+                       TCHAR*  fname = m->FileName;\r
 \r
-      m->FileName = StrT_refFName( m->AbsPath );\r
-      e= m->CallbackFromNestFind( m ); IF(e)goto fin;\r
-      m->FileName = fname;\r
-    }\r
-    else {\r
-      e= m->CallbackFromNestFind( m ); IF(e)goto fin;\r
-    }\r
-    *( m->FileName - 1 ) = _T('\\');\r
-  }\r
+                       m->FileName = StrT_refFName( m->AbsPath );\r
+                       e= m->CallbackFromNestFind( m ); IF(e)goto fin;\r
+                       m->FileName = fname;\r
+               }\r
+               else {\r
+                       e= m->CallbackFromNestFind( m ); IF(e)goto fin;\r
+               }\r
+               *( m->FileName - 1 ) = _T('\\');\r
+       }\r
 \r
 \r
-  /* * \82ð\92Ç\89Á */\r
-  p = m->FileName;\r
-  IF( p >= m->AbsPathMem + (sizeof(m->AbsPathMem) / sizeof(TCHAR)) - 2 )goto err_fa;\r
-  *p = _T('*');  *(p+1) = _T('\0');\r
+       /* * \82ð\92Ç\89Á */\r
+       p = m->FileName;\r
+       IF( p >= m->AbsPathMem + (sizeof(m->AbsPathMem) / sizeof(TCHAR)) - 2 )goto err_fa;\r
+       *p = _T('*');  *(p+1) = _T('\0');\r
 \r
 \r
-  /* \83t\83@\83C\83\8b\82©\83t\83H\83\8b\83_\82ð\97ñ\8b\93\82µ\82Ü\82· */\r
-  find = FindFirstFileEx( m->AbsPathMem, FindExInfoStandard, &data,\r
-    FindExSearchNameMatch, NULL, 0 );\r
-  done = ( find == INVALID_HANDLE_VALUE );\r
+       /* \83t\83@\83C\83\8b\82©\83t\83H\83\8b\83_\82ð\97ñ\8b\93\82µ\82Ü\82· */\r
+       find = FindFirstFileEx( m->AbsPathMem, FindExInfoStandard, &data,\r
+               FindExSearchNameMatch, NULL, 0 );\r
+       done = ( find == INVALID_HANDLE_VALUE );\r
 \r
-  while (!done)\r
-  {\r
-    if ( _tcscmp( data.cFileName, _T(".") ) == 0 ||\r
-         _tcscmp( data.cFileName, _T("..") ) == 0 ) {\r
-      done = ! FindNextFile( find, &data );\r
-      continue;\r
-    }\r
+       while (!done)\r
+       {\r
+               if ( _tcscmp( data.cFileName, _T(".") ) == 0 ||\r
+                                _tcscmp( data.cFileName, _T("..") ) == 0 ) {\r
+                       done = ! FindNextFile( find, &data );\r
+                       continue;\r
+               }\r
 \r
-    StrT_cpy( m->FileName,\r
-      sizeof(m->AbsPathMem) - ( (char*)m->FileName - (char*)m->AbsPathMem ),\r
-      data.cFileName );\r
-    m->FileAttributes = data.dwFileAttributes;\r
+               StrT_cpy( m->FileName,\r
+                       sizeof(m->AbsPathMem) - ( (char*)m->FileName - (char*)m->AbsPathMem ),\r
+                       data.cFileName );\r
+               m->FileAttributes = data.dwFileAttributes;\r
 \r
-    if ( data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) {\r
-      TCHAR*  prev_fname = m->FileName;\r
+               if ( data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) {\r
+                       TCHAR*  prev_fname = m->FileName;\r
 \r
-      p = _tcschr( m->FileName, _T('\0') );\r
+                       p = _tcschr( m->FileName, _T('\0') );\r
 \r
-      IF( p >= m->AbsPathMem + (sizeof(m->AbsPathMem) / sizeof(TCHAR)) - 2 )goto err_fa;\r
-      *p = _T('\\');  *(p+1) = _T('\0');\r
-      m->FileName = p + 1;\r
+                       IF( p >= m->AbsPathMem + (sizeof(m->AbsPathMem) / sizeof(TCHAR)) - 2 )goto err_fa;\r
+                       *p = _T('\\');  *(p+1) = _T('\0');\r
+                       m->FileName = p + 1;\r
 \r
-      e= FileT_callByNestFind_sub( m ); IF(e)goto fin;  /* \8dÄ\8bN\8cÄ\82Ñ\8fo\82µ */\r
+                       e= FileT_callByNestFind_sub( m ); IF(e)goto fin;  /* \8dÄ\8bN\8cÄ\82Ñ\8fo\82µ */\r
 \r
-      m->FileName = prev_fname;\r
-    }\r
-    else {\r
-      e= m->CallbackFromNestFind( m ); IF(e)goto fin;\r
-    }\r
+                       m->FileName = prev_fname;\r
+               }\r
+               else {\r
+                       e= m->CallbackFromNestFind( m ); IF(e)goto fin;\r
+               }\r
 \r
-    done = ! FindNextFile( find, &data );\r
-  }\r
-  FindClose( find );\r
+               done = ! FindNextFile( find, &data );\r
+       }\r
+       FindClose( find );\r
 \r
 \r
-  /* Path \82É\8ew\92è\82µ\82½\83t\83H\83\8b\83_\82É\91Î\82µ\82Ä\83R\81[\83\8b\83o\83b\83N\82·\82é */\r
-  if ( m->Flags & FileT_FolderAfterFiles ) {\r
-    TCHAR*  step_path = m->StepPath;\r
-    TCHAR*  fname     = m->FileName;\r
+       /* Path \82É\8ew\92è\82µ\82½\83t\83H\83\8b\83_\82É\91Î\82µ\82Ä\83R\81[\83\8b\83o\83b\83N\82·\82é */\r
+       if ( m->Flags & FileT_FolderAfterFiles ) {\r
+               TCHAR*  step_path = m->StepPath;\r
+               TCHAR*  fname     = m->FileName;\r
 \r
-    *( m->FileName - 1 ) = _T('\0');\r
-    m->FileAttributes = FILE_ATTRIBUTE_DIRECTORY;\r
-    if ( ( *( m->StepPath - 1 ) == _T('\0') ) && ( m->StepPath > m->AbsPath ) ) {\r
-      m->StepPath = _T(".");\r
-    }\r
-    m->FileName = StrT_refFName( m->AbsPath );\r
+               *( m->FileName - 1 ) = _T('\0');\r
+               m->FileAttributes = FILE_ATTRIBUTE_DIRECTORY;\r
+               if ( ( *( m->StepPath - 1 ) == _T('\0') ) && ( m->StepPath > m->AbsPath ) ) {\r
+                       m->StepPath = _T(".");\r
+               }\r
+               m->FileName = StrT_refFName( m->AbsPath );\r
 \r
-    e= m->CallbackFromNestFind( m ); IF(e)goto fin;\r
+               e= m->CallbackFromNestFind( m ); IF(e)goto fin;\r
 \r
-    m->StepPath = step_path;\r
-    m->FileName = fname;\r
-  }\r
+               m->StepPath = step_path;\r
+               m->FileName = fname;\r
+       }\r
 \r
-  e=0;\r
+       e=0;\r
 fin:\r
-  return  e;\r
-err_fa: e= E_FewArray; goto fin;\r
+       return  e;\r
+err_fa: e= E_FEW_ARRAY; goto fin;\r
 }\r
 \r
 \r
@@ -653,32 +653,36 @@ err_fa: e= E_FewArray; goto fin;
 ************************************************************************/\r
 int  FileT_openForRead( FILE** out_pFile, const TCHAR* Path )\r
 {\r
-  errno_t  en;\r
+       errno_t  en;\r
 \r
-  assert( Locale_isInited() );\r
+       assert( Locale_isInited() );\r
 \r
-  #if DEBUGTOOLS_USES\r
-    { int e= Debug_onOpen( Path ); if(e) return e; }\r
-  #endif\r
+       #if DEBUGTOOLS_USES\r
+               { int e= Debug_onOpen( Path ); if(e) return e; }\r
+       #endif\r
 \r
-  en = _tfopen_s( out_pFile, Path, _T("r")_T(fopen_ccs) );\r
-  if ( en == 2 ) {\r
-    _tprintf( _T("not found \"%s\"\n"), Path );\r
+       en = _tfopen_s( out_pFile, Path, _T("r")_T(fopen_ccs) );\r
+       if ( en == ENOENT ) {\r
+               _tprintf( _T("not found \"%s\"\n"), Path );\r
 \r
-    #ifndef UNDER_CE\r
-    {\r
-      TCHAR  cwd[512];\r
+               #ifndef UNDER_CE\r
+               {\r
+                       TCHAR  cwd[512];\r
 \r
-      if ( _tgetcwd( cwd, _countof(cwd) ) != NULL )\r
-        _tprintf( _T("current = \"%s\"\n"), cwd );\r
-    }\r
-    #endif\r
+                       if ( _tgetcwd( cwd, _countof(cwd) ) != NULL )\r
+                               _tprintf( _T("current = \"%s\"\n"), cwd );\r
+               }\r
+               #endif\r
 \r
-    return  E_NotFoundSymbol;\r
-  }\r
-  IF(en)return  E_Others;\r
+               return  E_NOT_FOUND_SYMBOL;\r
+       }\r
+       if ( en == EACCES ) {\r
+               _tprintf( _T("access denied \"%s\"\n"), Path );\r
+               return  E_ACCESS_DENIED;\r
+       }\r
+       IF(en)return  E_OTHERS;\r
 \r
-  return  0;\r
+       return  0;\r
 }\r
 \r
 \r
@@ -694,7 +698,7 @@ int  FileT_openForWrite( FILE** out_pFile, const TCHAR* Path, int Flags )
        BOOL     b;\r
        int      retry_count;\r
 \r
-       IF_D( ! Locale_isInited() )  return  E_NotInitGlobal;\r
+       IF_D( ! Locale_isInited() )  return  E_NOT_INIT_GLOBAL;\r
 \r
        #if Uses_AppKey\r
                e= AppKey_addNewWritableFolder( Path ); IF(e)goto fin;\r
@@ -734,7 +738,7 @@ int  FileT_openForWrite( FILE** out_pFile, const TCHAR* Path, int Flags )
                        }\r
                        #endif\r
 \r
-                       e = E_NotFoundSymbol;\r
+                       e = E_NOT_FOUND_SYMBOL;\r
                        goto fin;\r
                }\r
        }\r
@@ -744,8 +748,8 @@ int  FileT_openForWrite( FILE** out_pFile, const TCHAR* Path, int Flags )
 fin:\r
        return  e;\r
 \r
-err:  e = E_Others;  goto fin;\r
-err_gt:  e = E_GetLastError;  goto fin;\r
+err:  e = E_OTHERS;  goto fin;\r
+err_gt:  e = SaveWindowsLastError();  goto fin;\r
 }\r
 \r
 \r
@@ -755,59 +759,81 @@ err_gt:  e = E_GetLastError;  goto fin;
 ************************************************************************/\r
 int  FileT_close( FILE* File, int e )\r
 {\r
-  if ( File != NULL ) {\r
-    int r = fclose( File );\r
-    IF(r&&!e)e=E_Errno;\r
-  }\r
-  return e;\r
+       if ( File != NULL ) {\r
+               int r = fclose( File );\r
+               IF(r&&!e)e=E_ERRNO;\r
+       }\r
+       return e;\r
 }\r
 \r
 \r
 \r
  \r
 /***********************************************************************\r
+  <<< [FileT_writePart] >>> \r
+************************************************************************/\r
+errnum_t  FileT_writePart( FILE* File, TCHAR* Start, TCHAR* Over )\r
+{\r
+       errnum_t  e;\r
+       TCHAR     back_char;\r
+       int       r;\r
+\r
+       back_char = *Over;\r
+       *Over = _T('\0');\r
+\r
+       r= _ftprintf_s( File, _T("%s"), Start ); IF(r<0){ e=E_ERRNO; goto fin; }\r
+\r
+       e=0;\r
+fin:\r
+       *Over = back_char;\r
+       return  e;\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
   <<< [FileT_mkdir] >>> \r
 ************************************************************************/\r
 int  FileT_mkdir( const TCHAR* Path )\r
 {\r
-  int    e;\r
-  DWORD  r;\r
-  TCHAR* p;\r
-  BOOL   b;\r
-  int    n_folder = 0;\r
-  TCHAR  path2[MAX_PATH];\r
+       int    e;\r
+       DWORD  r;\r
+       TCHAR* p = (TCHAR*) DUMMY_INITIAL_VALUE;\r
+       BOOL   b;\r
+       int    n_folder = 0;\r
+       TCHAR  path2[MAX_PATH];\r
 \r
 \r
-  e= StrT_getAbsPath( path2, sizeof(path2), Path, NULL ); IF(e)goto fin;\r
-  #if Uses_AppKey\r
-    e= AppKey_addNewWritableFolder( path2 ); IF(e)goto fin;\r
-  #endif\r
+       e= StrT_getAbsPath( path2, sizeof(path2), Path, NULL ); IF(e)goto fin;\r
+       #if Uses_AppKey\r
+               e= AppKey_addNewWritableFolder( path2 ); IF(e)goto fin;\r
+       #endif\r
 \r
 \r
-  //=== \91\8dÝ\82·\82é\83t\83H\83\8b\83_\82ð\92T\82·\r
-  for (;;) {\r
-    r = GetFileAttributes( path2 );\r
-    if ( r != (DWORD)-1 ) break;  // "C:" \82à\83t\83H\83\8b\83_\82Æ\94»\92è\82³\82ê\82é\r
+       //=== \91\8dÝ\82·\82é\83t\83H\83\8b\83_\82ð\92T\82·\r
+       for (;;) {\r
+               r = GetFileAttributes( path2 );\r
+               if ( r != (DWORD)-1 ) break;  // "C:" \82à\83t\83H\83\8b\83_\82Æ\94»\92è\82³\82ê\82é\r
 \r
-    p = StrT_refFName( path2 ) - 1;  // \90â\91Î\83p\83X\82È\82Ì\82Å\95K\82¸ *p=='\\'\r
-    *p = _T('\0');\r
-    n_folder ++;\r
-  }\r
-  IF ( ! (r & FILE_ATTRIBUTE_DIRECTORY) ) goto err;  // \83t\83@\83C\83\8b\82È\82ç\83G\83\89\81[\r
+               p = StrT_refFName( path2 ) - 1;  // \90â\91Î\83p\83X\82È\82Ì\82Å\95K\82¸ *p=='\\'\r
+               *p = _T('\0');\r
+               n_folder ++;\r
+       }\r
+       IF ( ! (r & FILE_ATTRIBUTE_DIRECTORY) ) goto err;  // \83t\83@\83C\83\8b\82È\82ç\83G\83\89\81[\r
 \r
 \r
-  //=== \83t\83H\83\8b\83_\82ð\8dì\90¬\82·\82é\r
-  for ( ;  n_folder > 0;  n_folder -- ) {\r
-    *p = _T('\\');\r
-    b= CreateDirectory( path2, NULL ); IF(!b)goto err;\r
-    p = _tcschr( p, _T('\0') );\r
-  }\r
+       //=== \83t\83H\83\8b\83_\82ð\8dì\90¬\82·\82é\r
+       for ( ;  n_folder > 0;  n_folder -- ) {\r
+               *p = _T('\\');\r
+               b= CreateDirectory( path2, NULL ); IF(!b)goto err;\r
+               p = _tcschr( p, _T('\0') );\r
+       }\r
 \r
-  e=0;\r
+       e=0;\r
 fin:\r
-  return  e;\r
+       return  e;\r
 \r
-err:  e = E_Others;  goto fin;\r
+err:  e = E_OTHERS;  goto fin;\r
 }\r
 \r
 \r
@@ -820,96 +846,96 @@ int  FileT_copy_sub( FileT_CallByNestFindData* m );
 \r
 int  FileT_copy( const TCHAR* SrcPath, const TCHAR* DstPath )\r
 {\r
-  const TCHAR*  p_last;\r
-  int    e;\r
-  BOOL   b;\r
-  TCHAR  path[MAX_PATH*4];\r
-\r
+       const TCHAR*  p_last;\r
+       int    e;\r
+       BOOL   b;\r
+       TCHAR  path[MAX_PATH*4];\r
 \r
-  #if Uses_AppKey\r
-    e= AppKey_addNewWritableFolder( DstPath ); IF(e)goto fin;\r
-  #endif\r
 \r
-  p_last = _tcschr( SrcPath, _T('\0') );\r
-  IF_D( p_last <= SrcPath + 1 )goto err_ni;\r
+       #if Uses_AppKey\r
+               e= AppKey_addNewWritableFolder( DstPath ); IF(e)goto fin;\r
+       #endif\r
 \r
+       p_last = _tcschr( SrcPath, _T('\0') );\r
+       IF_D( p_last <= SrcPath + 1 )goto err_ni;\r
 \r
-  //=== \83t\83H\83\8b\83_\82ð\83R\83s\81[\82·\82é\r
-  if ( *(p_last - 1) == _T('*') ) {\r
-    IF_D( *(p_last - 2) != _T('\\') ) goto err_ni;\r
 \r
-    e= StrT_getParentAbsPath( path, sizeof(path), SrcPath, NULL ); IF(e)goto fin;\r
-    IF_D( ! FileT_isDir( path ) )goto err_nf;\r
+       //=== \83t\83H\83\8b\83_\82ð\83R\83s\81[\82·\82é\r
+       if ( *(p_last - 1) == _T('*') ) {\r
+               IF_D( *(p_last - 2) != _T('\\') ) goto err_ni;\r
 \r
-    e= FileT_callByNestFind( path, FileT_FolderBeforeFiles, (void*) DstPath, (FuncType) FileT_copy_sub );\r
-    IF(e)goto fin;\r
-  }\r
+               e= StrT_getParentAbsPath( path, sizeof(path), SrcPath, NULL ); IF(e)goto fin;\r
+               IF_D( ! FileT_isDir( path ) )goto err_nf;\r
 \r
+               e= FileT_callByNestFind( path, FileT_FolderBeforeFiles, (void*) DstPath, (FuncType) FileT_copy_sub );\r
+               IF(e)goto fin;\r
+       }\r
 \r
-  //=== \83t\83@\83C\83\8b\82ð\83R\83s\81[\82·\82é\r
-  else {\r
-    IF_D( _tcschr( SrcPath, _T('*') ) != NULL )goto err_ni;\r
-    IF_D( ! FileT_isFile( SrcPath ) ) goto err_nf;\r
 \r
-    b= CopyFile( SrcPath, DstPath, FALSE );\r
-    if (!b) {\r
-      if ( FileT_isDir( DstPath ) ) {\r
-        e= stprintf_r( path, sizeof(path), _T("%s\\%s"), DstPath, StrT_refFName( SrcPath ) ); IF(e)goto fin;\r
-        b= CopyFile( SrcPath, path, FALSE ); IF(!b)goto err_gt;\r
-      }\r
-      else {\r
-        int  ee;\r
-\r
-        p_last = _tcschr( DstPath, _T('\0') ) - 1;\r
-        IF_D( p_last < DstPath )goto err;\r
-        if ( *p_last == _T('\\') ) {\r
-          ee= FileT_mkdir( DstPath ); IF(ee)goto fin;\r
-          e= stprintf_r( path, sizeof(path), _T("%s%s"), DstPath, StrT_refFName( SrcPath ) ); IF(e)goto fin;\r
-          b= CopyFile( SrcPath, path, FALSE ); IF(!b)goto err_gt;\r
-        }\r
-        else {\r
-          e = E_AccessDenied;\r
-          ee= StrT_getParentAbsPath( path, sizeof(path), DstPath, NULL ); IF(ee)goto fin;\r
-          ee= FileT_mkdir( path ); IF(ee)goto fin;\r
-          b= CopyFile( SrcPath, DstPath, FALSE ); IF(!b)goto err_gt;\r
-        }\r
-      }\r
-    }\r
-  }\r
+       //=== \83t\83@\83C\83\8b\82ð\83R\83s\81[\82·\82é\r
+       else {\r
+               IF_D( _tcschr( SrcPath, _T('*') ) != NULL )goto err_ni;\r
+               IF_D( ! FileT_isFile( SrcPath ) ) goto err_nf;\r
+\r
+               b= CopyFile( SrcPath, DstPath, FALSE );\r
+               if (!b) {\r
+                       if ( FileT_isDir( DstPath ) ) {\r
+                               e= stprintf_r( path, sizeof(path), _T("%s\\%s"), DstPath, StrT_refFName( SrcPath ) ); IF(e)goto fin;\r
+                               b= CopyFile( SrcPath, path, FALSE ); IF(!b)goto err_gt;\r
+                       }\r
+                       else {\r
+                               int  ee;\r
+\r
+                               p_last = _tcschr( DstPath, _T('\0') ) - 1;\r
+                               IF_D( p_last < DstPath )goto err;\r
+                               if ( *p_last == _T('\\') ) {\r
+                                       ee= FileT_mkdir( DstPath ); IF(ee)goto fin;\r
+                                       e= stprintf_r( path, sizeof(path), _T("%s%s"), DstPath, StrT_refFName( SrcPath ) ); IF(e)goto fin;\r
+                                       b= CopyFile( SrcPath, path, FALSE ); IF(!b)goto err_gt;\r
+                               }\r
+                               else {\r
+                                       e = E_ACCESS_DENIED;\r
+                                       ee= StrT_getParentAbsPath( path, sizeof(path), DstPath, NULL ); IF(ee)goto fin;\r
+                                       ee= FileT_mkdir( path ); IF(ee)goto fin;\r
+                                       b= CopyFile( SrcPath, DstPath, FALSE ); IF(!b)goto err_gt;\r
+                               }\r
+                       }\r
+               }\r
+       }\r
 \r
-  e=0;\r
+       e=0;\r
 fin:\r
-  return  e;\r
+       return  e;\r
 \r
-err_ni:  e = E_NotImplementYet;  goto fin;\r
-err_nf:  e = E_PathNotFound;  goto fin;\r
-err_gt:  e = E_GetLastError;  goto fin;\r
-err:  e = E_Others;  goto fin;\r
+err_ni:  e = E_NOT_IMPLEMENT_YET;  goto fin;\r
+err_nf:  e = E_PATH_NOT_FOUND;  goto fin;\r
+err_gt:  e = SaveWindowsLastError();  goto fin;\r
+err:  e = E_OTHERS;  goto fin;\r
 }\r
 \r
 \r
 int  FileT_copy_sub( FileT_CallByNestFindData* m )\r
 {\r
-  const  TCHAR*  DstPath = (const TCHAR*) m->CallerArgument;\r
-  int    e;\r
-  BOOL   b;\r
-  TCHAR  path[MAX_PATH*4];\r
+       const  TCHAR*  DstPath = (const TCHAR*) m->CallerArgument;\r
+       int    e;\r
+       BOOL   b;\r
+       TCHAR  path[MAX_PATH*4];\r
 \r
-  e= stprintf_r( path, sizeof(path), _T("%s\\%s"), DstPath, m->StepPath ); IF(e)goto fin;\r
+       e= stprintf_r( path, sizeof(path), _T("%s\\%s"), DstPath, m->StepPath ); IF(e)goto fin;\r
 \r
-  if ( m->FileAttributes & FILE_ATTRIBUTE_DIRECTORY ) {\r
-    if ( ! FileT_isDir( path ) )\r
-      { b= CreateDirectory( path, NULL ); IF(!b)goto err_gt; }\r
-  }\r
-  else {\r
-    b= CopyFile( m->AbsPath, path, FALSE ); IF(!b)goto err_gt;\r
-  }\r
+       if ( m->FileAttributes & FILE_ATTRIBUTE_DIRECTORY ) {\r
+               if ( ! FileT_isDir( path ) )\r
+                       { b= CreateDirectory( path, NULL ); IF(!b)goto err_gt; }\r
+       }\r
+       else {\r
+               b= CopyFile( m->AbsPath, path, FALSE ); IF(!b)goto err_gt;\r
+       }\r
 \r
-  e=0;\r
+       e=0;\r
 fin:\r
-  return  e;\r
+       return  e;\r
 \r
-err_gt:  e = E_GetLastError;  goto fin;\r
+err_gt:  e = SaveWindowsLastError();  goto fin;\r
 }\r
 \r
 \r
@@ -922,137 +948,136 @@ int  FileT_del_sub( FileT_CallByNestFindData* m );
 \r
 int  FileT_del( const TCHAR* Path )\r
 {\r
-  int    e;\r
-  DWORD  r;\r
-  TCHAR  abs_path[MAX_PATH];\r
+       int    e;\r
+       DWORD  r;\r
+       TCHAR  abs_path[MAX_PATH];\r
 \r
-  e= StrT_getAbsPath( abs_path, sizeof(abs_path), Path, NULL ); IF(e)goto fin;\r
-  #if Uses_AppKey\r
-    e= AppKey_addNewWritableFolder( abs_path ); IF(e)goto fin;\r
-  #endif\r
+       e= StrT_getAbsPath( abs_path, sizeof(abs_path), Path, NULL ); IF(e)goto fin;\r
+       #if Uses_AppKey\r
+               e= AppKey_addNewWritableFolder( abs_path ); IF(e)goto fin;\r
+       #endif\r
 \r
-  r= GetFileAttributes( Path );\r
-  if ( r != (DWORD)-1 ) {\r
-    if ( r & FILE_ATTRIBUTE_DIRECTORY ) {\r
-      e= FileT_callByNestFind( Path, FileT_FolderAfterFiles, NULL, (FuncType) FileT_del_sub );\r
-    }\r
-    else {\r
-      BOOL  b= DeleteFile( Path ); IF(!b)goto err_gt;\r
-    }\r
-  }\r
-  IF_D( FileT_isExist( Path ) )goto err_ad;\r
+       r= GetFileAttributes( Path );\r
+       if ( r != (DWORD)-1 ) {\r
+               if ( r & FILE_ATTRIBUTE_DIRECTORY ) {\r
+                       e= FileT_callByNestFind( Path, FileT_FolderAfterFiles, NULL, (FuncType) FileT_del_sub );\r
+               }\r
+               else {\r
+                       BOOL  b= DeleteFile( Path ); IF(!b)goto err_gt;\r
+               }\r
+       }\r
+       IF_D( FileT_isExist( Path ) )goto err_ad;\r
 \r
-  e=0;\r
+       e=0;\r
 fin:\r
-  return  e;\r
+       return  e;\r
 \r
-err_gt:  e = E_GetLastError;  goto fin;\r
-err_ad:  e = E_AccessDenied;  goto fin;\r
+err_gt:  e = SaveWindowsLastError();  goto fin;\r
+err_ad:  e = E_ACCESS_DENIED;  goto fin;\r
 }\r
 \r
 \r
 int  FileT_del_sub( FileT_CallByNestFindData* m )\r
 {\r
-  int   e;\r
-  BOOL  b;\r
+       int   e;\r
+       BOOL  b;\r
 \r
-  if ( m->FileAttributes & FILE_ATTRIBUTE_DIRECTORY ) {\r
-    b= RemoveDirectory( m->AbsPath ); IF(!b)goto err_gt;\r
-  }\r
-  else {\r
-    b= DeleteFile( m->AbsPath ); IF(!b)goto err_gt;\r
-  }\r
+       if ( m->FileAttributes & FILE_ATTRIBUTE_DIRECTORY ) {\r
+               b= RemoveDirectory( m->AbsPath ); IF(!b)goto err_gt;\r
+       }\r
+       else {\r
+               b= DeleteFile( m->AbsPath ); IF(!b)goto err_gt;\r
+       }\r
 \r
-  e=0;\r
+       e=0;\r
 fin:\r
-  return  e;\r
+       return  e;\r
 \r
-err_gt:  e = E_GetLastError;  goto fin;\r
+err_gt:  e = SaveWindowsLastError();  goto fin;\r
 }\r
  \r
 /***********************************************************************\r
   <<< [AppKey] >>> \r
 ************************************************************************/\r
-int   AppKey_create( AppKey** out_m );\r
-bool  AppKey_isSame( AppKey* m );\r
-void  Writables_init_const( Writables* m );\r
-int   Writables_init( Writables* m, AppKey* Key );\r
-int   Writables_finish( Writables* m, int e );\r
-int   Writables_isInited( Writables* m );\r
-int   Writables_clearPaths( Writables* m );\r
-int   Writables_create( Writables** out_m, AppKey* Key );\r
-int   Writables_copyToConst( Writables* To, Writables* From );\r
+static errnum_t  AppKey_create( AppKey** out_m );\r
+static bool      AppKey_isSame( AppKey* m );\r
+static void      Writables_initConst( Writables* m );\r
+static errnum_t  Writables_init( Writables* m, AppKey* Key );\r
+static errnum_t  Writables_finish( Writables* m, int e );\r
+static bool      Writables_isInited( Writables* m );\r
+static errnum_t  Writables_clearPaths( Writables* m );\r
+static errnum_t  Writables_create( Writables** out_m, AppKey* Key );\r
+static errnum_t  Writables_copyToConst( Writables* To, Writables* From );\r
 \r
 \r
 typedef struct _CurrentWritables  CurrentWritables;\r
 struct _CurrentWritables {\r
-  Writables  m_CurrentWritables;\r
-  TCHAR*   m_ProgramFiles;  size_t  m_ProgramFiles_Len;\r
-  TCHAR*   m_windir;        size_t  m_windir_Len;\r
-  TCHAR*   m_APPDATA;       size_t  m_APPDATA_Len;\r
-  TCHAR*   m_LOCALAPPDATA;  size_t  m_LOCALAPPDATA_Len;\r
+       Writables  m_CurrentWritables;\r
+       TCHAR*   m_ProgramFiles;  size_t  m_ProgramFiles_Len;\r
+       TCHAR*   m_windir;        size_t  m_windir_Len;\r
+       TCHAR*   m_APPDATA;       size_t  m_APPDATA_Len;\r
+       TCHAR*   m_LOCALAPPDATA;  size_t  m_LOCALAPPDATA_Len;\r
 };\r
-void  CurrentWritables_init_const( CurrentWritables* m );\r
-int   CurrentWritables_init( CurrentWritables* m );\r
-int   CurrentWritables_finish( CurrentWritables* m, int e );\r
-int   CurrentWritables_askFileAccess( CurrentWritables* m, const TCHAR* AbsPath );\r
+static void      CurrentWritables_initConst( CurrentWritables* m );\r
+static errnum_t  CurrentWritables_init( CurrentWritables* m );\r
+static errnum_t  CurrentWritables_finish( CurrentWritables* m, int e );\r
+static errnum_t  CurrentWritables_askFileAccess( CurrentWritables* m, const TCHAR* AbsPath );\r
 \r
 \r
 //////////////////////////////\r
 \r
-\r
 static  AppKey   g_AppKey;\r
 static  AppKey*  g_AppKeyPrivate;\r
 \r
 // under g_AppKey\r
- Writables  g_DefaultWritables;\r
- Writables  g_CurrentWritables; // public\r
- static CurrentWritables  g_CurrentWritablesPrivate;\r
+Writables  g_DefaultWritables;\r
+Writables  g_CurrentWritables; // public\r
+static CurrentWritables  g_CurrentWritablesPrivate;\r
 \r
 \r
-static int  AppKey_create( AppKey** out_m )\r
+static errnum_t  AppKey_create( AppKey** out_m )\r
 {\r
-  int  e;\r
+       errnum_t  e;\r
 \r
-  IF( g_AppKeyPrivate != NULL ) { e=1; goto fin; }\r
-    // AppKey_newWritable \82Ì in_out_m = NULL \82Ì\82Æ\82«\82Í\81A2\89ñ\8cÄ\82Ñ\8fo\82·\82±\82Æ\82Í\82Å\82«\82Ü\82¹\82ñ\81B\r
+       IF( g_AppKeyPrivate != NULL ) { e=1; goto fin; }\r
+               // AppKey_newWritable \82Ì in_out_m = NULL \82Ì\82Æ\82«\82Í\81A2\89ñ\8cÄ\82Ñ\8fo\82·\82±\82Æ\82Í\82Å\82«\82Ü\82¹\82ñ\81B\r
 \r
-  Writables_init_const( &g_DefaultWritables );\r
-  CurrentWritables_init_const( &g_CurrentWritablesPrivate );\r
+       Writables_initConst( &g_DefaultWritables );\r
+       CurrentWritables_initConst( &g_CurrentWritablesPrivate );\r
 \r
-  e= CurrentWritables_init( &g_CurrentWritablesPrivate ); IF(e)goto fin;\r
-  e= Writables_copyToConst( &g_CurrentWritables, NULL ); IF(e)goto fin;\r
+       e= CurrentWritables_init( &g_CurrentWritablesPrivate ); IF(e)goto fin;\r
+       e= Writables_copyToConst( &g_CurrentWritables, NULL ); IF(e)goto fin;\r
 \r
-  *out_m = &g_AppKey;\r
-  g_AppKeyPrivate = &g_AppKey;\r
+       *out_m = &g_AppKey;\r
+       g_AppKeyPrivate = &g_AppKey;\r
 \r
-  e=0;\r
+       e=0;\r
 fin:\r
-  return  e;\r
+       return  e;\r
 }\r
 \r
 \r
 static bool  AppKey_isSame( AppKey* m )\r
 {\r
-  return  ( m == g_AppKeyPrivate );\r
+       return  ( m == g_AppKeyPrivate );\r
 }\r
 \r
 \r
 void  AppKey_initGlobal_const()\r
 {\r
-  Writables_init_const( &g_DefaultWritables );\r
+       Writables_initConst( &g_DefaultWritables );\r
 }\r
 \r
 \r
-int  AppKey_finishGlobal( int e )\r
+errnum_t  AppKey_finishGlobal( errnum_t e )\r
 {\r
-  int ee;\r
+       errnum_t  ee;\r
 \r
-  e= Writables_finish( &g_DefaultWritables, e );\r
-  e= CurrentWritables_finish( &g_CurrentWritablesPrivate, e );\r
-  ee= Writables_copyToConst( &g_CurrentWritables, NULL ); IF(ee&&!e)e=ee;\r
+       e= Writables_finish( &g_DefaultWritables, e );\r
+       e= CurrentWritables_finish( &g_CurrentWritablesPrivate, e );\r
+       ee= Writables_copyToConst( &g_CurrentWritables, NULL ); IF(ee&&!e)e=ee;\r
 \r
-  return  e;\r
+       return  e;\r
 }\r
 \r
 \r
@@ -1060,94 +1085,94 @@ int  AppKey_finishGlobal( int e )
 /***********************************************************************\r
   <<< [AppKey_newWritable] >>> \r
 ************************************************************************/\r
-int  AppKey_newWritable( AppKey** in_out_m,  Writables** out_Writable,  ... )\r
+errnum_t  AppKey_newWritable( AppKey** in_out_m,  Writables** out_Writable,  ... )\r
 {\r
-  int  e;\r
-  AppKey*  m = NULL;\r
-  Writables*  wr = NULL;\r
+       errnum_t    e;\r
+       AppKey*     m = NULL;\r
+       Writables*  wr = NULL;\r
  #if Uses_OutMallocIDTool\r
-  bool  is_prev_out_malloc;\r
+       bool  is_prev_out_malloc;\r
 \r
-  is_prev_out_malloc = OutMallocID_setEnable( false );\r
+       is_prev_out_malloc = OutMallocID_setEnable( false );\r
  #endif\r
 \r
 \r
-  //=== AppKey* m \82ð\97L\8cø\82É\82·\82é\r
-  if ( in_out_m == NULL ) {  // \8d¡\89ñ\82Ì\8aÖ\90\94\82Ì\92\86\82¾\82¯\82Å\8eQ\8fÆ\82·\82é\r
-    e= AppKey_create( &m ); IF(e)goto resume;\r
-  }\r
-  else if ( *in_out_m == NULL ) {  // \82P\89ñ\96Ú\82É\96{\8aÖ\90\94\82ð\8cÄ\82Ñ\8fo\82µ\82½\83\82\83W\83\85\81[\83\8b\82É\93n\82·\r
-    e= AppKey_create( &m ); IF(e)goto resume;\r
-    *in_out_m = m;\r
-  }\r
-  else {  // \96{\8aÖ\90\94\82ð\8cÄ\82Ñ\8fo\82µ\82½\83\82\83W\83\85\81[\83\8b\82©\82ç\93n\82Á\82½\82à\82Ì\82ð\8eg\82¤\r
-    m = *in_out_m;\r
-  }\r
+       //=== AppKey* m \82ð\97L\8cø\82É\82·\82é\r
+       if ( in_out_m == NULL ) {  // \8d¡\89ñ\82Ì\8aÖ\90\94\82Ì\92\86\82¾\82¯\82Å\8eQ\8fÆ\82·\82é\r
+               e= AppKey_create( &m ); IF(e)goto resume;\r
+       }\r
+       else if ( *in_out_m == NULL ) {  // \82P\89ñ\96Ú\82É\96{\8aÖ\90\94\82ð\8cÄ\82Ñ\8fo\82µ\82½\83\82\83W\83\85\81[\83\8b\82É\93n\82·\r
+               e= AppKey_create( &m ); IF(e)goto resume;\r
+               *in_out_m = m;\r
+       }\r
+       else {  // \96{\8aÖ\90\94\82ð\8cÄ\82Ñ\8fo\82µ\82½\83\82\83W\83\85\81[\83\8b\82©\82ç\93n\82Á\82½\82à\82Ì\82ð\8eg\82¤\r
+               m = *in_out_m;\r
+       }\r
 \r
 \r
-  //=== \90³\8bK\82Ì AppKey \82©\83`\83F\83b\83N\82·\82é\r
-  IF( ! AppKey_isSame( m ) )goto err;\r
+       //=== \90³\8bK\82Ì AppKey \82©\83`\83F\83b\83N\82·\82é\r
+       IF( ! AppKey_isSame( m ) )goto err;\r
 \r
 \r
-  //=== Writable \82ð\90\90¬\82·\82é\r
-  if ( out_Writable == NULL ) {\r
-    wr = &g_DefaultWritables;\r
-    e= Writables_finish( wr, 0 ); IF(e)goto resume;\r
-    e= Writables_init( wr, m ); IF(e)goto resume;\r
-  }\r
-  else {\r
-    e= Writables_create( &wr, m ); IF(e)goto resume;\r
-    *out_Writable = wr;\r
-  }\r
+       //=== Writable \82ð\90\90¬\82·\82é\r
+       if ( out_Writable == NULL ) {\r
+               wr = &g_DefaultWritables;\r
+               e= Writables_finish( wr, 0 ); IF(e)goto resume;\r
+               e= Writables_init( wr, m ); IF(e)goto resume;\r
+       }\r
+       else {\r
+               e= Writables_create( &wr, m ); IF(e)goto resume;\r
+               *out_Writable = wr;\r
+       }\r
 \r
 \r
-  //=== Writable \82É\83p\83X\82ð\93o\98^\82·\82é\r
-  {\r
-    va_list  va;\r
-    TCHAR*   path;\r
-    int  i;\r
+       //=== Writable \82É\83p\83X\82ð\93o\98^\82·\82é\r
+       {\r
+               va_list  va;\r
+               TCHAR*   path;\r
+               int  i;\r
 \r
-    va_start( va, out_Writable );\r
-    for ( i=0; ; i++ ) {\r
-      path = va_arg( va, TCHAR* );\r
-      if ( path == NULL )  break;\r
-      IF( i == 5 ) goto err;  // \8dÅ\8cã\82Ì NULL \96Y\82ê\91Î\8dô\r
+               va_start( va, out_Writable );\r
+               for ( i=0; ; i++ ) {\r
+                       path = va_arg( va, TCHAR* );\r
+                       if ( path == NULL )  break;\r
+                       IF( i == 5 ) goto err;  // \8dÅ\8cã\82Ì NULL \96Y\82ê\91Î\8dô\r
 \r
-      e= Writables_add( wr, m, path ); IF(e)goto resume;\r
-    }\r
-    va_end( va );\r
-  }\r
-  #if defined(TempFile_get)\r
-  {\r
-    TempFile*   temp;\r
+                       e= Writables_add( wr, m, path ); IF(e)goto resume;\r
+               }\r
+               va_end( va );\r
+       }\r
+       #if defined(TempFile_get)\r
+       {\r
+               TempFile*   temp;\r
 \r
-    e= TempFile_get( &temp ); IF(e)goto resume;\r
-    e= Writables_add( wr, m, temp->TempPath ); IF(e)goto resume;\r
-  }\r
-  #endif\r
+               e= TempFile_get( &temp ); IF(e)goto resume;\r
+               e= Writables_add( wr, m, temp->TempPath ); IF(e)goto resume;\r
+       }\r
+       #endif\r
 \r
 \r
-  //=== \82·\82®\82É Writable \82ð\97L\8cø\82É\82·\82é\r
-  if ( out_Writable == NULL ) {\r
-    e= Writables_enable( wr ); IF(e)goto resume;\r
-  }\r
+       //=== \82·\82®\82É Writable \82ð\97L\8cø\82É\82·\82é\r
+       if ( out_Writable == NULL ) {\r
+               e= Writables_enable( wr ); IF(e)goto resume;\r
+       }\r
 \r
-  e=0;\r
+       e=0;\r
 fin:\r
-  #if Uses_OutMallocIDTool\r
-    OutMallocID_setEnable( is_prev_out_malloc );\r
-  #endif\r
-  return  e;\r
+       #if Uses_OutMallocIDTool\r
+               OutMallocID_setEnable( is_prev_out_malloc );\r
+       #endif\r
+       return  e;\r
 \r
-err:  e = E_Others;  goto resume;\r
+err:  e = E_OTHERS;  goto resume;\r
 resume:\r
-  if ( wr != NULL ) {\r
-    if ( out_Writable == NULL )\r
-      e= Writables_finish( wr, e );  // g_DefaultWritables\r
-    else\r
-      e= Writables_delete( wr, e );\r
-  }\r
-  goto fin;\r
+       if ( wr != NULL ) {\r
+               if ( out_Writable == NULL )\r
+                       e= Writables_finish( wr, e );  // g_DefaultWritables\r
+               else\r
+                       e= Writables_delete( wr, e );\r
+       }\r
+       goto fin;\r
 }\r
 \r
 \r
@@ -1156,116 +1181,124 @@ resume:
   <<< [AppKey_addNewWritableFolder] \83`\83F\83b\83N\82·\82é\81A\82Ü\82½\82Í\92Ç\89Á\82·\82é >>> \r
 \81i\92Ç\89Á\82Í\96¢\91Î\89\9e\81j\r
 ************************************************************************/\r
-int  AppKey_addNewWritableFolder( const TCHAR* Path )\r
+errnum_t  AppKey_addNewWritableFolder( const TCHAR* Path )\r
 {\r
-  int  e;\r
-  TCHAR**     pp;\r
-  TCHAR**     pp_over;\r
-  Writables*  wr = &g_CurrentWritablesPrivate.m_CurrentWritables;\r
-  size_t      path_len;\r
-  TCHAR       abs_path[MAX_PATH];\r
-\r
-  if ( g_AppKeyPrivate == NULL ) {\r
-    e= AppKey_newWritable( NULL, NULL, ".", NULL ); IF(e)goto fin;\r
-  }\r
+       errnum_t    e;\r
+       TCHAR**     pp;\r
+       TCHAR**     pp_over;\r
+       Writables*  wr = &g_CurrentWritablesPrivate.m_CurrentWritables;\r
+       size_t      path_len;\r
+       TCHAR       abs_path[MAX_PATH];\r
 \r
-  e= StrT_getAbsPath( abs_path, sizeof(abs_path), Path, NULL ); IF(e)goto fin;\r
+       if ( g_AppKeyPrivate == NULL ) {\r
+               e= AppKey_newWritable( NULL, NULL, ".", NULL ); IF(e){goto fin;}\r
+       }\r
 \r
-  pp_over = wr->m_Paths + wr->m_nPath;\r
-  for ( pp = wr->m_Paths;  ;  pp++ ) {\r
-    IF ( pp >= pp_over )goto err_wr;\r
-      // Path (abs_path) \82Í\81AAppKey_newWritable \82Å\8b\96\89Â\82³\82ê\82Ä\82¢\82Ü\82¹\82ñ\81B\r
-      // \83E\83H\83b\83`\81E\83E\83B\83\93\83h\83E\82É g_CurrentWritables.m_Paths,3 \82È\82Ç\82ð\93ü\97Í\82µ\82Ä\r
-      // \8b\96\89Â\82³\82ê\82Ä\82¢\82é\83p\83X\82ð\8am\94F\82µ\82Ä\82­\82¾\82³\82¢\81B\r
+       e= StrT_getAbsPath( abs_path, sizeof(abs_path), Path, NULL ); IF(e){goto fin;}\r
 \r
-    path_len = _tcslen( *pp );\r
-    if ( _tcsnicmp( *pp, abs_path, path_len ) == 0 &&\r
-         ( abs_path[ path_len ] == _T('\\') || abs_path[ path_len ] == _T('\0') ) )  break;\r
-  }\r
+       pp_over = wr->m_Paths + wr->m_nPath;\r
+       for ( pp = wr->m_Paths;  ;  pp++ ) {\r
+               IF ( pp >= pp_over ) { e=E_OUT_OF_WRITABLE; goto fin; }\r
+                       // Path (abs_path) \82Í\81AAppKey_newWritable \82Å\8b\96\89Â\82³\82ê\82Ä\82¢\82Ü\82¹\82ñ\81B\r
+                       // \83E\83H\83b\83`\81E\83E\83B\83\93\83h\83E\82É g_CurrentWritables.m_Paths,3 \82È\82Ç\82ð\93ü\97Í\82µ\82Ä\r
+                       // \8b\96\89Â\82³\82ê\82Ä\82¢\82é\83p\83X\82ð\8am\94F\82µ\82Ä\82­\82¾\82³\82¢\81B\r
 \r
-  e=0;\r
-fin:\r
-  return  e;\r
+               path_len = _tcslen( *pp );\r
+               if ( _tcsnicmp( *pp, abs_path, path_len ) == 0 &&\r
+                    ( abs_path[ path_len ] == _T('\\') || abs_path[ path_len ] == _T('\0') ) )  break;\r
+       }\r
 \r
-err_wr:  e = E_OutOfWritable;  goto fin;\r
+       e=0;\r
+fin:\r
+       return  e;\r
 }\r
 \r
 \r
\r
+/***********************************************************************\r
+  <<< [AppKey_checkWritable] >>> \r
+************************************************************************/\r
+errnum_t  AppKey_checkWritable( const TCHAR* Path )\r
+{\r
+       return  AppKey_addNewWritableFolder( Path );\r
+}\r
+\r
 \r
  \r
 /***********************************************************************\r
   <<< [Writables_init] >>> \r
 ************************************************************************/\r
-static void  Writables_init_const( Writables* m )\r
+static void  Writables_initConst( Writables* m )\r
 {\r
-  m->m_Paths = NULL;\r
-  m->m_nPath = -1;\r
+       m->m_Paths = NULL;\r
+       m->m_nPath = -1;\r
 }\r
 \r
 \r
-static int  Writables_init( Writables* m, AppKey* Key )\r
+static errnum_t  Writables_init( Writables* m, AppKey* Key )\r
 {\r
-  IF( ! AppKey_isSame( Key ) ) return E_Others;\r
+       IF( ! AppKey_isSame( Key ) ) return E_OTHERS;\r
 \r
-  m->m_Paths = NULL;\r
-  m->m_nPath = 0;\r
-  return  0;\r
+       m->m_Paths = NULL;\r
+       m->m_nPath = 0;\r
+       return  0;\r
 }\r
 \r
 \r
-static int  Writables_finish( Writables* m, int e )\r
+static errnum_t  Writables_finish( Writables* m, int e )\r
 {\r
-  int  ee;\r
+       errnum_t  ee;\r
 \r
-  ee= Writables_clearPaths( m ); IF(ee&&!e) e=ee;\r
-  m->m_nPath = -1;\r
-  return  e;\r
+       ee= Writables_clearPaths( m ); IF(ee&&!e) e=ee;\r
+       m->m_nPath = -1;\r
+       return  e;\r
 }\r
 \r
 \r
-static int  Writables_isInited( Writables* m )\r
+static bool  Writables_isInited( Writables* m )\r
 {\r
-  return  ( m->m_nPath != -1 );\r
+       return  ( m->m_nPath != -1 );\r
 }\r
 \r
 \r
-static int  Writables_clearPaths( Writables* m )\r
+static errnum_t  Writables_clearPaths( Writables* m )\r
 {\r
-  TCHAR**  p;\r
-  TCHAR**  p_over;\r
+       TCHAR**  p;\r
+       TCHAR**  p_over;\r
 \r
-  if ( m->m_Paths != NULL ) {\r
-    p_over = m->m_Paths + m->m_nPath;\r
-    for ( p = m->m_Paths;  p < p_over;  p++ ) {\r
-      free( *p );\r
-    }\r
-    free( m->m_Paths );  m->m_Paths = NULL;\r
-  }\r
-  m->m_nPath = 0;\r
-  return  0;\r
+       if ( m->m_Paths != NULL ) {\r
+               p_over = m->m_Paths + m->m_nPath;\r
+               for ( p = m->m_Paths;  p < p_over;  p++ ) {\r
+                       free( *p );\r
+               }\r
+               free( m->m_Paths );  m->m_Paths = NULL;\r
+       }\r
+       m->m_nPath = 0;\r
+       return  0;\r
 }\r
 \r
 \r
-static int  Writables_create( Writables** out_m, AppKey* Key )\r
+static errnum_t  Writables_create( Writables** out_m, AppKey* Key )\r
 {\r
-  Writables*  m;  int  e;\r
+       errnum_t    e;\r
+       Writables*  m;\r
 \r
-  m = (Writables*) malloc( sizeof(*m) ); IF(m==NULL)return E_FewMemory;\r
-  Writables_init_const( m );\r
-  e= Writables_init( m, Key ); IF(e)goto resume;\r
-  *out_m = m;\r
-  return  0;\r
+       m = (Writables*) malloc( sizeof(*m) ); IF(m==NULL)return E_FEW_MEMORY;\r
+       Writables_initConst( m );\r
+       e= Writables_init( m, Key ); IF(e)goto resume;\r
+       *out_m = m;\r
+       return  0;\r
 resume: Writables_delete( m, 0 ); free(m); return  e;\r
 }\r
 \r
 \r
-int  Writables_delete( Writables* m, int e )\r
+errnum_t  Writables_delete( Writables* m, errnum_t e )\r
 {\r
-  if ( m == NULL ) goto fin;\r
-  e= Writables_finish( m, e );\r
-  free( m );\r
+       if ( m == NULL ) goto fin;\r
+       e= Writables_finish( m, e );\r
+       free( m );\r
 fin:\r
-  return  e;\r
+       return  e;\r
 }\r
 \r
 \r
@@ -1275,63 +1308,63 @@ fin:
 ************************************************************************/\r
 int  Writables_add( Writables* m, AppKey* Key, TCHAR* Path )\r
 {\r
-  int  e;\r
-  TCHAR**   pp;\r
-  TCHAR*    p  = NULL;\r
-  size_t    path_size;\r
-  TCHAR     abs_path[MAX_PATH];\r
+       int  e;\r
+       TCHAR**   pp;\r
+       TCHAR*    p  = NULL;\r
+       size_t    path_size;\r
+       TCHAR     abs_path[MAX_PATH];\r
 \r
-  IF( ! AppKey_isSame( Key ) )goto err;\r
-  if ( Path[0] == _T('\0') ) return 0;\r
+       IF( ! AppKey_isSame( Key ) )goto err;\r
+       if ( Path[0] == _T('\0') ) return 0;\r
 \r
-  e= StrT_getAbsPath( abs_path, sizeof(abs_path), Path, NULL ); IF(e)goto resume;\r
+       e= StrT_getAbsPath( abs_path, sizeof(abs_path), Path, NULL ); IF(e)goto resume;\r
 \r
-  e= CurrentWritables_askFileAccess( &g_CurrentWritablesPrivate, abs_path ); IF(e)goto resume;\r
+       e= CurrentWritables_askFileAccess( &g_CurrentWritablesPrivate, abs_path ); IF(e)goto resume;\r
 \r
-  pp = (TCHAR**) realloc( m->m_Paths, (m->m_nPath + 1) * sizeof(TCHAR*) );\r
-  IF( pp == NULL ) goto err;\r
-  m->m_Paths = pp;\r
+       pp = (TCHAR**) realloc( m->m_Paths, (m->m_nPath + 1) * sizeof(TCHAR*) );\r
+       IF( pp == NULL ) goto err;\r
+       m->m_Paths = pp;\r
 \r
-  path_size = (_tcslen( abs_path ) + 1) * sizeof(TCHAR);\r
-  p = (TCHAR*) malloc( path_size );\r
-  m->m_Paths[ m->m_nPath ] = p;\r
-  IF( p == NULL )goto err;\r
+       path_size = (_tcslen( abs_path ) + 1) * sizeof(TCHAR);\r
+       p = (TCHAR*) malloc( path_size );\r
+       m->m_Paths[ m->m_nPath ] = p;\r
+       IF( p == NULL )goto err;\r
 \r
-  memcpy( p, abs_path, path_size );\r
-  if ( p[ path_size/sizeof(TCHAR) - 2 ] == _T('\\') )\r
-       p[ path_size/sizeof(TCHAR) - 2 ] =  _T('\0');\r
-  m->m_nPath ++;\r
+       memcpy( p, abs_path, path_size );\r
+       if ( p[ path_size/sizeof(TCHAR) - 2 ] == _T('\\') )\r
+                        p[ path_size/sizeof(TCHAR) - 2 ] =  _T('\0');\r
+       m->m_nPath ++;\r
 \r
-  e=0;\r
+       e=0;\r
 fin:\r
-  return  e;\r
+       return  e;\r
 \r
-err:  e = E_Others;  goto resume;\r
+err:  e = E_OTHERS;  goto resume;\r
 resume:\r
-  if ( p != NULL )  free( p );\r
-  goto fin;\r
+       if ( p != NULL )  free( p );\r
+       goto fin;\r
 }\r
 \r
 \r
 int  Writables_remove( Writables* m, TCHAR* Path )\r
 {\r
-  TCHAR**  pp;\r
-  TCHAR**  pp_over;\r
+       TCHAR**  pp;\r
+       TCHAR**  pp_over;\r
 \r
-  pp_over = m->m_Paths + m->m_nPath;\r
-  for ( pp = m->m_Paths;  ;  pp++ ) {\r
-    if ( pp >= pp_over )  return  0;\r
-    if ( _tcscmp( *pp, Path ) == 0 )  break;\r
-  }\r
-  free( *pp );\r
-  memmove( pp, pp+1, (char*)pp - (char*)pp_over - sizeof(TCHAR) );\r
-  m->m_nPath --;\r
+       pp_over = m->m_Paths + m->m_nPath;\r
+       for ( pp = m->m_Paths;  ;  pp++ ) {\r
+               if ( pp >= pp_over )  return  0;\r
+               if ( _tcscmp( *pp, Path ) == 0 )  break;\r
+       }\r
+       free( *pp );\r
+       memmove( pp, pp+1, (char*)pp - (char*)pp_over - sizeof(TCHAR) );\r
+       m->m_nPath --;\r
 \r
-  #if _DEBUG\r
-    *( pp_over - 1 ) = NULL;\r
-  #endif\r
+       #if _DEBUG\r
+               *( pp_over - 1 ) = NULL;\r
+       #endif\r
 \r
-  return  0;\r
+       return  0;\r
 }\r
 \r
 \r
@@ -1341,167 +1374,169 @@ int  Writables_remove( Writables* m, TCHAR* Path )
 ************************************************************************/\r
 int  Writables_enable( Writables* m )\r
 {\r
-  int  e;\r
+       int  e;\r
 \r
-  e= Writables_copyToConst( &g_CurrentWritablesPrivate.m_CurrentWritables, m ); IF(e)goto fin;\r
-  e= Writables_copyToConst( &g_CurrentWritables, &g_CurrentWritablesPrivate.m_CurrentWritables ); IF(e)goto fin;\r
+       e= Writables_copyToConst( &g_CurrentWritablesPrivate.m_CurrentWritables, m ); IF(e)goto fin;\r
+       e= Writables_copyToConst( &g_CurrentWritables, &g_CurrentWritablesPrivate.m_CurrentWritables ); IF(e)goto fin;\r
 \r
-  e=0;\r
+       e=0;\r
 fin:\r
-  return  e;\r
+       return  e;\r
 }\r
 \r
 \r
 int  Writables_disable( Writables* m, int e )\r
 {\r
-  int  ee;\r
+       int  ee;\r
 \r
-  ee= Writables_copyToConst( &g_CurrentWritablesPrivate.m_CurrentWritables, NULL ); IF(ee&&!e)goto fin;\r
-  ee= Writables_copyToConst( &g_CurrentWritables, NULL ); IF(ee&&!e)goto fin;\r
+       UNREFERENCED_VARIABLES( m );\r
 \r
-  e=0;\r
+       ee= Writables_copyToConst( &g_CurrentWritablesPrivate.m_CurrentWritables, NULL ); IF(ee&&!e)goto fin;\r
+       ee= Writables_copyToConst( &g_CurrentWritables, NULL ); IF(ee&&!e)goto fin;\r
+\r
+       e=0;\r
 fin:\r
-  return  e;\r
+       return  e;\r
 }\r
 \r
 \r
 static int  Writables_copyToConst( Writables* To, Writables* From )\r
 {\r
-  int  e;\r
-  TCHAR**  pp;\r
-  TCHAR**  pp_over;\r
-  TCHAR*   p2;\r
-  TCHAR**  pp2;\r
-  size_t   path_size;\r
-\r
-  if ( To->m_Paths != NULL ) {\r
-    free( To->m_Paths );\r
-    To->m_Paths = NULL;\r
-    To->m_nPath = 0;\r
-  }\r
+       int  e;\r
+       TCHAR**  pp;\r
+       TCHAR**  pp_over;\r
+       TCHAR*   p2;\r
+       TCHAR**  pp2;\r
+       size_t   path_size;\r
+\r
+       if ( To->m_Paths != NULL ) {\r
+               free( To->m_Paths );\r
+               To->m_Paths = NULL;\r
+               To->m_nPath = 0;\r
+       }\r
 \r
-  if ( From != NULL && From->m_nPath > 0 ) {\r
+       if ( From != NULL && From->m_nPath > 0 ) {\r
 \r
-    path_size = 0;\r
-    pp_over = From->m_Paths + From->m_nPath;\r
-    for ( pp = From->m_Paths;  pp < pp_over;  pp++ ) {\r
-      path_size += _tcslen( *pp ) + 1;\r
-    }\r
+               path_size = 0;\r
+               pp_over = From->m_Paths + From->m_nPath;\r
+               for ( pp = From->m_Paths;  pp < pp_over;  pp++ ) {\r
+                       path_size += _tcslen( *pp ) + 1;\r
+               }\r
 \r
-    path_size = From->m_nPath * sizeof(TCHAR*) + path_size * sizeof(TCHAR);\r
-    To->m_Paths = (TCHAR**) malloc( path_size );\r
-    IF( To->m_Paths == NULL ) goto err;\r
-\r
-    p2 = (TCHAR*)( (char*)To->m_Paths + From->m_nPath * sizeof(TCHAR*) );\r
-    pp2 = To->m_Paths;\r
-    for ( pp = From->m_Paths;  pp < pp_over;  pp++ ) {\r
-      *pp2 = p2;\r
-      path_size = (_tcslen( *pp ) + 1) * sizeof(TCHAR);\r
-      memcpy( p2, *pp, path_size );\r
-      p2 = (TCHAR*)( (char*)p2 + path_size );\r
-      pp2 ++;\r
-    }\r
-    To->m_nPath = From->m_nPath;\r
-  }\r
+               path_size = From->m_nPath * sizeof(TCHAR*) + path_size * sizeof(TCHAR);\r
+               To->m_Paths = (TCHAR**) malloc( path_size );\r
+               IF( To->m_Paths == NULL ) goto err;\r
+\r
+               p2 = (TCHAR*)( (char*)To->m_Paths + From->m_nPath * sizeof(TCHAR*) );\r
+               pp2 = To->m_Paths;\r
+               for ( pp = From->m_Paths;  pp < pp_over;  pp++ ) {\r
+                       *pp2 = p2;\r
+                       path_size = (_tcslen( *pp ) + 1) * sizeof(TCHAR);\r
+                       memcpy( p2, *pp, path_size );\r
+                       p2 = (TCHAR*)( (char*)p2 + path_size );\r
+                       pp2 ++;\r
+               }\r
+               To->m_nPath = From->m_nPath;\r
+       }\r
 \r
-  e=0;\r
+       e=0;\r
 fin:\r
-  return  e;\r
+       return  e;\r
 \r
-err:  e = E_Others;  goto fin;\r
+err:  e = E_OTHERS;  goto fin;\r
 }\r
 \r
  \r
 /***********************************************************************\r
   <<< [CurrentWritables] >>> \r
 ************************************************************************/\r
-static void  CurrentWritables_init_const( CurrentWritables* m )\r
+static void  CurrentWritables_initConst( CurrentWritables* m )\r
 {\r
-  Writables_init_const( &m->m_CurrentWritables );\r
-  m->m_ProgramFiles = NULL;\r
-  m->m_windir = NULL;\r
-  m->m_APPDATA = NULL;\r
-  m->m_LOCALAPPDATA = NULL;\r
+       Writables_initConst( &m->m_CurrentWritables );\r
+       m->m_ProgramFiles = NULL;\r
+       m->m_windir = NULL;\r
+       m->m_APPDATA = NULL;\r
+       m->m_LOCALAPPDATA = NULL;\r
 }\r
 \r
 \r
 static int  CurrentWritables_init( CurrentWritables* m )\r
 {\r
-  int    e;\r
+       int    e;\r
  #if Uses_OutMallocIDTool\r
-  bool  is_prev_out_malloc;\r
+       bool  is_prev_out_malloc;\r
 \r
-  is_prev_out_malloc = OutMallocID_setEnable( false );\r
+       is_prev_out_malloc = OutMallocID_setEnable( false );\r
  #endif\r
 \r
-  e= Writables_copyToConst( &m->m_CurrentWritables, NULL ); IF(e)goto fin;\r
+       e= Writables_copyToConst( &m->m_CurrentWritables, NULL ); IF(e)goto fin;\r
 \r
-  e= env_malloc( &m->m_ProgramFiles, &m->m_ProgramFiles_Len, _T("ProgramFiles") ); IF(e)goto fin;\r
-  e= env_malloc( &m->m_windir,       &m->m_windir_Len,       _T("windir") ); IF(e)goto fin;\r
-  e= env_malloc( &m->m_APPDATA,      &m->m_APPDATA_Len,      _T("APPDATA") ); IF(e)goto fin;\r
-  // e= env_malloc( &m->m_LOCALAPPDATA, &m->m_LOCALAPPDATA_Len, _T("LOCALAPPDATA") ); IF(e)goto fin;\r
+       e= env_malloc( &m->m_ProgramFiles, &m->m_ProgramFiles_Len, _T("ProgramFiles") ); IF(e)goto fin;\r
+       e= env_malloc( &m->m_windir,       &m->m_windir_Len,       _T("windir") ); IF(e)goto fin;\r
+       e= env_malloc( &m->m_APPDATA,      &m->m_APPDATA_Len,      _T("APPDATA") ); IF(e)goto fin;\r
+       // e= env_malloc( &m->m_LOCALAPPDATA, &m->m_LOCALAPPDATA_Len, _T("LOCALAPPDATA") ); IF(e)goto fin;\r
 \r
-  e=0;\r
+       e=0;\r
 fin:\r
  #if Uses_OutMallocIDTool\r
-  OutMallocID_setEnable( is_prev_out_malloc );\r
+       OutMallocID_setEnable( is_prev_out_malloc );\r
  #endif\r
-  return  e;\r
+       return  e;\r
 }\r
 \r
 \r
 static int  CurrentWritables_finish( CurrentWritables* m, int e )\r
 {\r
-  int  ee;\r
+       int  ee;\r
 \r
-  ee= Writables_copyToConst( &m->m_CurrentWritables, NULL ); IF(ee&&!e)e=ee;\r
+       ee= Writables_copyToConst( &m->m_CurrentWritables, NULL ); IF(ee&&!e)e=ee;\r
 \r
-  if ( m->m_ProgramFiles != NULL )  free( m->m_ProgramFiles );\r
-  if ( m->m_windir != NULL )        free( m->m_windir );\r
-  if ( m->m_APPDATA != NULL )       free( m->m_APPDATA );\r
-  if ( m->m_LOCALAPPDATA != NULL )  free( m->m_LOCALAPPDATA );\r
+       if ( m->m_ProgramFiles != NULL )  free( m->m_ProgramFiles );\r
+       if ( m->m_windir != NULL )        free( m->m_windir );\r
+       if ( m->m_APPDATA != NULL )       free( m->m_APPDATA );\r
+       if ( m->m_LOCALAPPDATA != NULL )  free( m->m_LOCALAPPDATA );\r
 \r
-  m->m_ProgramFiles = NULL;\r
-  m->m_windir = NULL;\r
-  m->m_APPDATA = NULL;\r
-  m->m_LOCALAPPDATA = NULL;\r
+       m->m_ProgramFiles = NULL;\r
+       m->m_windir = NULL;\r
+       m->m_APPDATA = NULL;\r
+       m->m_LOCALAPPDATA = NULL;\r
 \r
-  return  e;\r
+       return  e;\r
 }\r
 \r
 \r
-int  CurrentWritables_askFileAccess_sub(\r
-  const TCHAR* SystemPath,  size_t SystemPath_Len,  const TCHAR* AbsPath, size_t AbsPath_Len );\r
+static int  CurrentWritables_askFileAccess_sub(\r
+       const TCHAR* SystemPath,  size_t SystemPath_Len,  const TCHAR* AbsPath, size_t AbsPath_Len );\r
 \r
 static int  CurrentWritables_askFileAccess( CurrentWritables* m, const TCHAR* AbsPath )\r
 {\r
-  int  e;\r
-  size_t  abs_len;\r
+       int  e;\r
+       size_t  abs_len;\r
 \r
-  abs_len = _tcslen( AbsPath );\r
-  e= CurrentWritables_askFileAccess_sub( m->m_ProgramFiles, m->m_ProgramFiles_Len, AbsPath, abs_len ); IF(e)goto fin;\r
-  e= CurrentWritables_askFileAccess_sub( m->m_windir,       m->m_windir_Len,       AbsPath, abs_len ); IF(e)goto fin;\r
-  e= CurrentWritables_askFileAccess_sub( m->m_APPDATA,      m->m_APPDATA_Len,      AbsPath, abs_len ); IF(e)goto fin;\r
-  e= CurrentWritables_askFileAccess_sub( m->m_LOCALAPPDATA, m->m_LOCALAPPDATA_Len, AbsPath, abs_len ); IF(e)goto fin;\r
+       abs_len = _tcslen( AbsPath );\r
+       e= CurrentWritables_askFileAccess_sub( m->m_ProgramFiles, m->m_ProgramFiles_Len, AbsPath, abs_len ); IF(e)goto fin;\r
+       e= CurrentWritables_askFileAccess_sub( m->m_windir,       m->m_windir_Len,       AbsPath, abs_len ); IF(e)goto fin;\r
+       e= CurrentWritables_askFileAccess_sub( m->m_APPDATA,      m->m_APPDATA_Len,      AbsPath, abs_len ); IF(e)goto fin;\r
+       e= CurrentWritables_askFileAccess_sub( m->m_LOCALAPPDATA, m->m_LOCALAPPDATA_Len, AbsPath, abs_len ); IF(e)goto fin;\r
 \r
-  e=0;\r
+       e=0;\r
 fin:\r
-  return  e;\r
+       return  e;\r
 }\r
 \r
 \r
 static int  CurrentWritables_askFileAccess_sub(\r
-  const TCHAR* SystemPath,  size_t SystemPath_Len,  const TCHAR* AbsPath, size_t AbsPath_Len )\r
+       const TCHAR* SystemPath,  size_t SystemPath_Len,  const TCHAR* AbsPath, size_t AbsPath_Len )\r
 {\r
-  if ( SystemPath == NULL )  return  0;\r
+       if ( SystemPath == NULL )  return  0;\r
 \r
-  IF ( _tcsncmp( SystemPath, AbsPath, SystemPath_Len ) == 0 )\r
-    return  E_OutOfWritable;  // \83V\83X\83e\83\80\83t\83H\83\8b\83_\82Ì\92\86\82ð\8f\91\82«\8d\9e\82Ý\8b\96\89Â\82µ\82æ\82¤\82Æ\82µ\82Ä\82¢\82é\r
+       IF ( _tcsncmp( SystemPath, AbsPath, SystemPath_Len ) == 0 )\r
+               return  E_OUT_OF_WRITABLE;  // \83V\83X\83e\83\80\83t\83H\83\8b\83_\82Ì\92\86\82ð\8f\91\82«\8d\9e\82Ý\8b\96\89Â\82µ\82æ\82¤\82Æ\82µ\82Ä\82¢\82é\r
 \r
-  IF ( _tcsncmp( SystemPath, AbsPath, AbsPath_Len ) == 0 )\r
-    return  E_OutOfWritable;  // \83V\83X\83e\83\80\83t\83H\83\8b\83_\82ð\8aÜ\82ß\82Ä\8b\96\89Â\8f\91\82«\8d\9e\82Ý\8b\96\89Â\82µ\82æ\82¤\82Æ\82µ\82Ä\82¢\82é\r
+       IF ( _tcsncmp( SystemPath, AbsPath, AbsPath_Len ) == 0 )\r
+               return  E_OUT_OF_WRITABLE;  // \83V\83X\83e\83\80\83t\83H\83\8b\83_\82ð\8aÜ\82ß\82Ä\8b\96\89Â\8f\91\82«\8d\9e\82Ý\8b\96\89Â\82µ\82æ\82¤\82Æ\82µ\82Ä\82¢\82é\r
 \r
-  return  0;\r
+       return  0;\r
 }\r
 \r
 \r
@@ -1512,9 +1547,9 @@ static int  CurrentWritables_askFileAccess_sub(
  \r
 /***********************************************************************\r
   <<< [StrT_cpy] >>> \r
-- _tcscpy is raising exception, if E_FewArray\r
+- _tcscpy is raising exception, if E_FEW_ARRAY\r
 ************************************************************************/\r
-int  StrT_cpy( TCHAR* Dst, size_t DstSize, const TCHAR* Src )\r
+errnum_t  StrT_cpy( TCHAR* Dst, size_t DstSize, const TCHAR* Src )\r
 {\r
        size_t  size;\r
 \r
@@ -1526,59 +1561,79 @@ int  StrT_cpy( TCHAR* Dst, size_t DstSize, const TCHAR* Src )
        else {\r
                memcpy( Dst, Src, DstSize - sizeof(TCHAR) );\r
                *(TCHAR*)( (char*) Dst + DstSize ) = _T('\0');\r
-               return  E_FewArray;\r
+               return  E_FEW_ARRAY;\r
        }\r
 }\r
 \r
  \r
 /***********************************************************************\r
-  <<< [StrT_malloc_cpy] >>> \r
+  <<< [MallocAndCopyString] >>> \r
 ************************************************************************/\r
-TCHAR*  StrT_malloc_cpy( const TCHAR* Src )\r
+errnum_t  MallocAndCopyString( TCHAR** out_NewString, const TCHAR* SourceString )\r
 {\r
-       TCHAR*  p;\r
-       size_t  size;\r
+       TCHAR*  str;\r
+       size_t  size = ( _tcslen( SourceString ) + 1 ) * sizeof(TCHAR);\r
 \r
-       size = ( _tcslen( Src ) + 1 ) * sizeof(TCHAR);\r
-       p = (TCHAR*) malloc( size );  IF(p==NULL) return NULL;\r
-       memcpy( p, Src, size );\r
-       return  p;\r
+       ASSERT_D( *out_NewString == NULL, __noop() );\r
+\r
+       str = (TCHAR*) malloc( size );\r
+       if ( str == NULL ) { return  E_FEW_MEMORY; }\r
+\r
+       memcpy( str, SourceString, size );\r
+\r
+       *out_NewString = str;\r
+       return  0;\r
 }\r
 \r
+\r
  \r
 /***********************************************************************\r
-  <<< [StrT_malloc_cpy_from_char] >>> \r
+  <<< [MallocAndCopyString_char] >>> \r
 ************************************************************************/\r
-TCHAR*  StrT_malloc_cpy_from_char( const char* Src )\r
+#ifdef _UNICODE\r
+errnum_t  MallocAndCopyString_char( TCHAR** out_NewString, const char* SourceString )\r
 {\r
-       #if _UNICODE\r
-               TCHAR*  p = NULL;\r
-               size_t  size;\r
-               int     r;\r
+       TCHAR*  str;\r
+       size_t  size = ( strlen( SourceString ) + 1 ) * sizeof(TCHAR);\r
+       int     r;\r
 \r
-               size = ( strlen( Src ) + 1 ) * sizeof(TCHAR);\r
-               p = (TCHAR*) malloc( size );  IF(p==NULL) return NULL;\r
+       str = (TCHAR*) malloc( size );\r
+       if ( str == NULL ) { return  E_FEW_MEMORY; }\r
 \r
-               r = MultiByteToWideChar( CP_OEMCP, MB_PRECOMPOSED, Src, -1, p, size / 2 );\r
-               IF( r == 0 ) goto err;\r
-               return  p;\r
+       r = MultiByteToWideChar( CP_OEMCP, MB_PRECOMPOSED, SourceString, -1, str, size / sizeof(TCHAR) );\r
+       IF ( r == 0 ) {\r
+               free( str );\r
+               return  E_GET_LAST_ERROR;\r
+       }\r
+       *out_NewString = str;\r
+       return  0;\r
+}\r
+#endif\r
 \r
-       err:\r
-               free( p );\r
-               return  NULL;\r
 \r
-       #else\r
-               TCHAR*  p;\r
-               size_t  size;\r
\r
+/***********************************************************************\r
+  <<< [MallocAndCopyStringByLength] >>> \r
+************************************************************************/\r
+errnum_t  MallocAndCopyStringByLength( TCHAR** out_NewString, const TCHAR* SourceString,\r
+       unsigned CountOfCharacter )\r
+{\r
+       TCHAR*  str;\r
+       size_t  size = ( CountOfCharacter + 1 ) * sizeof(TCHAR);\r
 \r
-               size = ( _tcslen( Src ) + 1 ) * sizeof(TCHAR);\r
-               p = (TCHAR*) malloc( size );  IF(p==NULL) return NULL;\r
-               memcpy( p, Src, size );\r
+       ASSERT_D( *out_NewString == NULL, __noop() );\r
 \r
-               return  p;\r
-       #endif\r
+       str = (TCHAR*) malloc( size );\r
+       if ( str == NULL ) { return  E_FEW_MEMORY; }\r
+\r
+       memcpy( str, SourceString, size - sizeof(TCHAR) );\r
+       str[ CountOfCharacter ] = _T('\0');\r
+\r
+       *out_NewString = str;\r
+       return  0;\r
 }\r
 \r
+\r
  \r
 /***********************************************************************\r
   <<< [StrT_chrs] >>> \r
@@ -1656,6 +1711,342 @@ TCHAR*  StrT_refExt( const TCHAR* s )
 \r
  \r
 /***********************************************************************\r
+  <<< [StrT_replace1] >>> \r
+************************************************************************/\r
+errnum_t  StrT_replace1( TCHAR* in_out_String, TCHAR FromCharacter, TCHAR ToCharacter,\r
+       unsigned Opt )\r
+{\r
+       TCHAR*  p;\r
+\r
+       UNREFERENCED_VARIABLE( Opt );\r
+\r
+       IF ( FromCharacter == _T('\0') )  { return  E_OTHERS; }\r
+\r
+       p = in_out_String;\r
+       for (;;) {\r
+               p = _tcschr( p, FromCharacter );\r
+               if ( p == NULL )  { break; }\r
+               *p = ToCharacter;\r
+               p += 1;\r
+       }\r
+\r
+       return  0;\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
+  <<< [StrT_trim] >>> \r
+************************************************************************/\r
+errnum_t  StrT_trim( TCHAR* out_Str, size_t out_Str_Size, const TCHAR* in_Str )\r
+{\r
+       const TCHAR*  p1;\r
+       const TCHAR*  p2;\r
+       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
+               c = *p2;\r
+               if ( c != _T(' ') && c != _T('\t') && c != _T('\n') && c != _T('\r') )\r
+                       break;\r
+       }\r
+       return  stcpy_part_r( out_Str, out_Str_Size, out_Str, NULL, p1, p2+1 );\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
+\r
+       if ( last > in_out_Str ) {\r
+               if ( *( last - 1 ) == Charactor )\r
+                       { *( last - 1 ) = _T('\0'); }\r
+       }\r
+       return  0;\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
+  <<< [StrT_cutLineComment] >>> \r
+************************************************************************/\r
+errnum_t  StrT_cutLineComment( TCHAR* out_Str, size_t out_Str_Size, const TCHAR* in_Str, const TCHAR* CommentSign )\r
+{\r
+       const TCHAR*  p1;\r
+       const TCHAR*  p2;\r
+       TCHAR   c;\r
+\r
+       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
+\r
+       for ( p2 = p2 - 1;  p2 >= p1;  p2-- ) {\r
+               c = *p2;\r
+               if ( c != _T(' ') && c != _T('\t') && c != _T('\n') && c != _T('\r') )\r
+                       break;\r
+       }\r
+       return  stcpy_part_r( out_Str, out_Str_Size, out_Str, NULL, p1, p2+1 );\r
+}\r
+\r
+\r
\r
+/**************************************************************************\r
+  <<< [StrT_meltCSV] >>> \r
+*************************************************************************/\r
+errnum_t  StrT_meltCSV( TCHAR* out_Str, size_t out_Str_Size, const TCHAR** pCSV )\r
+{\r
+       errnum_t  e = 0;\r
+       TCHAR*  t;\r
+       TCHAR*  t_last = (TCHAR*)( (char*)out_Str + out_Str_Size - sizeof(TCHAR) );\r
+       const TCHAR*  s;\r
+       TCHAR  dummy[2];\r
+       TCHAR  c;\r
+\r
+       t = out_Str;\r
+       s = *pCSV;\r
+       if ( out_Str_Size <= 1 )  { t = dummy;  t_last = dummy; }\r
+\r
+       if ( s == NULL ) { *t = _T('\0');  return 0; }\r
+\r
+\r
+       /* \93ª\82Ì\8bó\94\92\82ð\8f\9c\82­ */\r
+       while ( *s == _T(' ') || *s == _T('\t') )  s++;\r
+\r
+       switch ( *s ) {\r
+\r
+               /* "" \82Å\88Í\82Ü\82ê\82Ä\82¢\82é\8fê\8d\87 */\r
+               case _T('"'):\r
+                       s++;\r
+                       c = *s;\r
+                       while ( c != _T('"') || *(s+1) == _T('"') ) {  /* " \95\8e\9a\82Ü\82Å */\r
+                               if ( t == t_last ) { e = E_FEW_ARRAY;  t = dummy;  t_last = dummy + 1; }\r
+                               if ( c == *(s+1) && c == _T('"') )  s++;  /* " \95\8e\9a\8e©\91Ì */\r
+                               if ( c == _T('\0') )  break;\r
+                               *t = c;  t++;  s++;  c = *s;\r
+                       }\r
+                       *t = _T('\0');\r
+\r
+                       s++;\r
+                       for (;;) {\r
+                               if ( *s == _T(',') )  { s = s+1;  break; }\r
+                               if ( *s == _T('\0') ) { s = NULL;  break; }\r
+                               s++;\r
+                       }\r
+                       *pCSV = s;\r
+                       return  e;\r
+\r
+               /* \8bó\82Ì\8d\80\96Ú\82Ì\8fê\8d\87 */\r
+               case ',':\r
+                       *t = _T('\0');\r
+                       *pCSV = s+1;\r
+                       return  0;\r
+\r
+               case '\0':\r
+                       *t = _T('\0');\r
+                       *pCSV = NULL;\r
+                       return  0;\r
+\r
+               /* "" \82Å\88Í\82Ü\82ê\82Ä\82¢\82È\82¢\8fê\8d\87 */\r
+               default: {\r
+                       TCHAR*  sp = NULL;  /* \8dÅ\8cã\82Ì\98A\91±\82µ\82½\8bó\94\92\82Ì\90æ\93ª */\r
+\r
+                       c = *s;\r
+                       while ( c != _T(',') && c != _T('\0') && c != _T('\r') && c != _T('\n') ) {  /* , \95\8e\9a\82Ü\82Å */\r
+\r
+                               /* sp \82ð\90Ý\92è\82·\82é */\r
+                               if ( c == ' ' ) {\r
+                                       if ( sp == NULL )  sp = t;\r
+                               }\r
+                               else  sp = NULL;\r
+\r
+                               if ( t == t_last ) { e = E_FEW_ARRAY;  t = dummy;  t_last = dummy + 1; }\r
+\r
+                               /* \83R\83s\81[\82·\82é */\r
+                               *t = c;  t++;  s++;  c = *s;\r
+                       }\r
+\r
+                       /* \95Ô\82è\92l\82ð\8c\88\92è\82·\82é */\r
+                       if ( c == _T(',') )  s = s + 1;\r
+                       else  s = NULL;\r
+\r
+                       /* \96\96\94ö\82Ì\8bó\94\92\82ð\8eæ\82è\8f\9c\82­ */\r
+                       if ( sp != NULL )  *sp = '\0';\r
+                       else  *t = _T('\0');\r
+\r
+                       *pCSV = s;\r
+                       return  e;\r
+               }\r
+       }\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
+  <<< [StrT_getExistSymbols] >>> \r
+************************************************************************/\r
+errnum_t  StrT_getExistSymbols( unsigned* out, bool bCase, const TCHAR* Str, const TCHAR* Symbols, ... )\r
+{\r
+       errnum_t  e;\r
+       int       i;\r
+       TCHAR** syms = NULL;\r
+       bool*   syms_exists = NULL;\r
+       bool    b_nosym = false;\r
+       TCHAR*  sym = NULL;\r
+       size_t  sym_size = ( _tcslen( Symbols ) + 1 ) * sizeof(TCHAR);\r
+       int     n_sym = 0;\r
+       const TCHAR*  p;\r
+\r
+       UNREFERENCED_VARIABLES(( bCase ));\r
+\r
+       sym = (TCHAR*) malloc( sym_size ); IF(sym==NULL)goto err_fm;\r
+\r
+\r
+       //=== Get Symbols\r
+       p = Symbols;\r
+       do {\r
+               e= StrT_meltCSV( sym, sym_size, &p ); IF(e)goto fin;\r
+               if ( sym[0] != _T('\0') )  n_sym ++;\r
+       } while ( p != NULL );\r
+\r
+       syms = (TCHAR**) malloc( n_sym * sizeof(TCHAR*) ); IF(syms==NULL)goto err_fm;\r
+       memset( syms, 0, n_sym * sizeof(TCHAR*) );\r
+       syms_exists = (bool*) malloc( n_sym * sizeof(bool) ); IF(syms_exists==NULL)goto err_fm;\r
+       memset( syms_exists, 0, n_sym * sizeof(bool) );\r
+\r
+       p = Symbols;  i = 0;\r
+       do {\r
+               e= StrT_meltCSV( sym, sym_size, &p ); IF(e)goto fin;\r
+               if ( sym[0] != _T('\0') ) {\r
+                       e= MallocAndCopyString( &syms[i], sym ); IF(e)goto fin;\r
+                       i++;\r
+               }\r
+       } while ( p != NULL );\r
+\r
+\r
+       //=== Check Str whether having Symbols\r
+       p = Str;\r
+       do {\r
+               e= StrT_meltCSV( sym, sym_size, &p ); IF(e)goto fin;\r
+               if ( sym[0] != _T('\0') ) {\r
+                       for ( i = 0; i < n_sym; i++ ) {\r
+                               if ( _tcscmp( sym, syms[i] ) == 0 )  { syms_exists[i] = true;  break; }\r
+                       }\r
+                       if ( i == n_sym )  b_nosym = true;\r
+               }\r
+       } while ( p != NULL );\r
+\r
+\r
+       //=== Sum numbers\r
+       {\r
+               va_list   va;\r
+               unsigned  num;\r
+\r
+               va_start( va, Symbols );\r
+               *out = 0;\r
+               for ( i = 0; i < n_sym; i++ ) {\r
+                       num = va_arg( va, unsigned );\r
+                       if ( syms_exists[i] )  *out |= num;\r
+               }\r
+               va_end( va );\r
+       }\r
+\r
+       e = ( b_nosym ? E_NOT_FOUND_SYMBOL : 0 );\r
+fin:\r
+       if ( syms != NULL ) {\r
+               for ( i = 0; i < n_sym; i++ ) {\r
+                       if ( syms[i] != NULL )  free( syms[i] );\r
+               }\r
+               free( syms );\r
+       }\r
+       if ( syms_exists != NULL )  free( syms_exists );\r
+       if ( sym != NULL )  free( sym );\r
+       return  e;\r
+err_fm: e= E_FEW_MEMORY; goto fin;\r
+}\r
+\r
\r
+/**************************************************************************\r
+  <<< [StrT_meltCmdLine] >>> \r
+*************************************************************************/\r
+errnum_t  StrT_meltCmdLine( TCHAR* out_Str, size_t out_Str_Size, const TCHAR** pLine )\r
+{\r
+       errnum_t  e = 0;\r
+       TCHAR*  t;\r
+       TCHAR*  t_last = (TCHAR*)( (char*)out_Str + out_Str_Size - sizeof(TCHAR) );\r
+       const TCHAR*  s;\r
+       TCHAR  dummy;\r
+       TCHAR  c;\r
+\r
+       t = out_Str;\r
+       s = *pLine;\r
+       if ( out_Str_Size <= 1 )  { t = &dummy;  t_last = &dummy; }\r
+\r
+       if ( s == NULL ) { *t = _T('\0');  return 0; }\r
+\r
+\r
+       /* \93ª\82Ì\8bó\94\92\82ð\8f\9c\82­ */\r
+       while ( *s == _T(' ') || *s == _T('\t') )  s++;\r
+\r
+       switch ( *s ) {\r
+\r
+               /* "" \82Å\88Í\82Ü\82ê\82Ä\82¢\82é\8fê\8d\87 */\r
+               case _T('"'):\r
+                       s++;\r
+                       c = *s;\r
+                       while ( c != _T('"') || *(s+1) == _T('"') ) {  /* " \95\8e\9a\82Ü\82Å */\r
+                               if ( t == t_last ) { e = E_FEW_ARRAY;  t = &dummy;  t_last = &dummy + 1; }\r
+                               if ( c == *(s+1) && c == _T('"') )  s++;  /* " \95\8e\9a\8e©\91Ì */\r
+                               if ( c == _T('\0') )  break;\r
+                               *t = c;  t++;  s++;  c = *s;\r
+                       }\r
+                       *t = _T('\0');\r
+\r
+                       s++;\r
+                       for (;;) {\r
+                               if ( *s == _T(' ') )  { s = s+1;  break; }\r
+                               if ( *s == _T('\0') ) { s = NULL;  break; }\r
+                               s++;\r
+                       }\r
+                       *pLine = s;\r
+                       return  e;\r
+\r
+               case '\0':\r
+                       *t = _T('\0');\r
+                       *pLine = NULL;\r
+                       return  0;\r
+\r
+               /* "" \82Å\88Í\82Ü\82ê\82Ä\82¢\82È\82¢\8fê\8d\87 */\r
+               default: {\r
+                       c = *s;\r
+                       while ( c != _T(' ') && c != _T('\0') && c != _T('\r') && c != _T('\n') ) {  /* \8bó\94\92\95\8e\9a\82Ü\82Å */\r
+\r
+                               if ( t == t_last ) { e = E_FEW_ARRAY;  t = &dummy;  t_last = &dummy + 1; }\r
+\r
+                               /* \83R\83s\81[\82·\82é */\r
+                               *t = c;  t++;  s++;  c = *s;\r
+                       }\r
+\r
+                       /* *pLine\82ð\8c\88\92è\82·\82é */\r
+                       while ( *s == _T(' ') )  s = s + 1;\r
+                       if ( *s == _T('\0') )  s = NULL;\r
+\r
+                       /* \96\96\94ö */\r
+                       *t = _T('\0');\r
+\r
+                       *pLine = s;\r
+                       return  e;\r
+               }\r
+       }\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
   <<< [StrT_isAbsPath] >>> \r
 ************************************************************************/\r
 bool  StrT_isAbsPath( const TCHAR* s )\r
@@ -1668,237 +2059,1175 @@ bool  StrT_isAbsPath( const TCHAR* s )
 }\r
 \r
  \r
-/***********************************************************************\r
-  <<< [StrT_getAbsPath_part]:shlwapi >>> \r
-************************************************************************/\r
-int  StrT_getAbsPath_part( TCHAR* Out, size_t OutSize, TCHAR* OutStart,\r
+/**************************************************************************\r
+  <<< [StrT_getAbsPath_part] >>> \r
+*************************************************************************/\r
+errnum_t  StrT_getAbsPath_part( TCHAR* out_AbsPath, size_t AbsPathSize, TCHAR* OutStart,\r
        TCHAR** out_OutLast, const TCHAR* StepPath, const TCHAR* BasePath )\r
 {\r
-       int     e;\r
-       TCHAR*  p;\r
-       TCHAR   base_path_x[512];\r
+       errnum_t      e;\r
+       TCHAR         separator = (TCHAR) DUMMY_INITIAL_VALUE_TCHAR;\r
+       const TCHAR*  separator_path;\r
+       TCHAR*        out_abs_path_over = (TCHAR*)( (uint8_t*) out_AbsPath + AbsPathSize );\r
+       TCHAR*        null_position = NULL;\r
 \r
-       IF_D( OutStart < Out ||  (char*) OutStart >= (char*)Out + OutSize )goto err;\r
 \r
+       #if  CHECK_ARG\r
+               /* "BasePath" must be out of "out_AbsPath" */\r
+               ASSERT_R( BasePath < out_AbsPath  ||\r
+                       (uint8_t*) BasePath >= (uint8_t*) out_AbsPath + AbsPathSize,\r
+                       goto err );\r
+       #endif\r
+\r
+\r
+       /* If "StepPath" == "", out_AbsPath = "" */\r
        if ( StepPath[0] == _T('\0') ) {\r
-               *OutStart = _T('\0');\r
-               return  0;\r
+               ASSERT_R( AbsPathSize >= sizeof(TCHAR), goto err_fm );\r
+               out_AbsPath[0] = _T('\0');\r
+               e=0;  goto fin;\r
        }\r
+\r
+\r
+       /* Set "OutStart" */\r
+       if ( OutStart == NULL )\r
+               { OutStart = out_AbsPath; }\r
+\r
+\r
+       /* Set "separator" : \ or / from "BasePath" */\r
        if ( StrT_isAbsPath( StepPath ) ) {\r
-               if ( Out == StepPath )\r
-                       return  0;\r
+               separator_path = StepPath;\r
+       }\r
+       else if ( BasePath == NULL ) {\r
+               separator = _T('\\');\r
+               separator_path = NULL;\r
+       }\r
+       else {\r
+               separator_path = BasePath;\r
+       }\r
+       if ( separator_path != NULL ) {\r
+               const TCHAR*    p;\r
+               const TCHAR*    p2;\r
+\r
+               p  = _tcschr( separator_path, _T('\\') );\r
+               p2 = _tcschr( separator_path, _T('/') );\r
+               if ( p == NULL ) {\r
+                       if ( p2 == NULL )\r
+                               { separator = _T('\\'); }\r
+                       else\r
+                               { separator = _T('/'); }\r
+               } else {\r
+                       if ( p2 == NULL )\r
+                               { separator = _T('\\'); }\r
+                       else {\r
+                               if ( p < p2 )\r
+                                       { separator = _T('\\'); }\r
+                               else\r
+                                       { separator = _T('/'); }\r
+                       }\r
+               }\r
+       }\r
+\r
+\r
+       /* Set "OutStart" : "BasePath" + / + "StepPath" */\r
+       if ( StrT_isAbsPath( StepPath ) ) {\r
+               size_t  step_path_length = _tcslen( StepPath );\r
+\r
+               IF( OutStart + step_path_length >= out_abs_path_over ) goto err_fa;\r
+               memmove( OutStart,  StepPath,  ( step_path_length + 1 ) * sizeof(TCHAR) );\r
+\r
+               /* Set "null_position" */\r
+               null_position = OutStart + step_path_length;\r
+       }\r
+       else {\r
+               TCHAR   c;\r
+               TCHAR*  p;\r
+               size_t  base_path_length;\r
+               size_t  step_path_length = _tcslen( StepPath );\r
+\r
+               if ( BasePath == NULL ) {\r
+                       base_path_length = GetCurrentDirectory( 0, NULL ) - 1;\r
+               }\r
+               else {\r
+                       base_path_length = _tcslen( BasePath );\r
+                       c = BasePath[ base_path_length - 1 ];\r
+                       if ( c == _T('\\')  ||  c == _T('/') )\r
+                               { base_path_length -= 1; }\r
+               }\r
+\r
+               p = OutStart + base_path_length + 1;\r
+               IF( p + step_path_length >= out_abs_path_over ) goto err_fa;\r
+               memmove( p,  StepPath,  ( step_path_length + 1 ) * sizeof(TCHAR) );\r
+                       /* memmove is for "out_AbsPath" == "StepPath" */\r
+\r
+               if ( BasePath == NULL ) {\r
+                       GetCurrentDirectory( base_path_length + 1, OutStart );\r
+                       if ( OutStart[ base_path_length - 1 ] == _T('\\') )\r
+                               { base_path_length -= 1; }\r
+               } else {\r
+                       memcpy( OutStart,  BasePath,  base_path_length * sizeof(TCHAR) );\r
+               }\r
+               OutStart[ base_path_length ] = separator;\r
+\r
+\r
+               /* Set "null_position" */\r
+               null_position = p + step_path_length;\r
+       }\r
+\r
+\r
+       /* Replace \ and / to "separator" in "OutStart" */\r
+       {\r
+               TCHAR  other_separator;\r
+\r
+               if ( separator == _T('/') )\r
+                       { other_separator = _T('\\'); }\r
                else\r
-                       return  stcpy_part_r( Out, OutSize, OutStart, out_OutLast, StepPath, NULL );\r
+                       { other_separator = _T('/'); }\r
+\r
+               e= StrT_replace1( OutStart, other_separator, separator, 0 ); IF(e)goto fin;\r
        }\r
 \r
-       if ( BasePath == NULL ) {\r
-               p = _tgetcwd( base_path_x, _countof(base_path_x) ); IF( p == NULL )goto err;\r
-               BasePath = base_path_x;\r
+\r
+       /* Replace \*\..\ to \ */\r
+       {\r
+               enum  { length = 4 };\r
+               TCHAR   parent[ length + 1 ];  /* \..\ or /../ */\r
+               TCHAR*  parent_position;\r
+               TCHAR*  p;\r
+\r
+               parent[0] = separator;\r
+               parent[1] = _T('.');\r
+               parent[2] = _T('.');\r
+               parent[3] = separator;\r
+               parent[4] = _T('\0');\r
+\r
+               for (;;) {\r
+                       parent_position = _tcsstr( OutStart, parent );\r
+                       if ( parent_position == NULL )  { break; }\r
+\r
+                       p = parent_position - 1;\r
+                       for (;;) {\r
+                               IF( p < OutStart ) goto err;  /* "../" are too many */\r
+                               if ( *p == separator )  { break; }\r
+                               p -= 1;\r
+                       }\r
+\r
+                       memmove( p + 1,\r
+                               parent_position + length,\r
+                               ( null_position - ( parent_position + length ) + 1 ) * sizeof(TCHAR) );\r
+\r
+                       null_position -= ( parent_position + length ) - ( p + 1 );\r
+               }\r
+       }\r
+\r
+\r
+       /* Cut last \*\.. */\r
+       {\r
+               enum  { length = 3 };\r
+               TCHAR*  p;\r
+\r
+               while ( null_position - length >= OutStart ) {\r
+                       if ( *( null_position - 3 ) != separator  ||\r
+                            *( null_position - 2 ) != _T('.')  ||\r
+                            *( null_position - 1 ) != _T('.') )\r
+                               { break; }\r
+\r
+                       p = null_position - 4;\r
+                       for (;;) {\r
+                               IF( p < OutStart ) goto err;  /* "../" are too many */\r
+                               if ( *p == separator )  { break; }\r
+                               p -= 1;\r
+                       }\r
+\r
+                       *p = _T('\0');\r
+\r
+                       null_position = p;\r
+               }\r
+       }\r
+\r
+\r
+       /* Replace \.\ to \ */\r
+       {\r
+               enum  { length = 3 };\r
+               TCHAR   current[ length + 1 ];  /* \.\ or /./ */\r
+               TCHAR*  current_position;\r
+\r
+               current[0] = separator;\r
+               current[1] = _T('.');\r
+               current[2] = separator;\r
+               current[3] = _T('\0');\r
+\r
+               for (;;) {\r
+                       current_position = _tcsstr( OutStart, current );\r
+                       if ( current_position == NULL )  { break; }\r
+\r
+                       memmove( current_position + 1,\r
+                               current_position + length,\r
+                               ( null_position - ( current_position + length ) + 1 ) * sizeof(TCHAR) );\r
+\r
+                       null_position -= length - 1;\r
+               }\r
+       }\r
+\r
+\r
+       /* Cut last \. */\r
+       {\r
+               TCHAR*  over = _tcschr( OutStart, _T('\0') );\r
+\r
+               while ( over - 2 >= OutStart  &&\r
+                               *( over - 1 ) == _T('.')  &&  *( over - 2 ) == separator ) {\r
+                       over -= 2;\r
+                       *over = _T('\0');\r
+               }\r
+       }\r
+\r
+\r
+       /* Add root / */\r
+       if ( null_position - 1 >= OutStart ) {\r
+               if ( *( null_position - 1 ) == _T(':') ) {\r
+                       IF( null_position + 1 >= out_abs_path_over ) goto err_fa;\r
+\r
+                       *( null_position + 0 ) = separator;\r
+                       *( null_position + 1 ) = _T('\0');\r
+                       null_position += 1;\r
+               }\r
        }\r
 \r
 \r
-       //=== \90â\91Î\83p\83X\82É\82·\82é\81B ".." \82à\8f\88\97\9d\82·\82é\r
-       IF( OutSize - ((char*)OutStart - (char*)Out) < MAX_PATH*sizeof(TCHAR) ) return E_FewArray;\r
-       _tcscpy_s( OutStart, MAX_PATH, BasePath );\r
-       PathAppend( OutStart, StepPath );  // PathAppend \82Ì\91æ1\88ø\90\94\82Ì\83T\83C\83Y\82Í MAX_PATH*sizeof(TCHAR) \88È\8fã\r
+       /* Set "*out_OutLast" */\r
+       if ( out_OutLast != NULL )\r
+               { *out_OutLast = null_position; }\r
+\r
+       e=0;\r
+fin:\r
+       return  e;\r
+\r
+err:     e = E_OTHERS;      goto fin;\r
+err_fa:  e = E_FEW_ARRAY;   goto fin;\r
+err_fm:  e = E_FEW_MEMORY;  goto fin;\r
+}\r
 \r
 \r
-       //=== \96\96\94ö\82Ì \ \82ð\83J\83b\83g\82·\82é\r
-       p = _tcschr( OutStart, _T('\0') );\r
-       if ( *(p-1) == _T('\\') && p > OutStart + 3 ) { p--;  *p = _T('\0'); }\r
\r
+/***********************************************************************\r
+  <<< [StrT_getParentAbsPath_part] >>> \r
+************************************************************************/\r
+errnum_t  StrT_getParentAbsPath_part( TCHAR* Str, size_t StrSize, TCHAR* StrStart,\r
+       TCHAR** out_StrLast, const TCHAR* StepPath, const TCHAR* BasePath )\r
+{\r
+       errnum_t  e;\r
+       TCHAR*  p;\r
+\r
+       IF_D( StrStart < Str ||  (char*) StrStart >= (char*)Str + StrSize )goto err;\r
+\r
+       if ( StepPath[0] == _T('\0') ) {\r
+               *StrStart = _T('\0');\r
+               return  0;\r
+       }\r
+\r
+       /* \90â\91Î\83p\83X\82É\82·\82é */\r
+       e= StrT_getAbsPath( StrStart,\r
+               StrSize - ( (char*)StrStart - (char*)Str ),\r
+               StepPath, BasePath ); IF(e)goto fin;\r
+\r
+\r
+       /* Cut last \ */\r
+       p = _tcschr( StrStart, _T('\0') );\r
+       if ( p > StrStart ) {\r
+               TCHAR  c = *( p - 1 );\r
+               if ( c == _T('\\')  ||  c == _T('/') )\r
+                       { *( p - 1 ) = _T('\0'); }\r
+       }\r
+\r
+\r
+       /* \90e\82Ö */\r
+       p = StrT_refFName( StrStart );\r
+       if ( p > StrStart )  p--;\r
+       *p = _T('\0');\r
+\r
+\r
+       /* \83\8b\81[\83g\82È\82ç \ \82ð\95t\82¯\82é */\r
+       if ( p == StrStart + 2 ) {\r
+               *p = _T('\\');  p++;  *p = _T('\0');\r
+       }\r
+\r
+       if ( out_StrLast != NULL )  *out_StrLast = p;\r
+\r
+       e=0;\r
+fin:\r
+       return  e;\r
+\r
+err:  e = E_OTHERS;  goto fin;\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
+  <<< [StrT_isOverOfFileName] >>> \r
+- "" or "\" or "/"\r
+************************************************************************/\r
+inline bool  StrT_isOverOfFileName( const TCHAR* PointerInPath )\r
+{\r
+       return  PointerInPath == NULL  ||\r
+               *PointerInPath == _T('\0')  ||\r
+               ( ( *PointerInPath == _T('\\')  ||  *PointerInPath == _T('/') )  &&\r
+                       *(PointerInPath + 1) == _T('\0') );\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
+  <<< [StrT_getStepPath] >>> \r
+************************************************************************/\r
+errnum_t  StrT_getStepPath( TCHAR* out_StepPath, size_t StepPathSize,\r
+       const TCHAR* AbsPath, const TCHAR* BasePath )\r
+{\r
+       errnum_t      e;\r
+       const TCHAR*  abs_pointer;\r
+       const TCHAR*  base_pointer;\r
+       TCHAR         abs_char;\r
+       TCHAR         base_char;\r
+       TCHAR         separator;\r
+       const TCHAR*  abs_separator_pointer  = (const TCHAR*) DUMMY_INITIAL_VALUE;\r
+       const TCHAR*  base_separator_pointer = (const TCHAR*) DUMMY_INITIAL_VALUE;\r
+       TCHAR*        step_pointer;\r
+       TCHAR         parent_symbol[4] = { _T('.'), _T('.'), _T('\\'), _T('\0') };\r
+       TCHAR         base_path_2[ MAX_PATH ];\r
+\r
+\r
+       ASSERT_D( out_StepPath != AbsPath, goto err );\r
+\r
+       abs_pointer = AbsPath;\r
+\r
+\r
+       /* Set "base_pointer" */\r
+       if ( BasePath == NULL ) {\r
+               base_pointer = _tgetcwd( base_path_2, _countof(base_path_2) );\r
+               IF( base_pointer == NULL ) goto err;\r
+       }\r
+       else {\r
+               base_pointer = BasePath;\r
+       }\r
+\r
+\r
+       /* Set "abs_separator_pointer", "base_separator_pointer" : after same parent folder path */\r
+       separator = 0;\r
+       for (;;) {  /* while abs_char == base_char */\r
+               abs_char  = *abs_pointer;\r
+               base_char = *base_pointer;\r
+\r
+               abs_char  = (TCHAR) _totlower( abs_char );\r
+               base_char = (TCHAR) _totlower( base_char );\r
+\r
+               if ( abs_char == _T('\0') ) {\r
+\r
+                       /* out_StepPath = ".", if AbsPath == BasePath */\r
+                       if ( base_char == _T('\0') ) {\r
+                               e= StrT_cpy( out_StepPath, StepPathSize, _T(".") ); IF(e)goto fin;\r
+                               e=0; goto fin;\r
+                       }\r
+                       break;\r
+               }\r
+               if ( base_char == _T('\0') )  { break; }\r
+\r
+               if ( abs_char != base_char ) {\r
+                       if ( ( abs_char  == _T('/')  ||  abs_char  == _T('\\') ) &&\r
+                            ( base_char == _T('/')  ||  base_char == _T('\\') ) )\r
+                               { /* Do nothing */ }\r
+                       else\r
+                               { break; }\r
+               }\r
+\r
+               /* Set "separator", "abs_separator_pointer", "base_separator_pointer" */\r
+               if (  base_char == _T('/')  ||  base_char == _T('\\')  ) {\r
+                       if ( separator == 0 )\r
+                               { separator = base_char; }\r
+\r
+                       abs_separator_pointer = abs_pointer;\r
+                       base_separator_pointer = base_pointer;\r
+               }\r
+\r
+               abs_pointer  += 1;\r
+               base_pointer += 1;\r
+       }\r
+\r
+\r
+       /* AbsPath \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
+\r
+               if ( separator == 0 )\r
+                       { separator = abs_char; }\r
+\r
+               abs_separator_pointer = abs_pointer;\r
+               base_separator_pointer = base_pointer;\r
+       }\r
+\r
+\r
+       /* out_StepPath = AbsPath, if there is not same folder */\r
+       if ( separator == 0 ) {\r
+               e= StrT_cpy( out_StepPath, StepPathSize, AbsPath ); IF(e)goto fin;\r
+               e=0; goto fin;\r
+       }\r
+\r
+\r
+       /* Add "..\" to "out_StepPath" */\r
+       parent_symbol[2] = separator;\r
+       step_pointer = out_StepPath;\r
+       for (;;) {\r
+               const TCHAR*  p1;\r
+               const TCHAR*  p2;\r
+\r
+               if ( StrT_isOverOfFileName( base_separator_pointer ) )\r
+                       { break; }\r
+\r
+\r
+               /* Set "base_separator_pointer" : next separator */\r
+               p1 = _tcschr( base_separator_pointer + 1, _T('/') );\r
+               p2 = _tcschr( base_separator_pointer + 1, _T('\\') );\r
+\r
+               if ( p1 == NULL ) {\r
+                       if ( p2 == NULL )\r
+                               { base_separator_pointer = NULL; }\r
+                       else\r
+                               { base_separator_pointer = p2; }\r
+               }\r
+               else {\r
+                       if ( p2 == NULL ) {\r
+                               base_separator_pointer = p1;\r
+                       } else {\r
+                               if ( p1 < p2 )\r
+                                       { base_separator_pointer = p1; }\r
+                               else\r
+                                       { base_separator_pointer = p2; }\r
+                       }\r
+               }\r
+\r
+\r
+               /* Add "..\" to "out_StepPath" */\r
+               e= stcpy_part_r( out_StepPath, StepPathSize, step_pointer, &step_pointer,\r
+                       parent_symbol, NULL ); IF(e)goto fin;\r
+       }\r
+\r
+\r
+       /* Copy a part of "AbsPath" to "out_StepPath" */\r
+       if ( StrT_isOverOfFileName( abs_separator_pointer ) ) {\r
+               ASSERT_D( step_pointer > out_StepPath, goto err );\r
+               *( step_pointer - 1 ) = _T('\0');\r
+       }\r
+       else {\r
+               e= stcpy_part_r( out_StepPath, StepPathSize, step_pointer, NULL,\r
+                       abs_separator_pointer + 1, NULL ); IF(e)goto fin;\r
+       }\r
+\r
+       e=0;\r
+fin:\r
+       return  e;\r
+\r
+err:  e = E_OTHERS;  goto fin;\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
+  <<< [StrT_getBaseName_part] >>> \r
+************************************************************************/\r
+errnum_t  StrT_getBaseName_part( TCHAR* Str, size_t StrSize, TCHAR* StrStart,\r
+       TCHAR** out_StrLast, const TCHAR* SrcPath )\r
+{\r
+       const TCHAR*  p1;\r
+       const TCHAR*  p2;\r
+       const TCHAR*  p3;\r
+       const TCHAR*  ps;\r
+\r
+       p1 = StrT_refFName( SrcPath );\r
+\r
+\r
+       //=== # \82ª\96³\82¢\82Æ\82«\81A\8dÅ\8cã\82Ì\83s\83\8a\83I\83h\82Ì\91O\82Ü\82Å\82ª\81ABaseName\r
+       ps = _tcschr( p1, _T('#') );\r
+       if ( ps == NULL ) {\r
+               p2 = _tcsrchr( p1, _T('.') );\r
+               if ( p2 == NULL )  p2 = _tcsrchr( p1, _T('\0') );\r
+       }\r
+\r
+       //=== # \82ª\82 \82é\82Æ\82«\81A# \82æ\82è\91O\82Å\81A\8dÅ\8cã\82Ì\83s\83\8a\83I\83h\82Ì\91O\82Ü\82Å\82ª\81ABaseName\r
+       else {\r
+               p2 = ps;\r
+\r
+               p3 = p1;\r
+               for (;;) {\r
+                       p3 = _tcschr( p3, _T('.') );\r
+                       if ( p3 == NULL || p3 > ps )  break;\r
+                       p2 = p3;\r
+                       p3 ++;\r
+               }\r
+       }\r
+\r
+       return  stcpy_part_r( Str, StrSize, StrStart, out_StrLast, p1, p2 );\r
+}\r
+\r
\r
+/***********************************************************************\r
+  <<< [StrT_addLastOfFileName] >>> \r
+************************************************************************/\r
+errnum_t  StrT_addLastOfFileName( TCHAR* out_Path, size_t PathSize,\r
+                             const TCHAR* BasePath, const TCHAR* AddName )\r
+{\r
+       TCHAR           c;\r
+       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*    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*    term_pos_in_add;\r
+       const TCHAR*  period_pos_in_add  = _tcsrchr( AddName,  _T('.') );  // > term_pos_in_add\r
+\r
+\r
+       MEMSET_TO_NOT_INIT( out_Path, PathSize );\r
+\r
+\r
+       //=== term_pos_in_base\r
+       for ( term_pos_in_base = last_pos_in_base;  term_pos_in_base >= BasePath;  term_pos_in_base -- ) {\r
+               c = *term_pos_in_base;\r
+               if ( c == _T('/') || c == _T('\\') )  break;\r
+       }\r
+\r
+\r
+       //=== term_pos_in_add\r
+       for ( term_pos_in_add = last_pos_in_add;  term_pos_in_add >= AddName;  term_pos_in_add -- ) {\r
+               c = *term_pos_in_add;\r
+               if ( c == _T('/') || c == _T('\\') )  break;\r
+       }\r
+\r
+\r
+       //=== add_pos_in_base\r
+       if ( term_pos_in_base < period_pos_in_base ) {\r
+               add_pos_in_base = period_pos_in_base;\r
+       }\r
+       else {\r
+               if ( term_pos_in_base < BasePath )\r
+                       add_pos_in_base = _tcschr( BasePath, _T('\0') );\r
+               else\r
+                       add_pos_in_base = _tcschr( term_pos_in_base, _T('\0') );\r
+       }\r
+\r
+\r
+       //=== setup output parameters\r
+       out_pos   = (char*) out_Path;\r
+       free_size = PathSize;\r
+\r
+\r
+       //=== copy BasePath .. add_pos_in_base\r
+       copy_size = (char*)add_pos_in_base - (char*)BasePath;\r
+       if ( copy_size > free_size ) goto err_fa;\r
+       memcpy( out_pos,  BasePath,  copy_size );\r
+       out_pos   += copy_size;\r
+       free_size -= copy_size;\r
+\r
+\r
+       //=== copy AddName .. last_pos_in_add\r
+       copy_size = (char*)last_pos_in_add - (char*)AddName;\r
+       if ( copy_size > free_size ) goto err_fa;\r
+       memcpy( out_pos,  AddName,  copy_size );\r
+       out_pos   += copy_size;\r
+       free_size -= copy_size;\r
+\r
+\r
+       //=== add name and not change extension\r
+       if ( period_pos_in_add == NULL ) {\r
+\r
+               //=== copy period_pos_in_base .. last_pos_in_base\r
+               if ( period_pos_in_base > term_pos_in_base ) {\r
+                       copy_size = (char*)last_pos_in_base - (char*)period_pos_in_base + sizeof(TCHAR);\r
+                       if ( copy_size > free_size ) goto err_fa;\r
+                       memcpy( out_pos,  period_pos_in_base,  copy_size );\r
+               }\r
+               else {\r
+                       *(TCHAR*)out_pos = _T('\0');\r
+               }\r
+       }\r
+\r
+\r
+       //=== add name and change extension\r
+       else {\r
+\r
+               if ( *(period_pos_in_add + 1) == _T('\0') )\r
+                       *( (TCHAR*)out_pos - 1 ) = _T('\0');\r
+               else\r
+                       *(TCHAR*)out_pos = _T('\0');\r
+       }\r
+\r
+       return  0;\r
+\r
+err_fa:\r
+       return  E_FEW_ARRAY;\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
+\r
+       self->MemoryAddress = NULL;\r
+\r
+       p = (char*) malloc( Strs_FirstSize );\r
+       IF( p == NULL )  return  E_FEW_MEMORY;\r
+\r
+       self->MemoryAddress = p;\r
+       self->MemoryOver    = p + Strs_FirstSize;\r
+       self->NextElem      = p + sizeof(TCHAR*);\r
+       self->PointerToNextStrInPrevElem = (TCHAR**) p;\r
+       self->Prev_PointerToNextStrInPrevElem = NULL;\r
+       *(TCHAR**) p = NULL;\r
+\r
+       self->FirstOfStrs = self;\r
+       self->NextStrs = NULL;\r
+\r
+       return  0;\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
+  <<< [Strs_finish] >>> \r
+************************************************************************/\r
+errnum_t  Strs_finish( Strs* self, errnum_t e )\r
+{\r
+       Strs*  mp;\r
+       Strs*  next_mp;\r
+\r
+       if ( self->MemoryAddress == NULL )  return 0;\r
+\r
+       mp = self->FirstOfStrs;\r
+       for (;;) {\r
+               free( mp->MemoryAddress );\r
+               if ( mp == self )  break;\r
+\r
+               next_mp = mp->NextStrs;\r
+               free( mp );\r
+               mp = next_mp;\r
+       }\r
+       self->MemoryAddress = NULL;\r
+\r
+       return  e;\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
+  <<< [Strs_toEmpty] >>> \r
+************************************************************************/\r
+errnum_t  Strs_toEmpty( Strs* self )\r
+{\r
+       Strs_finish( self, 0 );\r
+       return  Strs_init( self );\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
+  <<< [Strs_add] >>> \r
+************************************************************************/\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
+}\r
+\r
+\r
+errnum_t  Strs_addBinary( Strs* self, const TCHAR* Str, const TCHAR* StrOver, const TCHAR** out_AllocStr )\r
+{\r
+       errnum_t  e;\r
+       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
+\r
+       if ( self->NextElem + elem_size > self->MemoryOver )\r
+               { e= Strs_expandSize( self, str_size ); IF(e)goto fin; }\r
+\r
+\r
+       // [ NULL     | ... ]\r
+       // [ FirstStr | NULL    | TCHAR[] | ... ]\r
+       // [ FirstStr | NextStr | TCHAR[] | NULL    | TCHAR[] | ... ]\r
+       // [ FirstStr | NextStr | TCHAR[] | NextStr | TCHAR[] ], [ NULL | TCHAR[] | ... ]\r
+\r
+       if ( out_AllocStr != NULL )  *out_AllocStr = (TCHAR*)( self->NextElem + sizeof(TCHAR*) );\r
+\r
+       //=== fill elem\r
+       *(TCHAR**) self->NextElem = NULL;\r
+       memcpy( self->NextElem + sizeof(TCHAR*),  Str,  str_size );\r
+\r
+       //=== link to elem from previous elem\r
+       *self->PointerToNextStrInPrevElem = (TCHAR*)( self->NextElem + sizeof(TCHAR*) );\r
+\r
+       //=== update self\r
+       self->Prev_PointerToNextStrInPrevElem = self->PointerToNextStrInPrevElem;\r
+       self->PointerToNextStrInPrevElem = (TCHAR**) self->NextElem;\r
+       self->NextElem = self->NextElem + elem_size;\r
+\r
+       e=0;\r
+fin:\r
+       return  e;\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
+  <<< [Strs_freeLast] >>> \r
+************************************************************************/\r
+errnum_t  Strs_freeLast( Strs* self, TCHAR* AllocStr )\r
+{\r
+       errnum_t  e;\r
+       TCHAR*  str;\r
+       TCHAR*  last_str;\r
+       TCHAR*  prev_of_last_str;\r
+       Strs*   mp;\r
+       Strs*   prev_of_last_mp;\r
+\r
+       if ( self->Prev_PointerToNextStrInPrevElem == NULL ) {\r
+               prev_of_last_str = NULL;\r
+               last_str = NULL;\r
+               for ( Strs_forEach( self, &str ) ) {\r
+                       prev_of_last_str = last_str;\r
+                       last_str = str;\r
+               }\r
+       }\r
+       else {\r
+               prev_of_last_str = (TCHAR*)( self->Prev_PointerToNextStrInPrevElem + 1 );\r
+               last_str = (TCHAR*)( self->PointerToNextStrInPrevElem + 1 );\r
+       }\r
+\r
+       // [ NULL     | ... ]\r
+       IF( last_str != AllocStr ) goto err;\r
+\r
+       // [ FirstStr | NULL    | TCHAR[] | ... ]\r
+       if ( prev_of_last_str == NULL ) {\r
+               self->NextElem = self->MemoryAddress + sizeof(TCHAR*);\r
+               self->PointerToNextStrInPrevElem = (TCHAR**) self->MemoryAddress;\r
+       }\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
+       }\r
+\r
+       // [ FirstStr | NextStr | TCHAR[] | NextStr | TCHAR[] ], [ NULL | TCHAR[] | ... ]\r
+       else {\r
+               prev_of_last_mp = NULL;\r
+               for ( mp = self->FirstOfStrs;  mp->NextStrs != self;  mp = mp->NextStrs ) {\r
+                       prev_of_last_mp = mp;\r
+               }\r
+\r
+               free( self->MemoryAddress );\r
+\r
+               *self = *mp;\r
+\r
+               if ( prev_of_last_mp == NULL ) {\r
+                       self->FirstOfStrs = self;\r
+                       self->NextStrs = NULL;\r
+               }\r
+               else {\r
+                       prev_of_last_mp->NextStrs = self;\r
+               }\r
+\r
+               free( mp );\r
+       }\r
+       *self->PointerToNextStrInPrevElem = NULL;\r
+       self->Prev_PointerToNextStrInPrevElem = NULL;\r
+\r
+       e=0;\r
+fin:\r
+       return  e;\r
+\r
+err:  e = E_OTHERS;  goto fin;\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
+  <<< [Strs_expandSize] >>> \r
+************************************************************************/\r
+errnum_t  Strs_expandSize( Strs* self, size_t FreeSize )\r
+{\r
+       Strs*   mp;\r
+       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
+\r
+       // [ NULL     | ... ]\r
+       // [ FirstStr | NULL    | TCHAR[] | ... ]\r
+       // [ FirstStr | NextStr | TCHAR[] | NULL    | TCHAR[] | ... ]\r
+       // [ FirstStr | NextStr | TCHAR[] | NextStr | TCHAR[] ], [ NULL | TCHAR[] | ... ]\r
+\r
+       while ( self->NextElem + elem_size > self->MemoryOver ) {\r
+\r
+               //=== 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
+               IF( new_memory == NULL )  { free( mp );  goto err_fm; }\r
+\r
+               //=== move old memory\r
+               if ( self->FirstOfStrs == self ) {\r
+                       self->FirstOfStrs = mp;\r
+               }\r
+               else {\r
+                       for ( mp2 = self->FirstOfStrs;  mp2->NextStrs != self;  mp2 = mp2->NextStrs );\r
+                       mp2->NextStrs = mp;\r
+               }\r
+               *mp = *self;\r
+               mp->NextStrs = self;\r
+\r
+               //=== setup new memory\r
+               self->MemoryAddress = new_memory;\r
+               self->MemoryOver    = new_memory + memory_size;\r
+               self->NextElem      = new_memory;\r
+               // self->PointerToNextStrInPrevElem is same value\r
+               // self->FirstOfStrs is same value\r
+               // self->NextStrs is always NULL\r
+       }\r
+       return  0;\r
+\r
+err_fm:  return  E_FEW_ARRAY;\r
+}\r
+\r
+\r
+/***********************************************************************\r
+  <<< [Strs_commit] >>>\r
+************************************************************************/\r
+errnum_t  Strs_commit( Strs* self, TCHAR* StrOver )\r
+{\r
+       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
+\r
+       //=== fill elem\r
+       *(TCHAR**) self->NextElem = NULL;\r
+\r
+       //=== link to elem from previous elem\r
+       *self->PointerToNextStrInPrevElem = (TCHAR*)( self->NextElem + sizeof(TCHAR*) );\r
+\r
+       //=== update self\r
+       self->PointerToNextStrInPrevElem = (TCHAR**) self->NextElem;\r
+       self->NextElem = self->NextElem + elem_size;\r
+\r
+       return  0;\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
+  <<< [StrArr] >>> \r
+************************************************************************/\r
+\r
+/*[StrArr_init]*/\r
+errnum_t  StrArr_init( StrArr* self )\r
+{\r
+       errnum_t  e;\r
+\r
+       Set2_initConst( &self->Array );\r
+       Strs_initConst( &self->Chars );\r
+\r
+       e= Set2_init( &self->Array, 0x100 ); IF(e)goto cancel;\r
+       e= Strs_init( &self->Chars ); IF(e)goto cancel;\r
+       return  0;\r
+\r
+cancel:  StrArr_finish( self, e );  return  e;\r
+}\r
+\r
+\r
+/*[StrArr_finish]*/\r
+errnum_t  StrArr_finish( StrArr* self, errnum_t e )\r
+{\r
+       if ( ! Set2_isInited( &self->Array ) )  return  0;\r
+\r
+       e= Set2_finish( &self->Array, e );\r
+       e= Strs_finish( &self->Chars, e );\r
+       return  e;\r
+}\r
+\r
+\r
+/*[StrArr_add]*/\r
+errnum_t  StrArr_add( StrArr* self, const TCHAR* Str, int* out_I )\r
+{\r
+       errnum_t  e;\r
+\r
+       e= StrArr_expandCount( self, _tcslen( Str ) ); IF(e)goto fin;\r
+       _tcscpy_s( StrArr_getFreeAddr( self ), StrArr_getFreeCount( self ), Str );\r
+       e= StrArr_commit( self ); IF(e)goto fin;\r
+       if ( out_I != NULL )  *out_I = Set2_getCount( &self->Array, TCHAR* ) - 1;\r
+\r
+       e=0;\r
+fin:\r
+       return  e;\r
+}\r
+\r
+\r
+/*[StrArr_commit]*/\r
+errnum_t  StrArr_commit( StrArr* self )\r
+{\r
+       errnum_t  e;\r
+       TCHAR*   p;\r
+       TCHAR**  pp  = NULL;\r
+       Set2*    arr = &self->Array;\r
+       Strs*    ss  = &self->Chars;\r
+\r
+       p = Strs_getFreeAddr( ss );\r
+       e= Set2_alloc( arr, &pp, TCHAR* ); IF(e)goto fin;\r
+       e= Strs_commit( ss, NULL ); IF(e)goto fin;\r
+       *pp = p;\r
+\r
+       e=0;\r
+fin:\r
+       if ( e &&  pp != NULL )  e= Set2_freeLast( arr, pp, TCHAR*, e );\r
+       return  e;\r
+}\r
+\r
+\r
+/*[StrArr_fillTo]*/\r
+errnum_t  StrArr_fillTo( StrArr* self, int n, const TCHAR* Str )\r
+{\r
+       errnum_t  e;\r
+       const TCHAR*   p;\r
+       const TCHAR**  pp;\r
+       const TCHAR**  pp_over;\r
+\r
+       n -= Set2_getCount( &self->Array, TCHAR* );\r
+       if ( n <= 0 ) return 0;\r
+\r
+       if ( Str == NULL ) {\r
+               p = NULL;\r
+       }\r
+       else {\r
+               e= Strs_add( &self->Chars, Str, &p ); IF(e)goto fin;\r
+       }\r
+\r
+       e= Set2_allocMulti( &self->Array, &pp, TCHAR*, n ); IF(e)goto fin;\r
+       pp_over = pp + n;\r
+       for ( ;  pp < pp_over;  pp++ )\r
+               *pp = p;\r
+\r
+       e=0;\r
+fin:\r
+       return  e;\r
+}\r
+\r
+\r
+/*[StrArr_toEmpty]*/\r
+errnum_t  StrArr_toEmpty( StrArr* self )\r
+{\r
+       errnum_t  e, ee;\r
+\r
+       e=0;\r
+       ee= Set2_toEmpty( &self->Array ); IF(ee&&!e)e=ee;\r
+       ee= Strs_toEmpty( &self->Chars ); IF(ee&&!e)e=ee;\r
+       return  e;\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
+  <<< [StrArr_parseCSV] >>> \r
+************************************************************************/\r
+errnum_t  StrArr_parseCSV( StrArr* self, const TCHAR* CSVLine )\r
+{\r
+       errnum_t      e;\r
+       const TCHAR*  p = CSVLine;\r
+\r
+       e= StrArr_toEmpty( self ); IF(e)goto fin;\r
+\r
+       do {\r
+               e= StrT_meltCSV( StrArr_getFreeAddr( self ), StrArr_getFreeSize( self ), &p );\r
+               if ( e == E_FEW_ARRAY ) {\r
+                       e= StrArr_expandSize( self, StrArr_getFreeSize( self ) * 2 ); IF(e)goto fin;\r
+                       continue;\r
+               }\r
+               IF(e)goto fin;\r
+\r
+               e = StrArr_commit( self ); IF(e)goto fin;\r
+       } while ( p != NULL );\r
+\r
+       e=0;\r
+fin:\r
+       return  e;\r
+}\r
+\r
+\r
\r
+/*=================================================================*/\r
+/* <<< [SetX/SetX.c] >>> */ \r
+/*=================================================================*/\r
\r
+/***********************************************************************\r
+  <<< [Set2_init] >>> \r
+************************************************************************/\r
+int  Set2_init( Set2* m, int FirstSize )\r
+{\r
+       m->First = malloc( FirstSize );\r
+       if ( m->First == NULL )  return  E_FEW_MEMORY;\r
+       m->Next = m->First;\r
+       m->Over = (char*)m->First + FirstSize;\r
+\r
+       #ifdef _DEBUG\r
+       m->PointerOfDebugArray = NULL;\r
+       #endif\r
+\r
+       return  0;\r
+}\r
\r
+/***********************************************************************\r
+  <<< [Set2_finish] >>> \r
+************************************************************************/\r
+int  Set2_finish( Set2* m, int e )\r
+{\r
+       if ( m->First != NULL )  { free( m->First );  m->First = NULL; }\r
+       return  e;\r
+}\r
 \r
\r
+/***********************************************************************\r
+  <<< [Set2_ref_imp] >>> \r
+************************************************************************/\r
+int  Set2_ref_imp( Set2* m, int iElem, void* out_pElem, size_t ElemSize )\r
+{\r
+       int    e;\r
+       char*  p;\r
 \r
-       if ( out_OutLast != NULL )  *out_OutLast = p;\r
+       IF( iElem < 0 ) goto err_ns;\r
+       p = (char*) m->First + ( (unsigned)iElem * ElemSize );\r
+       IF( p >= (char*)m->Next ) goto err_ns;\r
+       *(char**)out_pElem = p;\r
 \r
        e=0;\r
 fin:\r
        return  e;\r
 \r
-err:  e = E_Others;  goto fin;\r
+err_ns:  e = E_NOT_FOUND_SYMBOL;  goto fin;\r
 }\r
 \r
 \r
  \r
 /***********************************************************************\r
-  <<< [StrT_getParentAbsPath_part] >>> \r
+  <<< [Set2_alloc_imp] >>> \r
 ************************************************************************/\r
-int  StrT_getParentAbsPath_part( TCHAR* Str, size_t StrSize, TCHAR* StrStart,\r
-       TCHAR** out_StrLast, const TCHAR* StepPath, const TCHAR* BasePath )\r
+int  Set2_alloc_imp( Set2* m, void* pp, size_t size )\r
 {\r
        int  e;\r
-       TCHAR*  p;\r
-\r
-       IF_D( StrStart < Str ||  (char*) StrStart >= (char*)Str + StrSize )goto err;\r
-\r
-       if ( StepPath[0] == _T('\0') ) {\r
-               *StrStart = _T('\0');\r
-               return  0;\r
-       }\r
 \r
-       /* \90â\91Î\83p\83X\82É\82·\82é */\r
-       e= StrT_getAbsPath( StrStart,\r
-               StrSize - ( (char*)StrStart - (char*)Str ),\r
-               StepPath, BasePath ); IF(e)goto fin;\r
+       e= Set2_expandIfOverByAddr( m, (char*) m->Next + size ); IF(e)goto fin;\r
+       *(void**)pp = m->Next;\r
+       m->Next = (char*) m->Next + size;\r
 \r
+       MEMSET_TO_NOT_INIT( *(void**)pp, size );\r
 \r
-       /* \90e\82Ö */\r
-       p = StrT_refFName( StrStart );\r
-       if ( p > StrStart )  p--;\r
-       *p = _T('\0');\r
+       e=0;\r
+fin:\r
+       return  e;\r
+}\r
 \r
 \r
-       /* \83\8b\81[\83g\82È\82ç \ \82ð\95t\82¯\82é */\r
-       if ( p == StrStart + 2 ) {\r
-               *p = _T('\\');  p++;  *p = _T('\0');\r
-       }\r
+int  Set2_allocMulti_sub( Set2* m, void* out_pElem, size_t ElemsSize )\r
+{\r
+       int    e;\r
+       char*  p;\r
 \r
-       if ( out_StrLast != NULL )  *out_StrLast = p;\r
+       e= Set2_expandIfOverByAddr( m, (char*) m->Next + ElemsSize ); IF(e)goto fin;\r
+       p = (char*) m->Next;\r
+       m->Next = p + ElemsSize;\r
+       *(char**)out_pElem = p;\r
 \r
        e=0;\r
 fin:\r
        return  e;\r
-\r
-err:  e = E_Others;  goto fin;\r
 }\r
 \r
 \r
  \r
 /***********************************************************************\r
-  <<< [StrT_getBaseName_part] >>> \r
+  <<< [Set2_expandIfOverByAddr_imp] >>> \r
 ************************************************************************/\r
-int  StrT_getBaseName_part( TCHAR* Str, size_t StrSize, TCHAR* StrStart,\r
-       TCHAR** out_StrLast, const TCHAR* SrcPath )\r
+int  Set2_expandIfOverByAddr_imp( Set2* m, void* OverAddrBasedOnNowFirst )\r
 {\r
-       const TCHAR*  p1;\r
-       const TCHAR*  p2;\r
-       const TCHAR*  p3;\r
-       const TCHAR*  ps;\r
+       void*     new_first;\r
+       unsigned  offset_of_over;\r
+       unsigned  offset_of_next;\r
 \r
-       p1 = StrT_refFName( SrcPath );\r
+       if ( OverAddrBasedOnNowFirst <= m->Over )  return  E_OTHERS;\r
 \r
+       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 ) goto err;\r
+       while ( offset_of_over < offset_of_next )  offset_of_over *= 2;\r
+       IF( offset_of_over >= 0x10000000 ) goto err;\r
 \r
-       //=== # \82ª\96³\82¢\82Æ\82«\81A\8dÅ\8cã\82Ì\83s\83\8a\83I\83h\82Ì\91O\82Ü\82Å\82ª\81ABaseName\r
-       ps = _tcschr( p1, _T('#') );\r
-       if ( ps == NULL ) {\r
-               p2 = _tcsrchr( p1, _T('.') );\r
-               if ( p2 == NULL )  p2 = _tcsrchr( p1, _T('\0') );\r
-       }\r
+       new_first = realloc( m->First, offset_of_over * 2 );\r
+       IF( new_first == NULL ) goto err_fm;\r
 \r
-       //=== # \82ª\82 \82é\82Æ\82«\81A# \82æ\82è\91O\82Å\81A\8dÅ\8cã\82Ì\83s\83\8a\83I\83h\82Ì\91O\82Ü\82Å\82ª\81ABaseName\r
-       else {\r
-               p2 = ps;\r
+       m->Next = (char*) new_first + ( (char*)m->Next - (char*)m->First );\r
+       m->Over = (char*) new_first + offset_of_over * 2;\r
+       m->First = new_first;\r
 \r
-               p3 = p1;\r
-               for (;;) {\r
-                       p3 = _tcschr( p3, _T('.') );\r
-                       if ( p3 == NULL || p3 > ps )  break;\r
-                       p2 = p3;\r
-                       p3 ++;\r
-               }\r
-       }\r
+       #ifdef _DEBUG\r
+       if ( m->PointerOfDebugArray != NULL )\r
+               { *m->PointerOfDebugArray = m->First; }\r
+       #endif\r
 \r
-       return  stcpy_part_r( Str, StrSize, StrStart, out_StrLast, p1, p2 );\r
+       return  0;\r
+\r
+err:     return  E_OTHERS;\r
+err_fm:  return  E_FEW_MEMORY;\r
 }\r
 \r
  \r
 /***********************************************************************\r
-  <<< [StrT_addLastOfFileName] >>> \r
+  <<< [Set2_separate] >>> \r
 ************************************************************************/\r
-int  StrT_addLastOfFileName( TCHAR* out_Path, size_t PathSize,\r
-                             const TCHAR* BasePath, const TCHAR* AddName )\r
+int  Set2_separate( Set2* m, int NextSize, void** allocate_Array )\r
 {\r
-       TCHAR           c;\r
-       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*    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*    term_pos_in_add;\r
-       const TCHAR*  period_pos_in_add  = _tcsrchr( AddName,  _T('.') );  // > term_pos_in_add\r
-\r
-\r
-       MEMSET_TO_NOT_INIT( out_Path, PathSize );\r
-\r
-\r
-       //=== term_pos_in_base\r
-       for ( term_pos_in_base = last_pos_in_base;  term_pos_in_base >= BasePath;  term_pos_in_base -- ) {\r
-               c = *term_pos_in_base;\r
-               if ( c == _T('/') || c == _T('\\') )  break;\r
-       }\r
-\r
-\r
-       //=== term_pos_in_add\r
-       for ( term_pos_in_add = last_pos_in_add;  term_pos_in_add >= AddName;  term_pos_in_add -- ) {\r
-               c = *term_pos_in_add;\r
-               if ( c == _T('/') || c == _T('\\') )  break;\r
-       }\r
-\r
+       int    e;\r
+       void*  p = m->First;\r
 \r
-       //=== add_pos_in_base\r
-       if ( term_pos_in_base < period_pos_in_base ) {\r
-               add_pos_in_base = period_pos_in_base;\r
+       if ( NextSize == 0 ) {\r
+               MEMSET_TO_NOT_INIT( m, sizeof(*m) );\r
+               m->First = NULL;\r
        }\r
        else {\r
-               if ( term_pos_in_base < BasePath )\r
-                       add_pos_in_base = _tcschr( BasePath, _T('\0') );\r
-               else\r
-                       add_pos_in_base = _tcschr( term_pos_in_base, _T('\0') );\r
-       }\r
-\r
-\r
-       //=== setup output parameters\r
-       out_pos   = (char*) out_Path;\r
-       free_size = PathSize;\r
-\r
-\r
-       //=== copy BasePath .. add_pos_in_base\r
-       copy_size = (char*)add_pos_in_base - (char*)BasePath;\r
-       if ( copy_size > free_size ) goto err_fa;\r
-       memcpy( out_pos,  BasePath,  copy_size );\r
-       out_pos   += copy_size;\r
-       free_size -= copy_size;\r
-\r
-\r
-       //=== copy AddName .. last_pos_in_add\r
-       copy_size = (char*)last_pos_in_add - (char*)AddName;\r
-       if ( copy_size > free_size ) goto err_fa;\r
-       memcpy( out_pos,  AddName,  copy_size );\r
-       out_pos   += copy_size;\r
-       free_size -= copy_size;\r
-\r
-\r
-       //=== add name and not change extension\r
-       if ( period_pos_in_add == NULL ) {\r
-\r
-               //=== copy period_pos_in_base .. last_pos_in_base\r
-               if ( period_pos_in_base > term_pos_in_base ) {\r
-                       copy_size = (char*)last_pos_in_base - (char*)period_pos_in_base + sizeof(TCHAR);\r
-                       if ( copy_size > free_size ) goto err_fa;\r
-                       memcpy( out_pos,  period_pos_in_base,  copy_size );\r
-               }\r
-               else {\r
-                       *(TCHAR*)out_pos = _T('\0');\r
-               }\r
+               e= Set2_init( m, NextSize ); IF(e)goto fin;\r
        }\r
+       *allocate_Array = p;\r
 \r
+       e=0;\r
+fin:\r
+       return  e;\r
+}\r
 \r
-       //=== add name and change extension\r
-       else {\r
-\r
-               if ( *(period_pos_in_add + 1) == _T('\0') )\r
-                       *( (TCHAR*)out_pos - 1 ) = _T('\0');\r
-               else\r
-                       *(TCHAR*)out_pos = _T('\0');\r
-       }\r
-\r
-       return  0;\r
 \r
-err_fa:\r
-       return  E_FewArray;\r
\r
+/***********************************************************************\r
+  <<< [Set2_setDebug] >>> \r
+************************************************************************/\r
+#ifdef _DEBUG\r
+void  Set2_setDebug( Set2* m, void** PointerOfDebugArray )\r
+{\r
+       m->PointerOfDebugArray = PointerOfDebugArray;\r
+       *m->PointerOfDebugArray = m->First;\r
 }\r
+#endif\r
 \r
 \r
  \r
@@ -1956,7 +3285,7 @@ void  wprintf_to_debugger( const wchar_t* format, ... )
 /***********************************************************************\r
   <<< [vsprintf_r] >>> \r
 ************************************************************************/\r
-int  vsprintf_r( char* s, size_t s_size, const char* format, va_list va )\r
+errnum_t  vsprintf_r( char* s, size_t s_size, const char* format, va_list va )\r
 {\r
        #if _MSC_VER\r
                #pragma warning(push)\r
@@ -1969,15 +3298,21 @@ int  vsprintf_r( char* s, size_t s_size, const char* format, va_list va )
                #pragma warning(pop)\r
        #endif\r
 \r
-       if ( r == (int) s_size || r == -1 ) { s[s_size-1] = '\0';  return E_FewArray; }\r
-       else  return  0;\r
+       IF( r == (int) s_size )\r
+               { s[s_size-1] = '\0';  return E_FEW_ARRAY; }\r
+       IF( r == -1 )\r
+               { return E_NOT_FOUND_SYMBOL; }  /* Bad character code */\r
+\r
+       return  0;\r
 }\r
+\r
+\r
  \r
 /***********************************************************************\r
   <<< [vswprintf_r] >>> \r
 ************************************************************************/\r
 #ifndef  __linux__\r
-int  vswprintf_r( wchar_t* s, size_t s_size, const wchar_t* format, va_list va )\r
+errnum_t  vswprintf_r( wchar_t* s, size_t s_size, const wchar_t* format, va_list va )\r
 {\r
        size_t  tsize = s_size / sizeof(wchar_t);\r
 \r
@@ -1986,23 +3321,25 @@ int  vswprintf_r( wchar_t* s, size_t s_size, const wchar_t* format, va_list va )
                int  r = _vsnwprintf( s, tsize, format, va );\r
        #pragma warning(pop)\r
 \r
-       if ( r == (int) tsize || r == -1 ) { s[tsize-1] = '\0';  return E_FewArray; }\r
+       if ( r == (int) tsize || r == -1 ) { s[tsize-1] = '\0';  return E_FEW_ARRAY; }\r
        else  return  0;\r
 }\r
 #endif\r
+\r
+\r
  \r
 /***********************************************************************\r
   <<< [stprintf_r] >>> \r
 ************************************************************************/\r
-int  stprintf_r( TCHAR* s, size_t s_size, const TCHAR* format, ... )\r
+errnum_t  stprintf_r( TCHAR* s, size_t s_size, const TCHAR* format, ... )\r
 {\r
-   int e;\r
-   va_list  va;\r
+       errnum_t  e;\r
+       va_list   va;\r
 \r
-   va_start( va, format );\r
-   e = vstprintf_r( s, s_size, format, va );\r
-   va_end( va );\r
-   return e;\r
+       va_start( va, format );\r
+       e = vstprintf_r( s, s_size, format, va );\r
+       va_end( va );\r
+       return  e;\r
 }\r
 \r
 \r
@@ -2010,28 +3347,32 @@ int  stprintf_r( TCHAR* s, size_t s_size, const TCHAR* format, ... )
 /***********************************************************************\r
   <<< [stcpy_part_r] >>> \r
 ************************************************************************/\r
-int  stcpy_part_r( TCHAR* s, size_t s_size, TCHAR* s_start, TCHAR** p_s_last,\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
 {\r
-  size_t  s_space = (char*)s + s_size - (char*)s_start;\r
-  size_t  src_size;\r
+       size_t  s_space = (char*)s + s_size - (char*)s_start;\r
+       size_t  src_size;\r
 \r
-  IF_D( s_start < s || (char*)s_start >= (char*)s + s_size ) return 1;\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
-  src_size = (char*)src_over - (char*)src;\r
-  if ( src_size < s_space ) {\r
-    memcpy( s_start, src, src_size + sizeof(TCHAR) );\r
-    s_start = (TCHAR*)((char*)s_start + src_size);  *s_start = _T('\0');\r
-    if ( p_s_last != NULL )  *p_s_last = s_start;\r
-    return 0;\r
-  }\r
-  else {\r
-    s_space -= sizeof(TCHAR);  memcpy( s, src, s_space );\r
-    s_start = (TCHAR*)((char*)s_start + s_space );  *s_start = '\0';\r
-    if ( p_s_last != NULL )  *p_s_last=s_start;\r
-    return E_FewArray;\r
-  }\r
+       if ( src_over == NULL )  { src_over = _tcschr( src, _T('\0') ); }\r
+       src_size = (char*)src_over - (char*)src;\r
+       IF ( src_size >= s_space ) {\r
+               s_space -= sizeof(TCHAR);\r
+               memcpy( s, src, s_space );\r
+\r
+               s_start = (TCHAR*)((char*)s_start + s_space );\r
+               *s_start = '\0';\r
+\r
+               if ( p_s_last != NULL ) { *p_s_last=s_start; }\r
+               return  E_FEW_ARRAY;\r
+       }\r
+\r
+       memcpy( s_start, src, src_size + sizeof(TCHAR) );\r
+       s_start = (TCHAR*)((char*)s_start + src_size);  *s_start = _T('\0');\r
+       if ( p_s_last != NULL )  { *p_s_last = s_start; }\r
+\r
+       return  0;\r
 }\r
 \r
 \r
@@ -2039,53 +3380,48 @@ int  stcpy_part_r( TCHAR* s, size_t s_size, TCHAR* s_start, TCHAR** p_s_last,
 /***********************************************************************\r
   <<< [stprintf_part_r] >>> \r
 ************************************************************************/\r
-int  stprintf_part_r( TCHAR* s, size_t s_size, TCHAR* s_start, TCHAR** p_s_last,\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
-  int e;  va_list  va;  va_start( va, format );\r
+       errnum_t  e;\r
+       va_list   va;\r
+       va_start( va, format );\r
 \r
-  IF_D( s_start < s || (char*)s_start >= (char*)s + s_size ) return 1;\r
+       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 - (char*)s_start), format, va );\r
-  va_end( va );  if ( p_s_last != NULL )  *p_s_last = _tcschr( s_start, '\0' );\r
-  return e;\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
+       return  e;\r
 }\r
 \r
  \r
 /*=================================================================*/\r
-/* <<< [DebugTools/DebugTools.c] >>> */ \r
+/* <<< [Error4/Error4.c] >>> */ \r
 /*=================================================================*/\r
  \r
 /***********************************************************************\r
-  <<< [TestableDebugBreak] >>> \r
+  <<< [Get_Error4_Variables] >>> \r
 ************************************************************************/\r
-dll_global_g_DebugBreakCount int  g_bTestableDebugBreak_Disable;\r
-dll_global_g_DebugBreakCount int  g_DebugBreakCount;\r
-\r
+static Error4_VariablesClass  gs;\r
+#ifdef _DEBUG\r
+       extern Error4_VariablesClass*  g_Error4_Variables = &gs;\r
+#endif\r
 \r
\r
-/***********************************************************************\r
-  <<< [TestableDebugBreak_isEnabled] >>> \r
-************************************************************************/\r
-int  TestableDebugBreak_isEnabled()\r
+Error4_VariablesClass*  Get_Error4_Variables()\r
 {\r
-  return  g_bTestableDebugBreak_Disable == 0;\r
+       return  &gs;\r
 }\r
 \r
 \r
  \r
-/*=================================================================*/\r
-/* <<< [Error4/Error4.c] >>> */ \r
-/*=================================================================*/\r
\r
 /***********************************************************************\r
-  <<< [Err2_setBreakErrID] >>> \r
+  <<< [SetBreakErrorID] >>> \r
 ************************************************************************/\r
 #if ERR2_ENABLE_ERROR_BREAK\r
 \r
-Err2  g_Err2;  /* \8f\89\8aú\92l\82Í\82·\82×\82Ä\83[\83\8d */\r
+dll_global_g_DebugBreakCount Err2  g_Err2;  /* \8f\89\8aú\92l\82Í\82·\82×\82Ä\83[\83\8d */\r
 \r
-void  Err2_setBreakErrID( int ID )\r
+void  SetBreakErrorID( int ID )\r
 {\r
        Err2*  m = &g_Err2;\r
 \r
@@ -2093,7 +3429,7 @@ void  Err2_setBreakErrID( int ID )
 }\r
 \r
 \r
-int  TryOnIfTrue_imp()\r
+int  TryOnIfTrue_imp( const char* FilePath, int LineNum )\r
  // \95Ô\82è\92l\82Í\81A\83u\83\8c\81[\83N\82·\82é\82©\82Ç\82¤\82©\r
 {\r
        //=== \83G\83\89\81[\8e\9e\82Ì\92\86\92f\8f\88\97\9d\81i\83W\83\83\83\93\83v\81j\82ð\82µ\82Ä\82¢\82é\82Æ\82«\r
@@ -2106,6 +3442,8 @@ int  TryOnIfTrue_imp()
 \r
                m->IsErr = 1;\r
                m->ErrID ++;\r
+               m->FilePath = FilePath;\r
+               m->LineNum = LineNum;\r
 \r
                #if ERR2_ENABLE_ERROR_LOG\r
                        printf( "<ERRORLOG msg=\"raised\" err_id=\"%d\" g_err2=\"0x%08X\"/>\n", m->ErrID, (int) m );\r
@@ -2116,8 +3454,8 @@ int  TryOnIfTrue_imp()
 }\r
 \r
 \r
-//[Err2_clear]\r
-void  Err2_clear()\r
+//[ClearError]\r
+void  ClearError()\r
 {\r
        Err2*  m = &g_Err2;\r
 \r
@@ -2130,19 +3468,33 @@ void  Err2_clear()
 }\r
 \r
 \r
+//[IsErrorMode]\r
+bool  IsErrorMode()\r
+{\r
+       return  ( g_Err2.IsErr != 0 );\r
+}\r
+\r
+\r
 //[IfErrThenBreak]\r
 void  IfErrThenBreak()\r
 {\r
        if ( g_Err2.IsErr && ( g_Err2.ErrID != g_Err2.BreakErrID || g_Err2.BreakErrID == 0 ) ) {  TestableDebugBreak();\r
                // \83E\83H\83b\83`\82Å\81Ag_Err2.ErrID \82Ì\92l(N\82Æ\82·\82é)\82ð\8am\94F\82µ\82Ä\81A\r
-               // \83\81\83C\83\93\8aÖ\90\94\82Å Err2_setBreakErrID( N ); \82ð\8cÄ\82Ñ\8fo\82µ\82Ä\82­\82¾\82³\82¢\81B\r
+               // \83\81\83C\83\93\8aÖ\90\94\82Å SetBreakErrorID( N ); \82ð\8cÄ\82Ñ\8fo\82µ\82Ä\82­\82¾\82³\82¢\81B\r
+               // \83G\83\89\81[\82ª\94­\90\82µ\82½\8fê\8f\8a\82Í\81Ag_Err2.FilePath, g_Err2.LineNum \82Å\82·\81B\r
                // \90³\8fí\8fI\97¹\82µ\82Ä\82¢\82é\82Â\82à\82è\82È\82Ì\82É\82±\82±\82Å\83u\83\8c\81[\83N\82·\82é\82Æ\82«\82Í\81A\r
-               // Err2_clear() \82ð\96Y\82ê\82Ä\82¢\82é\89Â\94\\90«\82ª\82 \82è\82Ü\82·\81B\r
+               // ClearError() \82ð\96Y\82ê\82Ä\82¢\82é\89Â\94\\90«\82ª\82 \82è\82Ü\82·\81B\r
                #if ERR2_ENABLE_ERROR_LOG\r
                        printf( "<ERRORLOG msg=\"IfErrThenBreak\" ErrID=\"%d\" BreakErrID=\"%d\"/>\n", g_Err2.ErrID, g_Err2.BreakErrID );\r
                #endif\r
+\r
+               {\r
+                       char  str[512];\r
+                       sprintf_s( str, _countof(str), "<ERROR file=\"%s(%d)\"/>\n", g_Err2.FilePath, g_Err2.LineNum );\r
+                       OutputDebugStringA( str );\r
+               }\r
        }\r
-       Err2_clear();\r
+       ClearError();\r
 }\r
 \r
 //[PushErr]\r
@@ -2164,3 +3516,99 @@ void  PopErr(  ErrStackAreaClass* ErrStackArea )
 #endif // ERR2_ENABLE_ERROR_BREAK\r
 \r
  \r
+/***********************************************************************\r
+  <<< [g_Error4_String] >>> \r
+************************************************************************/\r
+TCHAR  g_Error4_String[4096];\r
+\r
+\r
\r
+/***********************************************************************\r
+  <<< [Error4_printf] >>> \r
+************************************************************************/\r
+void  Error4_printf( const TCHAR* format, ... )\r
+{\r
+       va_list  va;\r
+       va_start( va, format );\r
+       vstprintf_r( g_Error4_String, sizeof(g_Error4_String), format, va );\r
+       va_end( va );\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
+  <<< [Error4_getErrStr] >>> \r
+************************************************************************/\r
+void  Error4_getErrStr( int ErrNum, TCHAR* out_ErrStr, size_t ErrStrSize )\r
+{\r
+       switch ( ErrNum ) {\r
+\r
+               case  0:\r
+                       stprintf_r( out_ErrStr, ErrStrSize, _T("no error") );\r
+                       break;\r
+\r
+               #ifndef  __linux__\r
+               case  E_GET_LAST_ERROR: {\r
+                       DWORD   err_win;\r
+                       TCHAR*  str_pointer;\r
+\r
+                       err_win = gs.WindowsLastError;\r
+                       if ( err_win == 0 ) { err_win = GetLastError(); }\r
+\r
+                       stprintf_part_r( out_ErrStr, ErrStrSize, out_ErrStr, &str_pointer,\r
+                               _T("<ERROR GetLastError=\"0x%08X\" GetLastErrorStr=\""), err_win );\r
+                       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
+                       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
+                       break;\r
+               }\r
+               #endif\r
+\r
+               default:\r
+                       if ( g_Error4_String[0] != '\0' )\r
+                               stprintf_r( out_ErrStr, ErrStrSize, _T("%s"), g_Error4_String );\r
+                       else\r
+                               stprintf_r( out_ErrStr, ErrStrSize, _T("<ERROR errnum=\"%d\"/>"), ErrNum );\r
+                       break;\r
+       }\r
+}\r
+\r
+\r
\r
+/***********************************************************************\r
+  <<< [SaveWindowsLastError] >>> \r
+************************************************************************/\r
+errnum_t  SaveWindowsLastError()\r
+{\r
+       gs.WindowsLastError = GetLastError();\r
+       return  E_GET_LAST_ERROR;\r
+}\r
+\r
+\r
\r
+/*=================================================================*/\r
+/* <<< [DebugTools/DebugTools.c] >>> */ \r
+/*=================================================================*/\r
\r
+/***********************************************************************\r
+  <<< [TestableDebugBreak] >>> \r
+************************************************************************/\r
+dll_global_g_DebugBreakCount int  g_bTestableDebugBreak_Disable;\r
+dll_global_g_DebugBreakCount int  g_DebugBreakCount;\r
+\r
+\r
\r
+/***********************************************************************\r
+  <<< [TestableDebugBreak_isEnabled] >>> \r
+************************************************************************/\r
+int  TestableDebugBreak_isEnabled()\r
+{\r
+       return  g_bTestableDebugBreak_Disable == 0;\r
+}\r
+\r
+\r
\r