OSDN Git Service

Version 4.00
[vbslib/main.git] / samples / feq / src / feq.c
diff --git a/samples/feq/src/feq.c b/samples/feq/src/feq.c
deleted file mode 100644 (file)
index 5ba3443..0000000
+++ /dev/null
@@ -1,689 +0,0 @@
-/***********************************************************************\r
-  <<< \81iWin32\83R\83\93\83\\81[\83\8b\82Å\93®\82­\81j\82Ì\83v\83\8d\83O\83\89\83\80 >>> \r
-************************************************************************/\r
-\r
-#define  _WIN32_WINNT 0x0400\r
-#include  <windows.h>\r
-#include  <stdio.h>\r
-#include  <stdarg.h>\r
-#include  <string.h>\r
-#include  <io.h>\r
-#include  <locale.h>\r
-\r
-\r
-void  help(void);\r
-\r
-#define  error()  my_error_imp( __FILE__, __LINE__, -1, "" )\r
-#define  ASSERT( x )  ( (x) ? 0 : my_error_imp( __FILE__, __LINE__, -2, #x ) )\r
-#define  error2_0( id, fmt )    my_error_imp( __FILE__, __LINE__, id, fmt )\r
-#define  error2_1( id, fmt, a )   my_error_imp( __FILE__, __LINE__, id, fmt, a )\r
-#define  error2_2( id, fmt, a,b )   my_error_imp( __FILE__, __LINE__, id, fmt, a,b )\r
-#define  error2_3( id, fmt, a,b,c )   my_error_imp( __FILE__, __LINE__, id, fmt, a,b,c )\r
-#define  error2_4( id, fmt, a,b,c,d )   my_error_imp( __FILE__, __LINE__, id, fmt, a,b,c,d )\r
-#define  error2_5( id, fmt, a,b,c,d,e )   my_error_imp( __FILE__, __LINE__, id, fmt, a,b,c,d,e )\r
-void  my_error_imp( char* file, int line, int id, const char* fmt, ... )\r
-  { if ( fmt[0]!='\0' )  { va_list va;  va_start( va, fmt );  vprintf( fmt, va );  va_end( va ); }\r
-    printf( "ERROR %d in (%d) %s\n", id, line, file );\r
-    exit(4); }\r
-\r
-\r
-typedef  int  (*FileX_NestFindF)( void* obj, const wchar_t* abs_path,\r
-   const wchar_t* step_path, const wchar_t* fname );\r
-void FileX_callByNestFind( const char* path, void* obj, FileX_NestFindF callback );\r
-int  FileX_isDir( const char* path );\r
-int  FileX_isDiff( const char* path1, const char* path2 );\r
-int  FileX_isDiffW( const wchar_t* path1, const wchar_t* path2 );\r
-\r
-\r
\r
-/***********************************************************************\r
-  <<< \83\89\83C\83u\83\89\83\8a >>> \r
-************************************************************************/\r
-void  FileX_callByNestFind( const char* path, void* obj, FileX_NestFindF callback );\r
-void  FileX_callByNestFindW( const wchar_t* path, void* obj, FileX_NestFindF callback );\r
-\r
-\r
-void   StrX_W_cpy( wchar_t* dst, const wchar_t* src, int dst_size );\r
-#define  StrX_Err_BufOver  21\r
-void   StrX_W_printf( wchar_t* s, size_t s_size, const wchar_t* fmt, ... );\r
-void   StrX_W_printf_v( wchar_t* s, size_t s_size, const wchar_t* fmt, va_list va );\r
-wchar_t*  StrX_W_cpyFolder( wchar_t* folder, const wchar_t* path, int folder_size );\r
-wchar_t*  StrX_W_cutFName( wchar_t* path );\r
-int  FileX_isExist( const char* path );\r
-\r
-\r
\r
-/***********************************************************************\r
-  <<< [CmpFolder] \94ä\8ar\82·\82é\83t\83H\83\8b\83_\81i\95Ð\95û\81j >>> \r
-************************************************************************/\r
-typedef struct {\r
-  wchar_t*   base;\r
-  wchar_t**  path;    /* \83t\83@\83C\83\8b\83p\83X\82Ì\94z\97ñ\81i\91\8a\91Î\81j*/\r
-  int        nFile;\r
-  char*      stat;    /* path \82É\91Î\89\9e\82·\82é\83f\81[\83^\81i\94z\97ñ\81j */\r
-  int        stat2;   /* \82à\82¤\95Ð\95û\82Ì\83t\83H\83\8b\83_\82É\8aÖ\82·\82é\83f\81[\83^ */\r
-  wchar_t**  folder;  /* \83t\83H\83\8b\83_\83p\83X\82Ì\94z\97ñ\81i\92Z\82¢\8f\87\81j\81A"." \82Í\93ü\82ê\82È\82¢ */\r
-  int        nFolder;\r
-} CmpFolder;\r
-\r
-\r
-void  CmpFolder_init( CmpFolder* m, const wchar_t* path );\r
-void  CmpFolder_finish( CmpFolder* m );\r
-\r
-void  CmpFolder_scan( CmpFolder* m );\r
-void  CmpFolder_resetStat( CmpFolder* m );\r
-char* CmpFolder_refStat( CmpFolder* m, const wchar_t* step_path );\r
-\r
-\r
\r
-/***********************************************************************\r
-  <<< \81\9f[main] \83t\83@\83C\83\8b\82Ü\82½\82Í\83t\83H\83\8b\83_\82ð\94ä\8ar\82µ\82Ü\82· >>> \r
-\81y\88ø\90\94\81z\r
-  \81Eargv[1];     \83t\83@\83C\83\8b\82Ü\82½\82Í\83t\83H\83\8b\83_\82Ì\83p\83X\r
-  \81Eargv[2];     \83t\83@\83C\83\8b\82Ü\82½\82Í\83t\83H\83\8b\83_\82Ì\83p\83X\r
-  \81Eerrorlevel;  0=\93¯\82¶ 1=\88á\82¤\r
-************************************************************************/\r
-int  chkSameFileByFo2( void* obj, const wchar_t* abs_path,  const wchar_t* step_path, const wchar_t* fname );\r
-\r
-\r
-\r
-int  main( int argc, char* argv[] )\r
-{\r
-  int  ret;\r
-\r
-  setlocale(LC_ALL, "Japanese");\r
-\r
-  if ( argc != 3 )  { help();  return 1; }\r
-\r
-  if ( FileX_isDir( argv[1] ) && FileX_isDir( argv[2] ) ) {\r
-    CmpFolder  fo1;\r
-    int  r, i;\r
-    wchar_t  path[4096];\r
-    wchar_t  path2[4096];\r
-    wchar_t  base2[4096];\r
-\r
-    /* \83t\83@\83C\83\8b\82Ì\97L\96³\82ð\83`\83F\83b\83N\82µ\82Ü\82· */\r
-    r = MultiByteToWideChar( CP_OEMCP, MB_PRECOMPOSED, argv[1], -1,\r
-                            path, sizeof(path) / 2 );\r
-    if ( r == 0 )  error();\r
-    CmpFolder_init( &fo1, path );\r
-    CmpFolder_scan( &fo1 );\r
-    CmpFolder_resetStat( &fo1 );\r
-    fo1.stat2 = 0;\r
-    FileX_callByNestFind( argv[2], &fo1, chkSameFileByFo2 );\r
-    for ( i = 0; i < fo1.nFile; i++ ) {\r
-      if ( fo1.stat[i] != 1 )  break;\r
-    }\r
-    if ( i == fo1.nFile && fo1.stat2 == 0 ) {\r
-\r
-      r = MultiByteToWideChar( CP_OEMCP, MB_PRECOMPOSED, argv[2], -1,\r
-                               base2, sizeof(base2) / 2 );\r
-      if ( r == 0 )  error();\r
-\r
-      /* \83t\83@\83C\83\8b\82Ì\93à\97e\82ð\83`\83F\83b\83N\82µ\82Ü\82· */\r
-      for ( i = 0; i < fo1.nFile; i++ ) {\r
-        StrX_W_printf( path,  sizeof(path),  L"%s\\%s", fo1.base, fo1.path[i] );\r
-        StrX_W_printf( path2, sizeof(path2), L"%s\\%s", base2, fo1.path[i] );\r
-\r
-        if ( FileX_isDiffW( path, path2 ) != 0 )  break;\r
-      }\r
-      ret = ( i == fo1.nFile ) ? 0 : 1;\r
-    }\r
-    else\r
-      ret = 1;\r
-  }\r
-  else if ( FileX_isExist( argv[1] ) && FileX_isExist( argv[2] ) )\r
-    ret = ( FileX_isDiff( argv[1], argv[2] ) == 0 ? 0 : 1 );\r
-  else {\r
-    if ( ! FileX_isExist( argv[1] ) )  printf( "Not found %s\n", argv[1] );\r
-    if ( ! FileX_isExist( argv[2] ) )  printf( "Not found %s\n", argv[2] );\r
-    ret = 2;\r
-  }\r
-\r
-  if ( ret == 0 )  printf( "same.\n" );\r
-  else if ( ret == 1 )  printf( "different.\n" );\r
-\r
-  return  ret;\r
-}\r
-\r
-\r
-int  chkSameFileByFo2( void* obj, const wchar_t* abs_path,  const wchar_t* step_path, const wchar_t* fname )\r
-{\r
-  CmpFolder*  fo1 = (CmpFolder*) obj;\r
-  char*   p;\r
-\r
-  p = CmpFolder_refStat( fo1, step_path );\r
-  if ( p != NULL )  *p = 1;\r
-  else  fo1->stat2 = 1;\r
-\r
-  return  0;\r
-}\r
-\r
-\r
-\r
\r
-/***********************************************************************\r
-  <<< [help] >>> \r
-************************************************************************/\r
-void  help()\r
-{\r
-  printf( "feq (path1) (path2)\n" );\r
-  printf( "  compare binary files or folders (sub folders)\n" );\r
-}\r
-\r
-\r
\r
-/*-------------------------------------------------------------------------*/\r
-/* \81\9f<<<< \83\89\83C\83u\83\89\83\8a >>>> */ \r
-/*-------------------------------------------------------------------------*/\r
-\r
-\r
\r
-/***********************************************************************\r
-  <<< [FileX_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
-\81y\88ø\90\94\81z\r
-  \81Echar*  path;                \83t\83@\83C\83\8b\82ð\97ñ\8b\93\82·\82é\83t\83H\83\8b\83_\82Ì\83p\83X\r
-  \81Evoid*  obj;                 \83R\81[\83\8b\83o\83b\83N\8aÖ\90\94\82Ì\91æ1\88ø\90\94\82É\93n\82·\92l\r
-  \81EFileX_NestFindF  callback;  \83R\81[\83\8b\83o\83b\83N\8aÖ\90\94\81i\83t\83@\83C\83\8b\82Ì\83p\83X\82ð\88ø\90\94\82É\8e\9d\82Â\81j\r
-************************************************************************/\r
-typedef struct {\r
-  void*            obj;\r
-  FileX_NestFindF  callback;\r
-  wchar_t*         step_path;\r
-  wchar_t*         fname;\r
-  wchar_t          abs_path[4096];\r
-} FileX_CallByNestFindData;\r
-\r
-void  FileX_callByNestFind_sub( FileX_CallByNestFindData* m );\r
-\r
-\r
-void  FileX_callByNestFind( const char* path, void* obj, FileX_NestFindF callback )\r
-{\r
-  FileX_CallByNestFindData  data;\r
-\r
-  {\r
-    int  r;\r
-    wchar_t*   p;\r
-\r
-    r = MultiByteToWideChar( CP_OEMCP, MB_PRECOMPOSED, path, -1,\r
-                           data.abs_path, sizeof(data.abs_path) / 2 );\r
-    if ( r == 0 )  error();\r
-\r
-\r
-    /* abs_path \82Ì\8dÅ\8cã\82É \ \82ª\96³\82¢\82È\82ç\92Ç\89Á\82·\82é */\r
-    p = wcschr( data.abs_path, L'\0' );\r
-    p--;\r
-    if ( *p != L'\\' ) {\r
-      p++;\r
-      if ( p >= data.abs_path + (sizeof(data.abs_path) / 2) - 1 )  error();\r
-      *p = L'\\';\r
-    }\r
-\r
-\r
-    /* data \82ð\8f\89\8aú\89»\82·\82é */\r
-    data.obj = obj;\r
-    data.callback = callback;\r
-    data.step_path = p + 1;\r
-    data.fname = p + 1;\r
-  }\r
-\r
-  /* \8dÄ\8bN\8cÄ\82Ñ\8fo\82µ\8aÖ\90\94\82Ö */\r
-  FileX_callByNestFind_sub( &data );\r
-}\r
-\r
-\r
-void  FileX_callByNestFindW( const wchar_t* path, void* obj, FileX_NestFindF callback )\r
-{\r
-  FileX_CallByNestFindData  data;\r
-\r
-  {\r
-    wchar_t*   p;\r
-\r
-    StrX_W_cpy( data.abs_path, path, sizeof(data.abs_path) );\r
-\r
-\r
-    /* abs_path \82Ì\8dÅ\8cã\82É \ \82ª\96³\82¢\82È\82ç\92Ç\89Á\82·\82é */\r
-    p = wcschr( data.abs_path, L'\0' );\r
-    p--;\r
-    if ( *p != L'\\' ) {\r
-      p++;\r
-      if ( p >= data.abs_path + (sizeof(data.abs_path) / 2) - 1 )  error();\r
-      *p = L'\\';\r
-    }\r
-\r
-\r
-    /* data \82ð\8f\89\8aú\89»\82·\82é */\r
-    data.obj = obj;\r
-    data.callback = callback;\r
-    data.step_path = p + 1;\r
-    data.fname = p + 1;\r
-  }\r
-\r
-  /* \8dÄ\8bN\8cÄ\82Ñ\8fo\82µ\8aÖ\90\94\82Ö */\r
-  FileX_callByNestFind_sub( &data );\r
-}\r
-\r
-\r
-void  FileX_callByNestFind_sub( FileX_CallByNestFindData* m )\r
-{\r
-  HANDLE  find;\r
-  WIN32_FIND_DATAW  data;\r
-  wchar_t*  p;\r
-  int  done;\r
-\r
-\r
-  /* * \82ð\92Ç\89Á */\r
-  p = m->fname;\r
-  if ( p >= m->abs_path + (sizeof(m->abs_path) / 2) - 2 )  error();\r
-  *p = L'*';  *(p+1) = L'\0';\r
-\r
-\r
-  /* \83t\83@\83C\83\8b\82©\83t\83H\83\8b\83_\82ð\97ñ\8b\93\82µ\82Ü\82· */\r
-  find = FindFirstFileExW( m->abs_path, FindExInfoStandard, &data,\r
-    FindExSearchNameMatch, NULL, 0 );\r
-  done = ( find == INVALID_HANDLE_VALUE );\r
-\r
-  while (!done)\r
-  {\r
-    if ( wcscmp( data.cFileName, L"." ) == 0 ||\r
-         wcscmp( data.cFileName, L".." ) == 0 ) {\r
-      done = ! FindNextFileW( find, &data );\r
-      continue;\r
-    }\r
-\r
-    StrX_W_cpy( m->fname, data.cFileName,\r
-      sizeof(m->abs_path) - ( (char*)m->fname - (char*)m->abs_path ) );\r
-\r
-    if ( data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) {\r
-      p = wcschr( m->fname, L'\0' );\r
-      if ( p >= m->abs_path + (sizeof(m->abs_path) / 2) - 2 )  error();\r
-      *p = L'\\';  *(p+1) = L'\0';\r
-      {  wchar_t*  w = m->fname;   m->fname = p + 1;   p = w; }\r
-\r
-      FileX_callByNestFind_sub( m );  /* \8dÄ\8bN\8cÄ\82Ñ\8fo\82µ */\r
-\r
-      m->fname = p;\r
-    }\r
-    else {\r
-      m->callback( m->obj, m->abs_path, m->step_path, m->fname );\r
-    }\r
-\r
-    done = ! FindNextFileW( find, &data );\r
-  }\r
-  FindClose( find );\r
-}\r
-\r
-\r
-\r
\r
-/************************************************************************\r
-  <<< [FileX_isExist] \83t\83@\83C\83\8b\89»\83t\83H\83\8b\83_\82Ì\91\8dÝ\82ð\8am\82©\82ß\82é >>> \r
-*************************************************************************/\r
-int  FileX_isExist( const char* path )\r
-{\r
-  return  ( GetFileAttributes( path ) != -1 );\r
-}\r
-\r
-\r
\r
-/************************************************************************\r
-  <<< [FileX_isDir] \83t\83H\83\8b\83_\82Ì\91\8dÝ\82ð\8am\82©\82ß\82é >>> \r
-\81y\88ø\90\94\81z\r
-  \81Econst char* fname;  \83t\83H\83\8b\83_\82Ö\82Ì\83p\83X\96¼\r
-  \81Ebool \95Ô\82è\92l;        \83t\83H\83\8b\83_\82Ì\91\8dÝ\r
-\81y\95â\91«\81z\r
-\81E\91\8a\91Î\83p\83X\82É\82æ\82Á\82Ä\8ew\92è\82·\82é\8fê\8d\87\81A\8c»\8dÝ\8eÀ\8ds\92\86\82Ì\83t\83H\83\8b\83_\82©\82ç\82Ì\91\8a\91Î\83p\83X\82É\r
-  \82È\82è\82Ü\82·\81B\r
-\81E\8ew\92è\82µ\82½\83p\83X\82ª\83t\83@\83C\83\8b\82É\88ê\92v\82·\82é\8fê\8d\87\81Afalse \82ð\95Ô\82µ\82Ü\82·\81B\r
-*************************************************************************/\r
-int  FileX_isDir( const char* path )\r
-{\r
-  DWORD  a;\r
-\r
-  a = GetFileAttributes( path );\r
-  if ( a == -1 )  return  0;\r
-  return  ( a & FILE_ATTRIBUTE_DIRECTORY ) != 0;\r
-}\r
-\r
-\r
\r
-/*************************************************************************\r
-  <<< [FileX_isDiff] \82Q\82Â\82Ì\83t\83@\83C\83\8b\82Ì\93à\97e\82ª\93¯\88ê\82©\82Ç\82¤\82©\92²\82×\82é >>> \r
-\81y\88ø\90\94\81z\r
-  \81Echar*  path1, path2;  \94ä\8ar\82·\82é\83t\83@\83C\83\8b\82Ì\83p\83X\r
-  \81Eint  \95Ô\82è\92l;   0=\93¯\88ê\81A 1=\88Ù\82È\82é\81A-1=fname1 \82ª\8aJ\82¯\82È\82¢\81A\r
-                  -2=fname2 \82ª\8aJ\82¯\82È\82¢\81A-3=fname1,fname2 \82Æ\82à\8aJ\82¯\82È\82¢\r
-\81y\95â\91«\81z\r
-\81E\97¼\95û\82Ì\83t\83@\83C\83\8b\82ª\91\8dÝ\82µ\82Ä\81A\93à\97e\82ª\93¯\88ê\82©\82Ç\82¤\82©\82ð\94»\92è\82·\82é\82È\82ç\82Î\81A\r
-  \95Ô\82è\92l\82Í bool \92l\81i\82O\82©\82O\88È\8aO\82©\81j\82Æ\82µ\82Ä\94»\92è\82·\82é\82±\82Æ\82ª\82Å\82«\82Ü\82·\81B\r
-**************************************************************************/\r
-int  FileX_isDiff_imp( FILE* file1, FILE* file2 );\r
-\r
-int  FileX_isDiff( const char* path1, const char* path2 )\r
-{\r
-  return  FileX_isDiff_imp( fopen( path1, "rb" ), fopen( path2, "rb" ) );\r
-}\r
-\r
-\r
-int  FileX_isDiffW( const wchar_t* path1, const wchar_t* path2 )\r
-{\r
-  return  FileX_isDiff_imp( _wfopen( path1, L"rb" ), _wfopen( path2, L"rb" ) );\r
-}\r
-\r
-\r
-int  FileX_isDiff_imp( FILE* file1, FILE* file2 )\r
-{\r
-  int  ret;\r
-  int  size1, size2;\r
-  char  buf1[256], buf2[256];\r
-\r
-  if ( file1 == NULL ) {\r
-    if ( file2 == NULL )  { ret = -3;  goto ret; }\r
-    else {\r
-      fclose( file2 );\r
-      { ret = -1;  goto ret; }\r
-    }\r
-  }\r
-  if ( file2 == NULL ) {\r
-    fclose( file1 );\r
-    { ret = -2;  goto ret; }\r
-  }\r
-\r
-  ret = 1;\r
-  for (;;) {\r
-    size1 = fread( buf1, 1, 256, file1 );\r
-    size2 = fread( buf2, 1, 256, file2 );\r
-\r
-    if ( size1 != size2 )  break;\r
-    if ( memcmp( buf1, buf2, size1 ) != 0 )  break;\r
-\r
-    if ( size1 != 256 )  { ret = 0; break; }\r
-  }\r
-\r
-  fclose( file1 );\r
-  fclose( file2 );\r
-\r
-ret:\r
-  return  ret;\r
-}\r
-\r
-\r
\r
-/***********************************************************************\r
-  <<< [StrX_W_printf] \83\8f\83C\83h\95\8e\9a\97ñ\82É\8fo\97Í\82·\82é printf >>> \r
-************************************************************************/\r
-void   StrX_W_printf( wchar_t* s, size_t s_size, const wchar_t* fmt, ... )\r
-{\r
-  va_list  va;\r
-\r
-  va_start( va, fmt );\r
-  StrX_W_printf_v( s, s_size, fmt, va );\r
-  va_end( va );\r
-}\r
-\r
-\r
-\r
\r
-/***********************************************************************\r
-  <<< [StrX_W_printf_v] \95\8e\9a\97ñ\82É\8fo\97Í\82·\82é printf >>> \r
-************************************************************************/\r
-void   StrX_W_printf_v( wchar_t* s, size_t s_size, const wchar_t* fmt, va_list va )\r
-{\r
-  s_size = s_size / 2;\r
-  s[s_size - 1] = '\0';\r
-\r
-  _vsnwprintf( s, s_size, fmt, va );\r
-\r
-  if ( s[s_size - 1] != '\0' ) {\r
-    s[s_size - 1] = L'\0';\r
-    error2_0( StrX_Err_BufOver, "" );\r
-  }\r
-}\r
-\r
-\r
\r
-/***********************************************************************\r
-  <<< [StrX_W_cpyFolder] \83p\83X\92\86\82Ì\83t\83@\83C\83\8b\96¼\88È\8aO\82ð\83R\83s\81[\82·\82é >>> \r
-\81y\88ø\90\94\81z\r
-  \81Ewchar_t*  folder;    \83t\83H\83\8b\83_\83p\83X\82ð\8ai\94[\82·\82é\83A\83h\83\8c\83X\r
-  \81Ewchar_t*  path;      \83R\83s\81[\8c³\82Ì\83p\83X\r
-  \81Eint  folder_size;    folder \82Ì\83\81\83\82\83\8a\83T\83C\83Y\r
-  \81Ewchar_t*  \95Ô\82è\92l;    folder \82Æ\93¯\82\r
-\81y\95â\91«\81z\r
-\81Efolder \82Æ path \82ª\93¯\82\83A\83h\83\8c\83X\82Å\82à\8d\\82¢\82Ü\82¹\82ñ\81B\r
-************************************************************************/\r
-wchar_t*  StrX_W_cpyFolder( wchar_t* folder, const wchar_t* path, int folder_size )\r
-{\r
-  if ( folder != path )  StrX_W_cpy( folder, path, folder_size );\r
-  StrX_W_cutFName( folder );\r
-  return  folder;\r
-}\r
-\r
-\r
\r
-/***********************************************************************\r
-  <<< [StrX_W_cutFName] \83p\83X\92\86\82Ì\83t\83@\83C\83\8b\96¼\82ð\8dí\8f\9c\82·\82é >>> \r
-\81y\88ø\90\94\81z\r
-  \81Echar* \95Ô\82è\92l;   path \82Æ\93¯\82\r
-\81y\95â\91«\81z\r
-\81E\83t\83H\83\8b\83_\82Ì\8bæ\90Ø\82è\8bL\8d\86\82Í '\' \82Å\82à '/' \82Å\82à\8d\\82¢\82Ü\82¹\82ñ\r
-\81y\97á\81z\r
-\81Epath="b:\dir\fname.txt" \82È\82ç "b:\dir"\r
-\81Epath="b:\dir\subdir\" \82È\82ç "b:\dir"\r
-\81Epath="step\" \82È\82ç ""\r
-\81Epath="step" \82È\82ç ""\r
-************************************************************************/\r
-wchar_t*  StrX_W_cutFName( wchar_t* path )\r
-{\r
-  wchar_t*  p;\r
-  wchar_t*  p_last;\r
-\r
-  /* \90â\91Î\83p\83X\82È\82ç\83\8b\81[\83g\82Ì\88Ê\92u\82ð\92T\82· */\r
-  p = path;\r
-  while ( *p != L':' && *p != L'/' && *p != L'\\' && *p != L'\0' )  p++;\r
-  if ( *p == L':' ) {\r
-    while ( *p != L'/' && *p != L'\\' ) {\r
-      if ( *p == L'\0' )  return  path;\r
-      p++;\r
-    }\r
-  }\r
-  else\r
-    p = NULL;\r
-\r
-\r
-  /* \96\96\94ö\82Ì\83f\83B\83\8c\83N\83g\83\8a\8bæ\90Ø\82è\8bL\8d\86\82ð\8eæ\82è\8f\9c\82­ */\r
-  p_last = wcsrchr( path, L'\0' ) - 1;\r
-  if ( *p_last == L'\\' || *p_last == L'/' ) {\r
-    *p_last = '\0';  p_last --;\r
-  }\r
-\r
-  /* \83t\83@\83C\83\8b\96¼\82Ì\91O\82Ì\83f\83B\83\8c\83N\83g\83\8a\8bæ\90Ø\82è\8bL\8d\86\82ð\92T\82· */\r
-  while ( *p_last != L'/' && *p_last != L'\\' && p_last > path )  p_last --;\r
-\r
-\r
-  /* \83\8b\81[\83g\82Å\82È\82¢\8cÀ\82è\81A\82¢\82¿\82Î\82ñ\8cã\82ë\82Ì\83f\83B\83\8c\83N\83g\83\8a\8bæ\90Ø\82è\8bL\8d\86\82ð '\0'\82É\82·\82é */\r
-  if ( p == NULL || p < p_last ) {\r
-    *p_last = L'\0';\r
-  }\r
-\r
-  return  path;\r
-}\r
-\r
-\r
-\r
\r
-/***********************************************************************\r
-  <<< [StrX_W_cpy] \83\8f\83C\83h\95\8e\9a\97ñ\82ð\83R\83s\81[\82·\82é >>> \r
-\81y\88ø\90\94\81z\r
-  \81Ewchar_t* dst;       \83R\83s\81[\90æ\r
-  \81Ewchar_t* src;       \83R\83s\81[\8c³\r
-  \81Eint      dst_size;  dst \82Ì\83\81\83\82\83\8a\83T\83C\83Y\81i\83o\83C\83g\81j\r
-\81y\95â\91«\81z\r
-\81Edst \82Ì\97e\97Ê\82ð\92´\82¦\82é\82Æ\81AStrX_Err_BufOver \83G\83\89\81[\82É\82È\82è\82Ü\82·\81B\r
-************************************************************************/\r
-void  StrX_W_cpy( wchar_t* dst, const wchar_t* src, int dst_size )\r
-{\r
-  int  src_len = wcslen( src ) * 2;\r
-\r
-  if ( src_len >= dst_size - 1 ) {  /* \97á src="a" \81¨ src_len = 2, dst_size = 3 \82Å\83G\83\89\81[ */\r
-    if ( dst_size > 0 ) {\r
-      memcpy( dst, src, (dst_size - 2) & ~1 );\r
-      *(wchar_t*)( (char*) dst + dst_size - 2 ) = L'\0';\r
-    }\r
-    error2_1( StrX_Err_BufOver, "BufOver:%p", dst );\r
-  }\r
-  else\r
-    wcscpy( dst, src );\r
-}\r
-\r
-\r
-\r
\r
-/*-------------------------------------------------------------------------*/\r
-/* \81\9f<<<< (CmpFolder) \94ä\8ar\82·\82é\83t\83H\83\8b\83_\81i\95Ð\95û\81j >>>> */ \r
-/*-------------------------------------------------------------------------*/\r
-\r
-\r
\r
-/***********************************************************************\r
-  <<< [CmpFolder_init] >>> \r
-************************************************************************/\r
-void  CmpFolder_init( CmpFolder* m, const wchar_t* path )\r
-{\r
-  if ( _waccess( path, 0 ) != 0 )  error();\r
-\r
-  m->base = malloc( ( wcslen( path ) + 1 ) * 2 );\r
-  wcscpy( m->base, path );\r
-  m->path = NULL;\r
-  m->nFile = 0;\r
-  m->stat = NULL;\r
-  m->folder = NULL;\r
-  m->nFolder = 0;\r
-}\r
-\r
-\r
-\r
\r
-/***********************************************************************\r
-  <<< [CmpFolder_finish] >>> \r
-************************************************************************/\r
-void  CmpFolder_finish( CmpFolder* m )\r
-{\r
-  int  i;\r
-\r
-  free( m->base );\r
-  if ( m->stat != NULL )  free( m->stat );\r
-\r
-  for ( i = 0; i < m->nFile; i++ )\r
-    free( m->path[i] );\r
-\r
-  for ( i = 0; i < m->nFolder; i++ )\r
-    free( m->folder[i] );\r
-}\r
-\r
-\r
-\r
\r
-/***********************************************************************\r
-  <<< [CmpFolder_scan] >>> \r
-\81y\95â\91«\81z\r
-\81E\83J\83\8c\83\93\83g\83t\83H\83\8b\83_\82Ì m->name \83T\83u\83t\83H\83\8b\83_\82ð\83X\83L\83\83\83\93\82µ\82Ü\82·\81B\r
-************************************************************************/\r
-int  CmpFolder_scan_sub( void* obj, const wchar_t* abs_path, const wchar_t* step_path, const wchar_t* fname );\r
-\r
-\r
-void  CmpFolder_scan( CmpFolder* m )\r
-{\r
-  int  i;\r
-\r
-  for ( i = 0; i < m->nFile; i++ )\r
-    free( m->path[i] );\r
-\r
-  for ( i = 0; i < m->nFolder; i++ )\r
-    free( m->folder[i] );\r
-\r
-  m->nFile = 0;\r
-  m->nFolder = 0;\r
-  FileX_callByNestFindW( m->base, m, CmpFolder_scan_sub );\r
-}\r
-\r
-\r
-\r
-int  CmpFolder_scan_sub( void* obj, const wchar_t* abs_path, const wchar_t* step_path, const wchar_t* fname )\r
-{\r
-  CmpFolder*  m = (CmpFolder*) obj;\r
-  wchar_t**  p;\r
-\r
-\r
-  /* \83t\83@\83C\83\8b\83p\83X\82ð\93o\98^\82·\82é */\r
-  m->nFile ++;\r
-  m->path = (wchar_t**) realloc( m->path, m->nFile * sizeof(wchar_t*) );\r
-\r
-  p = &m->path[ m->nFile - 1 ];\r
-  *p = malloc( ( wcslen( step_path ) + 1 ) * 2 );\r
-  wcscpy( *p, step_path );\r
-\r
-\r
-  /* \83t\83H\83\8b\83_\83p\83X\82ð\93o\98^\82·\82é */\r
-  {\r
-    int  i;\r
-    wchar_t  path[4096];\r
-\r
-    StrX_W_cpyFolder( path, step_path, sizeof(path) );\r
-    for ( i = 0; i < m->nFolder; i++ )\r
-      if ( wcscmp( path, m->folder[i] ) == 0 )  break;\r
-\r
-    if ( i == m->nFolder && path[0] != L'\0' ) {\r
-      m->nFolder ++;\r
-      m->folder = (wchar_t**) realloc( m->folder, m->nFolder * sizeof(wchar_t*) );\r
-\r
-      p = &m->folder[ m->nFolder - 1 ];\r
-      *p = malloc( ( wcslen( path ) + 1 ) * 2 );\r
-      wcscpy( *p, path );\r
-\r
-      for ( p;  p > m->folder;  p-- ) {\r
-        if ( wcslen( *p ) >= wcslen( *(p - 1) ) )  break;\r
-        { wchar_t*  w = *p;  *p = *(p - 1);  *(p - 1) = w; }\r
-      }\r
-    }\r
-  }\r
-\r
-  return  0;\r
-}\r
-\r
-\r
-\r
\r
-/***********************************************************************\r
-  <<< [CmpFolder_resetStat] m->stat \94z\97ñ\82ð\8am\95Û\82µ 0 \82Å\8f\89\8aú\89»\82µ\82Ü\82· >>> \r
-************************************************************************/\r
-void  CmpFolder_resetStat( CmpFolder* m )\r
-{\r
-  m->stat = realloc( m->stat, m->nFile * sizeof(*m->stat) );\r
-\r
-  memset( m->stat, 0, m->nFile * sizeof(*m->stat) );\r
-}\r
-\r
\r
-/***********************************************************************\r
-  <<< [CmpFolder_refStat] \83t\83@\83C\83\8b\82É\91Î\89\9e\82µ\82½ m->stat \82ð\8eQ\8fÆ\82µ\82Ü\82· >>> \r
-\81y\88ø\90\94\81z\r
-  \81Ewchat_t*  step_path;  \83t\83@\83C\83\8b\83p\83X\81i\83x\81[\83X\82©\82ç\82Ì\91\8a\91Î\81j\r
-  \81Echar*  \95Ô\82è\92l;        step_path \82É\91Î\89\9e\82µ\82½\94C\88Ó\82Ì1\83o\83C\83g\97Ì\88æ(stat\93à)\82Ì\83A\83h\83\8c\83X\r
-************************************************************************/\r
-char*  CmpFolder_refStat( CmpFolder* m, const wchar_t* step_path )\r
-{\r
-  int  i;\r
-\r
-  if ( m->stat == NULL )  error();\r
-\r
-  for ( i = 0; i < m->nFile;  i++ ) {\r
-    if ( wcscmp( m->path[i], step_path ) == 0 )  break;\r
-  }\r
-  if ( i == m->nFile )  return  NULL;\r
-  else                  return  m->stat + i;\r
-}\r
-\r
-\r
-\r
\r