]>
Commit | Line | Data |
---|---|---|
b47c832e RR |
1 | /* $Header$ */ |
2 | ||
3 | /* | |
4 | * Copyright (c) 1990-1997 Sam Leffler | |
5 | * Copyright (c) 1991-1997 Silicon Graphics, Inc. | |
6 | * | |
7 | * Permission to use, copy, modify, distribute, and sell this software and | |
8 | * its documentation for any purpose is hereby granted without fee, provided | |
9 | * that (i) the above copyright notices and this permission notice appear in | |
10 | * all copies of the software and related documentation, and (ii) the names of | |
11 | * Sam Leffler and Silicon Graphics may not be used in any advertising or | |
12 | * publicity relating to the software without the specific, prior written | |
13 | * permission of Sam Leffler and Silicon Graphics. | |
14 | * | |
15 | * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, | |
16 | * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY | |
17 | * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | |
18 | * | |
19 | * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR | |
20 | * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, | |
21 | * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, | |
22 | * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF | |
23 | * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE | |
24 | * OF THIS SOFTWARE. | |
25 | */ | |
26 | ||
27 | #ifndef _COMPAT_ | |
28 | #define _COMPAT_ | |
29 | /* | |
30 | * This file contains a hodgepodge of definitions and | |
31 | * declarations that are needed to provide compatibility | |
32 | * between the native system and the base implementation | |
33 | * that the library assumes. | |
34 | * | |
35 | * NB: This file is a mess. | |
36 | */ | |
37 | ||
38 | /* | |
39 | * Setup basic type definitions and function declaratations. | |
40 | */ | |
41 | ||
42 | /* | |
43 | * Simplify Acorn RISC OS identifier (to avoid confusion with Acorn RISC iX | |
44 | * and with defunct Unix Risc OS) | |
45 | * No need to specify __arm - hey, Acorn might port the OS, no problem here! | |
46 | */ | |
47 | #ifdef __acornriscos | |
48 | #undef __acornriscos | |
49 | #endif | |
50 | #if defined(__acorn) && defined(__riscos) | |
51 | #define __acornriscos | |
52 | #endif | |
53 | ||
54 | #if defined(__MWERKS__) || defined(THINK_C) | |
84e7f94c SC |
55 | #ifdef __MACH__ |
56 | #include <sys/types.h> | |
57 | #else | |
b47c832e RR |
58 | #include <unix.h> |
59 | #include <math.h> | |
60 | #endif | |
84e7f94c | 61 | #endif |
b47c832e | 62 | |
4ded51f2 CE |
63 | #if defined (__SC__) && !defined (__DMC__) |
64 | #define __SYMANTEC__ | |
65 | #endif | |
66 | ||
b47c832e RR |
67 | #include <stdio.h> |
68 | ||
4ded51f2 | 69 | #if defined(__PPCC__) || defined(__SYMANTEC__) || defined(__MRC__) |
b47c832e RR |
70 | #include <types.h> |
71 | #elif !defined(__MWERKS__) && !defined(THINK_C) && !defined(__acornriscos) && !defined(applec) | |
72 | #include <sys/types.h> | |
73 | #endif | |
74 | ||
75 | #if defined(VMS) | |
76 | #include <file.h> | |
77 | #include <unixio.h> | |
78 | #elif !defined(__acornriscos) | |
79 | #include <fcntl.h> | |
80 | #endif | |
81 | ||
82 | /* | |
83 | * This maze of checks controls defines or not the | |
84 | * target system has BSD-style typdedefs declared in | |
85 | * an include file and/or whether or not to include | |
86 | * <unistd.h> to get the SEEK_* definitions. Some | |
87 | * additional includes are also done to pull in the | |
88 | * appropriate definitions we're looking for. | |
89 | */ | |
4ded51f2 | 90 | #if defined(__MWERKS__) || defined(THINK_C) || defined(__PPCC__) || defined(__SYMANTEC__) || defined(__MRC__) |
b47c832e RR |
91 | #include <stdlib.h> |
92 | #define BSDTYPES | |
93 | #define HAVE_UNISTD_H 0 | |
a02b2432 | 94 | #elif defined(_WINDOWS) || defined(__WIN32__) || defined(_Windows) |
01fe050c | 95 | #define BSDTYPES |
c1725ec7 VS |
96 | #elif defined(__DJGPP__) |
97 | #define BSDTYPES | |
b47c832e RR |
98 | #elif defined(OS2_16) || defined(OS2_32) |
99 | #define BSDTYPES | |
100 | #elif defined(__acornriscos) | |
101 | #include <stdlib.h> | |
102 | #define BSDTYPES | |
103 | #define HAVE_UNISTD_H 0 | |
104 | #elif defined(VMS) | |
105 | #define HAVE_UNISTD_H 0 | |
106 | #else | |
107 | #define HAVE_UNISTD_H 1 | |
108 | #endif | |
109 | ||
110 | /* | |
111 | * The library uses the ANSI C/POSIX SEEK_* | |
112 | * definitions that should be defined in unistd.h | |
113 | * (except on system where they are in stdio.h and | |
114 | * there is no unistd.h). | |
115 | */ | |
116 | #if !defined(SEEK_SET) && HAVE_UNISTD_H | |
117 | #include <unistd.h> | |
118 | #endif | |
119 | ||
120 | /* | |
121 | * The library uses memset, memcpy, and memcmp. | |
122 | * ANSI C and System V define these in string.h. | |
123 | */ | |
124 | #include <string.h> | |
125 | ||
126 | /* | |
127 | * The BSD typedefs are used throughout the library. | |
128 | * If your system doesn't have them in <sys/types.h>, | |
129 | * then define BSDTYPES in your Makefile. | |
130 | */ | |
131 | #if defined(BSDTYPES) | |
132 | typedef unsigned char u_char; | |
133 | typedef unsigned short u_short; | |
134 | typedef unsigned int u_int; | |
135 | typedef unsigned long u_long; | |
136 | #endif | |
137 | ||
138 | /* | |
139 | * dblparam_t is the type that a double precision | |
140 | * floating point value will have on the parameter | |
141 | * stack (when coerced by the compiler). | |
142 | */ | |
143 | /* Note: on MacPowerPC "extended" is undefined. So only use it for 68K-Macs */ | |
4ded51f2 | 144 | #if defined(__SYMANTEC__) || defined(THINK_C) |
b47c832e RR |
145 | typedef extended dblparam_t; |
146 | #else | |
147 | typedef double dblparam_t; | |
148 | #endif | |
149 | ||
150 | /* | |
151 | * If your compiler supports inline functions, then | |
152 | * set INLINE appropriately to get the known hotspots | |
153 | * in the library expanded inline. | |
154 | */ | |
155 | #if defined(__GNUC__) | |
156 | #if defined(__STRICT_ANSI__) | |
157 | #define INLINE __inline__ | |
158 | #else | |
159 | #define INLINE inline | |
160 | #endif | |
161 | #else /* !__GNUC__ */ | |
162 | #define INLINE | |
163 | #endif | |
164 | ||
165 | /* | |
166 | * GLOBALDATA is a macro that is used to define global variables | |
167 | * private to the library. We use this indirection to hide | |
168 | * brain-damage in VAXC (and GCC) under VAX/VMS. In these | |
169 | * environments the macro places the variable in a non-shareable | |
170 | * program section, which ought to be done by default (sigh!) | |
171 | * | |
172 | * Apparently DEC are aware of the problem as this behaviour is the | |
173 | * default under VMS on AXP. | |
174 | * | |
175 | * The GNU C variant is untested. | |
176 | */ | |
177 | #if defined(VAX) && defined(VMS) | |
178 | #if defined(VAXC) | |
179 | #define GLOBALDATA(TYPE,NAME) extern noshare TYPE NAME | |
180 | #endif | |
181 | #if defined(__GNUC__) | |
182 | #define GLOBALDATA(TYPE,NAME) extern TYPE NAME \ | |
183 | asm("_$$PsectAttributes_NOSHR$$" #NAME) | |
184 | #endif | |
185 | #else /* !VAX/VMS */ | |
186 | #define GLOBALDATA(TYPE,NAME) extern TYPE NAME | |
187 | #endif | |
188 | ||
189 | #if defined(__acornriscos) | |
190 | /* | |
191 | * osfcn.h is part of C++Lib on Acorn C/C++, and as such can't be used | |
192 | * on C alone. For that reason, the relevant functions are | |
193 | * implemented in tif_acorn.c, and the elements from the header | |
194 | * file are included here. | |
195 | */ | |
196 | #if defined(__cplusplus) | |
197 | #include <osfcn.h> | |
198 | #else | |
199 | #define O_RDONLY 0 | |
200 | #define O_WRONLY 1 | |
201 | #define O_RDWR 2 | |
202 | #define O_APPEND 8 | |
203 | #define O_CREAT 0x200 | |
204 | #define O_TRUNC 0x400 | |
205 | typedef long off_t; | |
206 | extern int open(const char *name, int flags, int mode); | |
207 | extern int close(int fd); | |
208 | extern int write(int fd, const char *buf, int nbytes); | |
209 | extern int read(int fd, char *buf, int nbytes); | |
210 | extern off_t lseek(int fd, off_t offset, int whence); | |
211 | extern int creat(const char *path, int mode); | |
212 | #endif /* __cplusplus */ | |
213 | #endif /* __acornriscos */ | |
214 | ||
215 | /* Bit and byte order, the default is MSB to LSB */ | |
216 | #ifdef VMS | |
217 | #undef HOST_FILLORDER | |
218 | #undef HOST_BIGENDIAN | |
219 | #define HOST_FILLORDER FILLORDER_LSB2MSB | |
220 | #define HOST_BIGENDIAN 0 | |
221 | #endif | |
222 | ||
223 | ||
224 | #endif /* _COMPAT_ */ |