#ifndef __DIRENT_H__
#define __DIRENT_H__
/*
 * @(#)msd_dir.h 1.4 87/11/06   Public Domain.
 *
 *  A public domain implementation of BSD directory routines for
 *  MS-DOS.  Written by Michael Rendell ({uunet,utai}michael@garfield),
 *  August 1897
 *
 *  Extended by Peter Lim (lim@mullian.oz) to overcome some MS DOS quirks
 *  and returns 2 more pieces of information - file size & attribute.
 *  Plus a little reshuffling of some #define's positions    December 1987
 *
 *  Some modifications by Martin Junius                      02-14-89
 *
 *  AK900712
 *  AK910410    abs_path - make absolute path
 *
 */

#ifdef __EMX__
#include <sys/param.h>
#else
#if defined(__IBMC__) || defined(__IBMCPP__) || defined(XP_W32_MSVC)
#include <stdio.h>
#ifdef MAXPATHLEN
#undef MAXPATHLEN
#endif
#define MAXPATHLEN (FILENAME_MAX * 4)
#define MAXNAMLEN FILENAME_MAX

#else
#include <param.h>
#endif
#endif

#ifdef __cplusplus
extern "C" {
#endif

/* attribute stuff */
#ifndef A_RONLY
#define A_RONLY 0x01
#define A_HIDDEN 0x02
#define A_SYSTEM 0x04
#define A_LABEL 0x08
#define A_DIR 0x10
#define A_ARCHIVE 0x20
#endif

struct dirent {
#if defined(OS2) || defined(WIN32) /* use the layout of EMX to avoid trouble */
    int d_ino;                     /* Dummy */
    int d_reclen;                  /* Dummy, same as d_namlen */
    int d_namlen;                  /* length of name */
    char d_name[MAXNAMLEN + 1];
    unsigned long d_size;
    unsigned short d_attribute; /* attributes (see above) */
    unsigned short d_time;      /* modification time */
    unsigned short d_date;      /* modification date */
#else
    char d_name[MAXNAMLEN + 1]; /* garentee null termination */
    char d_attribute;           /* .. extension .. */
    unsigned long d_size; /* .. extension .. */
#endif
};

typedef struct _dirdescr DIR;
/* the structs do not have to be defined here */

extern DIR *opendir(const char *);
extern DIR *openxdir(const char *, unsigned);
extern struct dirent *readdir(DIR *);
extern void seekdir(DIR *, long);
extern long telldir(DIR *);
extern void closedir(DIR *);
#define rewinddir(dirp) seekdir(dirp, 0L)

extern char *abs_path(const char *name, char *buffer, int len);

#ifndef S_IFMT
#define S_IFMT (S_IFDIR | S_IFREG)
#endif

#ifndef S_ISDIR
#define S_ISDIR(m) (((m)&S_IFMT) == S_IFDIR)
#endif

#ifndef S_ISREG
#define S_ISREG(m) (((m)&S_IFMT) == S_IFREG)
#endif

#ifdef __cplusplus
}
#endif

#endif
