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) 55#include <unix.h> 56#include <math.h> 57#endif 58 59#include <stdio.h> 60 61#if defined(__PPCC__) || defined(__SC__) || defined(__MRC__) 62#include <types.h> 63#elif !defined(__MWERKS__) && !defined(THINK_C) && !defined(__acornriscos) && !defined(applec) 64#include <sys/types.h> 65#endif 66 67#if defined(VMS) 68#include <file.h> 69#include <unixio.h> 70#elif !defined(__acornriscos) 71#include <fcntl.h> 72#endif 73 74/* 75 * This maze of checks controls defines or not the 76 * target system has BSD-style typdedefs declared in 77 * an include file and/or whether or not to include 78 * <unistd.h> to get the SEEK_* definitions. Some 79 * additional includes are also done to pull in the 80 * appropriate definitions we're looking for. 81 */ 82#if defined(__MWERKS__) || defined(THINK_C) || defined(__PPCC__) || defined(__SC__) || defined(__MRC__) 83#include <stdlib.h> 84#define BSDTYPES 85#define HAVE_UNISTD_H 0 86#elif (defined(_WINDOWS) || defined(__WIN32__) || defined(_Windows) || defined(_WIN32)) && !defined(unix) 87#define BSDTYPES 88#elif defined(OS2_16) || defined(OS2_32) 89#define BSDTYPES 90#elif defined(__acornriscos) 91#include <stdlib.h> 92#define BSDTYPES 93#define HAVE_UNISTD_H 0 94#elif defined(VMS) 95#define HAVE_UNISTD_H 0 96#else 97#define HAVE_UNISTD_H 1 98#endif 99 100/* 101 * The library uses the ANSI C/POSIX SEEK_* 102 * definitions that should be defined in unistd.h 103 * (except on system where they are in stdio.h and 104 * there is no unistd.h). 105 */ 106#if !defined(SEEK_SET) && HAVE_UNISTD_H 107#include <unistd.h> 108#endif 109 110/* 111 * The library uses memset, memcpy, and memcmp. 112 * ANSI C and System V define these in string.h. 113 */ 114#include <string.h> 115 116/* 117 * The BSD typedefs are used throughout the library. 118 * If your system doesn't have them in <sys/types.h>, 119 * then define BSDTYPES in your Makefile. 120 */ 121#if defined(BSDTYPES) 122# ifndef _BSDTYPES_DEFINED 123# ifndef __u_char_defined 124typedef unsigned char u_char; 125typedef unsigned short u_short; 126typedef unsigned int u_int; 127typedef unsigned long u_long; 128# define __u_char_defined 129# endif /* __u_char_defined */ 130# define _BSDTYPES_DEFINED 131# endif /* _BSDTYPES_DEFINED */ 132#endif /* BSDTYPES */ 133 134/* 135 * dblparam_t is the type that a double precision 136 * floating point value will have on the parameter 137 * stack (when coerced by the compiler). 138 */ 139/* Note: on MacPowerPC "extended" is undefined. So only use it for 68K-Macs */ 140#if defined(__SC__) || defined(THINK_C) 141typedef extended dblparam_t; 142#else 143typedef double dblparam_t; 144#endif 145 146/* 147 * If your compiler supports inline functions, then 148 * set INLINE appropriately to get the known hotspots 149 * in the library expanded inline. 150 */ 151#if defined(__GNUC__) 152#if defined(__STRICT_ANSI__) 153#define INLINE __inline__ 154#else 155#define INLINE inline 156#endif 157#else /* !__GNUC__ */ 158#define INLINE 159#endif 160 161/* 162 * GLOBALDATA is a macro that is used to define global variables 163 * private to the library. We use this indirection to hide 164 * brain-damage in VAXC (and GCC) under VAX/VMS. In these 165 * environments the macro places the variable in a non-shareable 166 * program section, which ought to be done by default (sigh!) 167 * 168 * Apparently DEC are aware of the problem as this behaviour is the 169 * default under VMS on AXP. 170 * 171 * The GNU C variant is untested. 172 */ 173#if defined(VAX) && defined(VMS) 174#if defined(VAXC) 175#define GLOBALDATA(TYPE,NAME) extern noshare TYPE NAME 176#endif 177#if defined(__GNUC__) 178#define GLOBALDATA(TYPE,NAME) extern TYPE NAME \ 179 asm("_$$PsectAttributes_NOSHR$$" #NAME) 180#endif 181#else /* !VAX/VMS */ 182#define GLOBALDATA(TYPE,NAME) extern TYPE NAME 183#endif 184 185#if defined(__acornriscos) 186/* 187 * osfcn.h is part of C++Lib on Acorn C/C++, and as such can't be used 188 * on C alone. For that reason, the relevant functions are 189 * implemented in tif_acorn.c, and the elements from the header 190 * file are included here. 191 */ 192#if defined(__cplusplus) 193#include <osfcn.h> 194#else 195#define O_RDONLY 0 196#define O_WRONLY 1 197#define O_RDWR 2 198#define O_APPEND 8 199#define O_CREAT 0x200 200#define O_TRUNC 0x400 201typedef long off_t; 202extern int open(const char *name, int flags, int mode); 203extern int close(int fd); 204extern int write(int fd, const char *buf, int nbytes); 205extern int read(int fd, char *buf, int nbytes); 206extern off_t lseek(int fd, off_t offset, int whence); 207extern int creat(const char *path, int mode); 208#endif /* __cplusplus */ 209#endif /* __acornriscos */ 210 211/* Bit and byte order, the default is MSB to LSB */ 212#ifdef VMS 213#undef HOST_FILLORDER 214#undef HOST_BIGENDIAN 215#define HOST_FILLORDER FILLORDER_LSB2MSB 216#define HOST_BIGENDIAN 0 217#endif 218 219 220#endif /* _COMPAT_ */ 221