/****************************************************/
/*                                                  */
/* For Win32 that lacks Unix direct support.        */
/*    - avoids including "windows.h"                */
/*                                                  */
/* Copyright (c) 2002 John Popplewell               */
/* john@johnnypops.demon.co.uk                      */
/*                                                  */
/****************************************************/
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);
