/****************************************************/  
/*                                                  */ 
/* For Win32 that lacks Unix direct support.        */ 
/*    - avoids including "windows.h"                */ 
/*                                                  */ 
/* Copyright (c) 2002 John Popplewell               */ 
/* john@johnnypops.demon.co.uk                      */ 
/*                                                  */ 
/****************************************************/ 
/* $Id: win32_dirent.h,v 1.3 2006/08/27 21:00:55 wkendrick Exp $ */ 

typedef long BOOL;

typedef unsigned int DWORD;

typedef wchar_t TCHAR;

typedef void *HANDLE;


#define MAX_PATH                256
#define INVALID_HANDLE_VALUE    ((HANDLE)(-1))
#define WINAPI                  __stdcall

typedef struct 
{
  
DWORD dwLowDateTime;
  
DWORD dwHighDateTime;

} FILETIME;


typedef struct 
{
  
DWORD dwFileAttributes;
  
FILETIME ftCreationTime;
  
FILETIME ftLastAccessTime;
  
FILETIME ftLastWriteTime;
  
DWORD nFileSizeHigh;
  
DWORD nFileSizeLow;
  
DWORD dwReserved0;
  
DWORD dwReserved1;
  
TCHAR cFileName[MAX_PATH];
  
TCHAR cAlternateFileName[14];

} WIN32_FIND_DATA;



#define FindFirstFile   FindFirstFileA
#define FindNextFile    FindNextFileA
#define FindClose       FindClose
  

#ifdef __cplusplus
extern "C"
{
  
#endif	/* 
 */
  
 extern HANDLE WINAPI FindFirstFile(const char *, WIN32_FIND_DATA *);
   
extern BOOL WINAPI FindNextFile(HANDLE, WIN32_FIND_DATA *);
   
 extern BOOL WINAPI FindClose(HANDLE);
   
 
#ifdef __cplusplus
};

#endif	/* 
 */


struct dirent 
{
  
char d_name[MAX_PATH];
 
};



typedef struct 
{
  
WIN32_FIND_DATA wfd;
  
HANDLE hFind;
  
struct dirent de;
 
} DIR;



extern DIR *opendir(const char *pSpec);

extern void closedir(DIR * pDir);

extern struct dirent *readdir(struct DIR *pDir);


typedef int (*selectCB) (const struct dirent *);

typedef int (*comparCB) (const void *, const void *);


extern int alphasort(const void *a, const void *b);

extern int scandir(const char *dir, struct dirent ***namelist,
		    selectCB select, comparCB compar);

