/* [<][>][^][v][top][bottom][index][help] */
/*
 * DIRENT.H (formerly DIRLIB.H)
 *
 * by M. J. Weinstein   Released to public domain 1-Jan-89
 *
 * Because I have heard that this feature (opendir, readdir, closedir)
 * it so useful for programmers coming from UNIX or attempting to port
 * UNIX code, and because it is reasonably light weight, I have included
 * it in the Mingw32 package. I have also added an implementation of
 * rewinddir, seekdir and telldir.
 *   - Colin Peters <colin@bird.fu.is.saga-u.ac.jp>
 *
 *  This code is distributed in the hope that is will be useful but
 *  WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
 *  DISCLAIMED. This includeds but is not limited to warranties of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 *
 * $Revision$
 * $Author$
 * $Date$
 *
 */
#ifndef __STRICT_ANSI__
#ifndef _DIRENT_H_
#define _DIRENT_H_
/* All the headers include this file. */
/*#include <_mingw.h>*/
#include <io.h>
#ifndef RC_INVOKED
#ifdef __cplusplus
extern "C" {
#endif
struct dirent
{
        long            d_ino;          /* Always zero. */
        unsigned short  d_reclen;       /* Always zero. */
        unsigned short  d_namlen;       /* Length of name in d_name. */
        char*           d_name;         /* File name. */
        /* NOTE: The name in the dirent structure points to the name in the
         *       finddata_t structure in the DIR. */
};
/*
 * This is an internal data structure. Good programmers will not use it
 * except as an argument to one of the functions below.
 * dd_stat field is now int (was short in older versions).
 */
typedef struct
{
        /* disk transfer area for this dir */
        struct _finddata_t      dd_dta;
        /* dirent struct to return from dir (NOTE: this makes this thread
         * safe as long as only one thread uses a particular DIR struct at
         * a time) */
        struct dirent           dd_dir;
        /* _findnext handle */
        long                    dd_handle;
        /*
         * Status of search:
         *   0 = not started yet (next entry to read is first entry)
         *  -1 = off the end
         *   positive = 0 based index of next entry
         */
        int                     dd_stat;
        /* given path for dir with search pattern (struct is extended) */
        char                    dd_name[1];
} DIR;
DIR*            opendir (const char*);
struct dirent*  readdir (DIR*);
int             closedir (DIR*);
void            rewinddir (DIR*);
long            telldir (DIR*);
void            seekdir (DIR*, long);
/* wide char versions */
struct _wdirent
{
        long            d_ino;          /* Always zero. */
        unsigned short  d_reclen;       /* Always zero. */
        unsigned short  d_namlen;       /* Length of name in d_name. */
        wchar_t*        d_name;         /* File name. */
        /* NOTE: The name in the dirent structure points to the name in the      *       wfinddata_t structure in the _WDIR. */
};
/*
 * This is an internal data structure. Good programmers will not use it
 * except as an argument to one of the functions below.
 */
typedef struct
{
        /* disk transfer area for this dir */
        struct _wfinddata_t     dd_dta;
        /* dirent struct to return from dir (NOTE: this makes this thread
         * safe as long as only one thread uses a particular DIR struct at
         * a time) */
        struct _wdirent         dd_dir;
        /* _findnext handle */
        long                    dd_handle;
        /*
         * Status of search:
         *   0 = not started yet (next entry to read is first entry)
         *  -1 = off the end
         *   positive = 0 based index of next entry
         */
        int                     dd_stat;
        /* given path for dir with search pattern (struct is extended) */
        wchar_t                 dd_name[1];
} _WDIR;
_WDIR*          _wopendir (const wchar_t*);
struct _wdirent* _wreaddir (_WDIR*);
int             _wclosedir (_WDIR*);
void            _wrewinddir (_WDIR*);
long            _wtelldir (_WDIR*);
void            _wseekdir (_WDIR*, long);
#ifdef  __cplusplus
}
#endif
#endif  /* Not RC_INVOKED */
#endif  /* Not _DIRENT_H_ */
#endif  /* Not __STRICT_ANSI__ */