1/*
2  Copyright (c) 1990-2000 Info-ZIP.  All rights reserved.
3
4  See the accompanying file LICENSE, version 2000-Apr-09 or later
5  (the contents of which are also included in zip.h) for terms of use.
6  If, for some reason, all these files are missing, the Info-ZIP license
7  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
8*/
9#ifndef __amiga_z_stat_h
10#define __amiga_z_stat_h
11
12/* Since older versions of the Lattice C compiler for Amiga, and all current */
13/* versions of the Manx Aztec C compiler for Amiga, either provide no stat() */
14/* function or provide one inadequate for unzip (Aztec's has no st_mode      */
15/* field), we provide our own stat() function in stat.c by Paul Wells, and   */
16/* this fake stat.h file by Paul Kienitz.  Paul Wells originally used the    */
17/* Lattice stat.h but that does not work for Aztec and is not distributable  */
18/* with this package, so I made a separate one.  This has to be pulled into  */
19/* unzip.h when compiling an Amiga version, as "amiga/z-stat.h".             */
20
21/* We also provide here a "struct dirent" for use with opendir() & readdir() */
22/* functions included in amiga/stat.c.  If you use amiga/stat.c, this must   */
23/* be included wherever you use either readdir() or stat().                  */
24
25#ifdef AZTEC_C
26#  define __STAT_H
27#else  /* __SASC */
28/* do not include the following header, replacement definitions are here */
29#  define _STAT_H      /* do not include SAS/C <stat.h> */
30#  define _DIRENT_H    /* do not include SAS/C <dirent.h> */
31#  define _SYS_DIR_H   /* do not include SAS/C <sys/dir.h> */
32#  define _COMMIFMT_H  /* do not include SAS/C <sys/commifmt.h> */
33#  include <dos.h>
34#endif
35#include <libraries/dos.h>
36#include <time.h>
37
38
39struct stat {
40    unsigned short st_mode;
41    time_t st_ctime, st_atime, st_mtime;
42    long st_size;
43    long st_ino;
44    long st_blocks;
45    short st_attr, st_dev, st_nlink, st_uid, st_gid, st_rdev;
46};
47
48#define S_IFDIR  (1<<11)
49#define S_IFREG  (1<<10)
50
51#if 0
52   /* these values here are totally random: */
53#  define S_IFLNK  (1<<14)
54#  define S_IFSOCK (1<<13)
55#  define S_IFCHR  (1<<8)
56#  define S_IFIFO  (1<<7)
57#  define S_IFMT   (S_IFDIR|S_IFREG|S_IFCHR|S_IFLNK)
58#else
59#  define S_IFMT   (S_IFDIR|S_IFREG)
60#endif
61
62#define S_IHIDDEN    (1<<7)
63#define S_ISCRIPT    (1<<6)
64#define S_IPURE      (1<<5)
65#define S_IARCHIVE   (1<<4)
66#define S_IREAD      (1<<3)
67#define S_IWRITE     (1<<2)
68#define S_IEXECUTE   (1<<1)
69#define S_IDELETE    (1<<0)
70
71int stat(const char *name, struct stat *buf);
72int fstat(int handle, struct stat *buf);      /* returns dummy values */
73
74typedef struct dirent {
75    struct dirent       *d_cleanuplink,
76                       **d_cleanupparent;
77    BPTR                 d_parentlock;
78    struct FileInfoBlock d_fib;
79} DIR;
80#define                  d_name  d_fib.fib_FileName
81
82extern unsigned short disk_not_mounted;         /* flag set by opendir() */
83
84DIR *opendir(const char *);
85void closedir(DIR *);
86void close_leftover_open_dirs(void);    /* call this if aborted in mid-run */
87struct dirent *readdir(DIR *);
88int umask(void);
89
90#ifdef AZTEC_C
91int rmdir(const char *);
92int chmod(const char *filename, int bits);
93#endif
94
95#endif /* __amiga_z_stat_h */
96