#ifndef WIN32
#  include <fcntl.h>
#  include <fnmatch.h>
#  include <sys/stat.h>
#  include <sys/types.h>
#  include <unistd.h>
#  include <errno.h>
#  include <dirent.h>
#else /* !WIN32 */
#  include <windows.h>
#  include <fstream>
#endif


#include "fileops.h"

Directory foGetDirectory(const std::string& pathname, const std::string& pattern)
{
	Directory dir_list;

  int count=0;
#ifndef WIN32 
  DIR* dp;
  dirent* de; 
  
  dp = ::opendir(pathname.c_str());

  if (dp == 0)
    {
      fprintf(stderr, "System: Couldn't open: %s\n", pathname.c_str() );
    }
  else
    {
      while ((de = ::readdir(dp)) != 0) 
        {
          if (fnmatch(pattern.c_str(), de->d_name, FNM_PATHNAME) == 0) 
            {
              if (de->d_type == 'd')
                {
                  //dir_list[count] = pathname + de->d_name;
		  //fprintf(stderr, "Directory: Added: %s\n", de->d_name );
                }
              else 
                {
                  //dir_list[count] = pathname + de->d_name;
		  dir_list.insert( dir_list.end(), pathname + de->d_name );
                }
            }

		  count++;
        }
      
      closedir(dp);
    }

#else /* !WIN32 */
  WIN32_FIND_DATA coFindData;
  std::string FindFileDir = pathname + "\\" + pattern;
  std::string FileLocation;
  HANDLE hFind = FindFirstFile(TEXT(FindFileDir.c_str()),&coFindData);

  if (hFind == INVALID_HANDLE_VALUE)
    {
      //std::cout << _("System: Couldn't open: ") << pathname << std::endl;
    }
  
   do
     {     
       //dir_list.push_back(DirectoryEntry(coFindData.cFileName));
		 dir_list.insert( dir_list.end(), pathname + coFindData.cFileName );

		 count++;
     }
   while (FindNextFile(hFind,&coFindData));
 
   FindClose(hFind);  
 #endif
 
   //dir_list.
   return dir_list;
 }
