]> git.zerfleddert.de Git - micropolis/blob - src/tcl/tclunix.h
daa298c291ff879ad583f39918eac6312ac963c8
[micropolis] / src / tcl / tclunix.h
1 /*
2 * tclUnix.h --
3 *
4 * This file reads in UNIX-related header files and sets up
5 * UNIX-related macros for Tcl's UNIX core. It should be the
6 * only file that contains #ifdefs to handle different flavors
7 * of UNIX. This file sets up the union of all UNIX-related
8 * things needed by any of the Tcl core files. This file
9 * depends on configuration #defines in tclConfig.h
10 *
11 * The material in this file was originally contributed by
12 * Karl Lehenbauer, Mark Diekhans and Peter da Silva.
13 *
14 * Copyright 1991 Regents of the University of California
15 * Permission to use, copy, modify, and distribute this
16 * software and its documentation for any purpose and without
17 * fee is hereby granted, provided that this copyright
18 * notice appears in all copies. The University of California
19 * makes no representations about the suitability of this
20 * software for any purpose. It is provided "as is" without
21 * express or implied warranty.
22 *
23 * $Header: /user6/ouster/tcl/RCS/tclUnix.h,v 1.26 92/08/03 08:27:43 ouster Exp $ SPRITE (Berkeley)
24 */
25
26 #ifndef _TCLUNIX
27 #define _TCLUNIX
28
29 /*
30 * The following #defines are used to distinguish between different
31 * UNIX systems. These #defines are normally set by the "config" script
32 * based on information it gets by looking in the include and library
33 * areas. The defaults below are for BSD-based systems like SunOS
34 * or Ultrix.
35 *
36 * TCL_GETTOD - 1 means there exists a library procedure
37 * "gettimeofday" (e.g. BSD systems). 0 means
38 * have to use "times" instead.
39 * TCL_GETWD - 1 means there exists a library procedure
40 * "getwd" (e.g. BSD systems). 0 means
41 * have to use "getcwd" instead.
42 * TCL_SYS_ERRLIST - 1 means that the array sys_errlist is
43 * defined as part of the C library.
44 * TCL_SYS_TIME_H - 1 means there exists an include file
45 * <sys/time.h> (e.g. BSD derivatives).
46 * TCL_SYS_WAIT_H - 1 means there exists an include file
47 * <sys/wait.h> that defines constants related
48 * to the results of "wait".
49 * TCL_UNION_WAIT - 1 means that the "wait" system call returns
50 * a structure of type "union wait" (e.g. BSD
51 * systems). 0 means "wait" returns an int
52 * (e.g. System V and POSIX).
53 * TCL_PID_T - 1 means that <sys/types> defines the type
54 * pid_t. 0 means that it doesn't.
55 * TCL_UID_T - 1 means that <sys/types> defines the type
56 * uid_t. 0 means that it doesn't.
57 */
58
59 #define TCL_GETTOD 1
60 #define TCL_GETWD 0
61 #define TCL_SYS_ERRLIST 1
62 #define TCL_SYS_TIME_H 1
63 #define TCL_SYS_WAIT_H 1
64 #define TCL_UNION_WAIT 0
65
66 #ifdef IS_LINUX
67
68 #define TCL_PID_T 1
69 #define TCL_UID_T 1
70
71 #else
72
73 #define TCL_PID_T 0
74 #define TCL_UID_T 0
75
76 #endif
77
78 #include <errno.h>
79 #include <fcntl.h>
80 #include <limits.h>
81 #include <pwd.h>
82 #include <signal.h>
83 #include <sys/param.h>
84 #include <sys/types.h>
85 #include <dirent.h>
86 #include <sys/file.h>
87 #include <sys/stat.h>
88 #if TCL_SYS_TIME_H
89 # include <sys/time.h>
90 #else
91 # include <time.h>
92 #endif
93 #if TCL_SYS_WAIT_H
94 # include <sys/wait.h>
95 #endif
96
97 /*
98 * Not all systems declare the errno variable in errno.h. so this
99 * file does it explicitly. The list of system error messages also
100 * isn't generally declared in a header file anywhere.
101 */
102
103 extern int errno;
104 //extern int sys_nerr;
105 //#ifndef IS_LINUX
106 //extern char *sys_errlist[];
107 //#endif
108
109 /*
110 * The type of the status returned by wait varies from UNIX system
111 * to UNIX system. The macro below defines it:
112 */
113
114 #if TCL_UNION_WAIT
115 # define WAIT_STATUS_TYPE union wait
116 #else
117 # define WAIT_STATUS_TYPE int
118 #endif
119
120 /*
121 * Supply definitions for macros to query wait status, if not already
122 * defined in header files above.
123 */
124
125 #ifndef WIFEXITED
126 # define WIFEXITED(stat) (((*((int *) &(stat))) & 0xff) == 0)
127 #endif
128
129 #ifndef WEXITSTATUS
130 # define WEXITSTATUS(stat) (((*((int *) &(stat))) >> 8) & 0xff)
131 #endif
132
133 #ifndef WIFSIGNALED
134 # define WIFSIGNALED(stat) (((*((int *) &(stat)))) && ((*((int *) &(stat))) == ((*((int *) &(stat))) & 0x00ff)))
135 #endif
136
137 #ifndef WTERMSIG
138 # define WTERMSIG(stat) ((*((int *) &(stat))) & 0x7f)
139 #endif
140
141 #ifndef WIFSTOPPED
142 # define WIFSTOPPED(stat) (((*((int *) &(stat))) & 0xff) == 0177)
143 #endif
144
145 #ifndef WSTOPSIG
146 # define WSTOPSIG(stat) (((*((int *) &(stat))) >> 8) & 0xff)
147 #endif
148
149 /*
150 * Supply macros for seek offsets, if they're not already provided by
151 * an include file.
152 */
153
154 #ifndef SEEK_SET
155 # define SEEK_SET 0
156 #endif
157
158 #ifndef SEEK_CUR
159 # define SEEK_CUR 1
160 #endif
161
162 #ifndef SEEK_END
163 # define SEEK_END 2
164 #endif
165
166 /*
167 * The stuff below is needed by the "time" command. If this
168 * system has no gettimeofday call, then must use times and the
169 * CLK_TCK #define (from sys/param.h) to compute elapsed time.
170 * Unfortunately, some systems only have HZ and no CLK_TCK, and
171 * some might not even have HZ.
172 */
173
174 #if ! TCL_GETTOD
175 # include <sys/times.h>
176 # include <sys/param.h>
177 # ifndef CLK_TCK
178 # ifdef HZ
179 # define CLK_TCK HZ
180 # else
181 # define CLK_TCK 60
182 # endif
183 # endif
184 #endif
185
186 /*
187 * Define access mode constants if they aren't already defined.
188 */
189
190 #ifndef F_OK
191 # define F_OK 00
192 #endif
193 #ifndef X_OK
194 # define X_OK 01
195 #endif
196 #ifndef W_OK
197 # define W_OK 02
198 #endif
199 #ifndef R_OK
200 # define R_OK 04
201 #endif
202
203 /*
204 * On systems without symbolic links (i.e. S_IFLNK isn't defined)
205 * define "lstat" to use "stat" instead.
206 */
207
208 #ifndef S_IFLNK
209 # define lstat stat
210 #endif
211
212 /*
213 * Define macros to query file type bits, if they're not already
214 * defined.
215 */
216
217 #ifndef S_ISREG
218 # ifdef S_IFREG
219 # define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
220 # else
221 # define S_ISREG(m) 0
222 # endif
223 # endif
224 #ifndef S_ISDIR
225 # ifdef S_IFDIR
226 # define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
227 # else
228 # define S_ISDIR(m) 0
229 # endif
230 # endif
231 #ifndef S_ISCHR
232 # ifdef S_IFCHR
233 # define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
234 # else
235 # define S_ISCHR(m) 0
236 # endif
237 # endif
238 #ifndef S_ISBLK
239 # ifdef S_IFBLK
240 # define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
241 # else
242 # define S_ISBLK(m) 0
243 # endif
244 # endif
245 #ifndef S_ISFIFO
246 # ifdef S_IFIFO
247 # define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
248 # else
249 # define S_ISFIFO(m) 0
250 # endif
251 # endif
252 #ifndef S_ISLNK
253 # ifdef S_IFLNK
254 # define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
255 # else
256 # define S_ISLNK(m) 0
257 # endif
258 # endif
259 #ifndef S_ISSOCK
260 # ifdef S_IFSOCK
261 # define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
262 # else
263 # define S_ISSOCK(m) 0
264 # endif
265 # endif
266
267 /*
268 * Make sure that MAXPATHLEN is defined.
269 */
270
271 #ifndef MAXPATHLEN
272 # ifdef PATH_MAX
273 # define MAXPATHLEN PATH_MAX
274 # else
275 # define MAXPATHLEN 2048
276 # endif
277 #endif
278
279 /*
280 * Define pid_t and uid_t if they're not already defined.
281 */
282
283 #if ! TCL_PID_T
284 # define pid_t int
285 #endif
286 #if ! TCL_UID_T
287 # define uid_t int
288 #endif
289
290 /*
291 * Variables provided by the C library:
292 */
293
294 extern char **environ;
295
296 /*
297 * Library procedures used by Tcl but not declared in a header file:
298 */
299
300 #if 0
301 #ifndef _CRAY
302 extern int access _ANSI_ARGS_((CONST char *path, int mode));
303 extern int chdir _ANSI_ARGS_((CONST char *path));
304 extern int close _ANSI_ARGS_((int fd));
305 extern int dup2 _ANSI_ARGS_((int src, int dst));
306 extern int execvp _ANSI_ARGS_((CONST char *name, char **argv));
307 extern void _exit _ANSI_ARGS_((int status));
308 extern pid_t fork _ANSI_ARGS_((void));
309 extern uid_t geteuid _ANSI_ARGS_((void));
310 extern pid_t getpid _ANSI_ARGS_((void));
311 extern char * getcwd _ANSI_ARGS_((char *buffer, int size));
312 extern char * getwd _ANSI_ARGS_((char *buffer));
313 extern int kill _ANSI_ARGS_((pid_t pid, int sig));
314 extern long lseek _ANSI_ARGS_((int fd, int offset, int whence));
315 extern char * mktemp _ANSI_ARGS_((char *template));
316 extern int open _ANSI_ARGS_((CONST char *path, int flags, ...));
317 extern int pipe _ANSI_ARGS_((int *fdPtr));
318 extern int read _ANSI_ARGS_((int fd, char *buf, int numBytes));
319 extern int readlink _ANSI_ARGS_((CONST char *path, char *buf, int size));
320 extern int unlink _ANSI_ARGS_((CONST char *path));
321 extern int write _ANSI_ARGS_((int fd, char *buf, int numBytes));
322 #endif /* _CRAY */
323 #endif
324
325 #endif /* _TCLUNIX */
Impressum, Datenschutz