]> git.zerfleddert.de Git - micropolis/blame_incremental - src/tcl/tclunix.h
Makefile: Micropolis build fixes for recent macOS
[micropolis] / src / tcl / tclunix.h
... / ...
CommitLineData
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
103extern 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
294extern 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
302extern int access _ANSI_ARGS_((CONST char *path, int mode));
303extern int chdir _ANSI_ARGS_((CONST char *path));
304extern int close _ANSI_ARGS_((int fd));
305extern int dup2 _ANSI_ARGS_((int src, int dst));
306extern int execvp _ANSI_ARGS_((CONST char *name, char **argv));
307extern void _exit _ANSI_ARGS_((int status));
308extern pid_t fork _ANSI_ARGS_((void));
309extern uid_t geteuid _ANSI_ARGS_((void));
310extern pid_t getpid _ANSI_ARGS_((void));
311extern char * getcwd _ANSI_ARGS_((char *buffer, int size));
312extern char * getwd _ANSI_ARGS_((char *buffer));
313extern int kill _ANSI_ARGS_((pid_t pid, int sig));
314extern long lseek _ANSI_ARGS_((int fd, int offset, int whence));
315extern char * mktemp _ANSI_ARGS_((char *template));
316extern int open _ANSI_ARGS_((CONST char *path, int flags, ...));
317extern int pipe _ANSI_ARGS_((int *fdPtr));
318extern int read _ANSI_ARGS_((int fd, char *buf, int numBytes));
319extern int readlink _ANSI_ARGS_((CONST char *path, char *buf, int size));
320extern int unlink _ANSI_ARGS_((CONST char *path));
321extern int write _ANSI_ARGS_((int fd, char *buf, int numBytes));
322#endif /* _CRAY */
323#endif
324
325#endif /* _TCLUNIX */
Impressum, Datenschutz