~ubuntu-branches/ubuntu/precise/exuberant-ctags/precise

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/*
*   $Id: e_mac.h 443 2006-05-30 04:37:13Z darren $
*
*   Copyright (c) 2001, Maarten L. Hekkelman
*
*   Author: Maarten L. Hekkelman <maarten@hekkelman.com>
*           http://www.hekkelman.com
*
*   This source code is released for free distribution under the terms of the
*   GNU General Public License. It is provided on an as-is basis and no
*   responsibility is accepted for its failure to perform as expected.
*
*   Configures ctags for Macintosh environment.
*/
#ifndef E_MAC_H
#define E_MAC_H

#define BUILD_MPW_TOOL 1

#define MACROS_USE_PATTERNS	1
#define DEFAULT_FILE_FORMAT 2
#define INTERNAL_SORT 1
#define TMPDIR "/tmp"
#define NEED_PROTO_TRUNCATE 1
#define STDC_HEADERS 1
#define HAVE_CLOCK 1
#define HAVE_FGETPOS 1
#define HAVE_OPENDIR 1
#define HAVE_REMOVE 1
#define HAVE_SETENV 1
#define HAVE_STRERROR 1
#define HAVE_STRSTR 1
#define HAVE_FCNTL_H 1
#define HAVE_STDLIB_H 1
#define HAVE_STRING_H 1
#define HAVE_SYS_DIR_H 1
#define HAVE_SYS_TIMES_H 1
#define HAVE_TIME_H 1
#define HAVE_TYPES_H 1
#define HAVE_STDLIB_H 1

#include <time.h>
#include <errno.h>
#include <stdlib.h>
#include <fcntl.h>
#include <stdio.h>

#include <Files.h>

#if BUILD_MPW_TOOL

/*
	The following defines are collected from various header files from some
	Linux distribution
*/

typedef unsigned long  mode_t;
typedef unsigned long  ino_t;
typedef unsigned long  dev_t;
typedef short          nlink_t;
typedef unsigned long  uid_t;
typedef unsigned long  gid_t;

/* Encoding of the file mode.  */
#define	S_IFMT  0170000  /* These bits determine file type.  */

/* File types.  */
#define	S_IFDIR  0040000  /* Directory.  */
#define	S_IFCHR  0020000  /* Character device.  */
#define	S_IFBLK  0060000  /* Block device.  */
#define	S_IFREG  0100000  /* Regular file.  */

#define	S_ISTYPE(mode, mask)  (((mode) & S_IFMT) == (mask))

#define	S_ISDIR(mode)  S_ISTYPE((mode), S_IFDIR)
#define	S_ISCHR(mode)  S_ISTYPE((mode), S_IFCHR)
#define	S_ISBLK(mode)  S_ISTYPE((mode), S_IFBLK)
#define	S_ISREG(mode)  S_ISTYPE((mode), S_IFREG)

struct stat {
	dev_t              st_dev;      /* Device.  */
	unsigned short int __pad1;
	ino_t              st_ino;      /* File serial number.	*/
	mode_t             st_mode;     /* File mode.  */
	nlink_t            st_nlink;    /* Link count.  */
	uid_t              st_uid;      /* User ID of the file's owner.	*/
	gid_t              st_gid;      /* Group ID of the file's group.*/
	off_t              st_size;     /* Size of file, in bytes.  */
	unsigned long int  st_blksize;  /* Optimal block size for I/O.  */
	long               st_blocks;   /* Number 512-byte blocks allocated. */
	time_t             st_atime;    /* Time of last access.  */
	time_t             st_mtime;    /* Time of last modification.  */
	time_t             st_ctime;    /* Time of last status change.  */
};

int fstat(int fildes, struct stat *buf);

#else
#include <console.h>
#include <stat.mac.h>
#endif

#ifndef PATH_MAX
#define PATH_MAX 1024
#endif

/*
	Our own stat, accepts unix like paths.
*/
int mstat(const char *path, struct stat *buf);

struct dirent {
	char d_name[64];
};

typedef struct {
	FSSpec file;
	int index;
	struct dirent ent;
} DIR;

extern DIR* opendir(const char *dirname);
extern struct dirent* readdir(DIR* dirp);
extern int closedir(DIR* dirp);
extern void rewinddir(DIR* dirp);
extern char* getcwd(char*, int);

/*
	Our own fopen, accepts unix like paths.
*/
extern FILE* mfopen(const char* file, const char* mode);

/*
	Dirty, define the standard functions fopen, stat and lstat to map to our
	own routines.
*/
#define fopen       mfopen
#define stat(a,b)   mstat(a,b)
#define lstat(a,b)  mstat(a,b)

#endif

/* vi:set tabstop=4 shiftwidth=4: */