#ifndef __LIBV_H
#define __LIBV_H
#ifndef _RESEARCH_SOURCE
  This header file is not defined in ANSI or POSIX
#endif
#pragma lib "/$M/lib/ape/libv.a"

#ifdef __cplusplus
extern "C" {
#endif

#ifdef stdin
extern FILE     *popen(char *, char *);
extern int      pclose(FILE *);
#endif

#ifdef __DIRENT_H
#ifdef __TYPES_H
extern off_t    telldir(DIR *);
extern void     seekdir(DIR *, off_t);
#endif
#endif

#ifdef __STAT_H
extern int      lstat(char *, struct stat *);
extern int      symlink(char *, char *);
extern int      readlink(char *, char*, int);
#endif

extern void     srand(unsigned int);
extern int      rand(void);
extern int      nrand(int);
extern long     lrand(void);
extern double   frand(void);

extern int      getopt(int, char**, char*);
extern int      opterr;
extern int      optind;
extern int      optopt;
extern char     *optarg;

extern char     *getpass(char *);
extern int      tty_echoon(int);
extern int      tty_echooff(int);

extern int      min(int, int);
extern int      max(int, int);

extern void     _perror(char *);
extern char     *_progname;

extern int      nap(int);

extern char     *setfields(char *);
extern int      getfields(char *, char **, int);
extern int      getmfields(char *, char **, int);

#ifdef __cplusplus
};
#endif

/*
*  FTW stuff
*/

typedef struct FTW Ftw;

#ifdef __cplusplus
extern "C"{
#endif

extern int      ftw(char *path,
                   int (*fn)(char*, struct stat *, int, Ftw *),
                   int depth);

#ifdef __cplusplus
};
#endif

/*
*      Codes for the third argument to the user-supplied function
*      which is passed as the second argument to ftw...
*/

#define FTW_F   0       /* file */
#define FTW_D   1       /* directory */
#define FTW_DNR 2       /* directory without read permission */
#define FTW_NS  3       /* unknown type, stat failed */
#define FTW_DP  4       /* directory, postorder visit */
#define FTW_SL  5       /* symbolic link */
#define FTW_NSL 6       /* stat failed (errno = ENOENT) on symbolic link */

/*      Values the user-supplied function may wish to assign to
       component quit of struct FTW...
*/

#define FTW_SKD 1       /* skip this directory (2nd par = FTW_D) */
#define FTW_SKR 2       /* skip rest of current directory */
#define FTW_FOLLOW 3    /* follow symbolic link */

struct FTW { int quit, base, level;
#ifndef FTW_more_to_come
       };
#endif


#endif /* __LIBV_H */