1/* 2 * Copyright (C) 1995 Advanced RISC Machines Limited. All rights reserved. 3 * 4 * This software may be freely used, copied, modified, and distributed 5 * provided that the above copyright notice is preserved in all copies of the 6 * software. 7 */ 8 9 10#ifndef _host_LOADED 11#define _host_LOADED 1 12 13#include <stdio.h> 14#include <stddef.h> 15#include <stdlib.h> 16 17#ifndef SEEK_SET 18# define SEEK_SET 0 19#endif 20#ifndef SEEK_CUR 21# define SEEK_CUR 1 22#endif 23#ifndef SEEK_END 24# define SEEK_END 2 25#endif 26 27/* The following for the benefit of compiling on SunOS */ 28#ifndef offsetof 29# define offsetof(T, member) ((char *)&(((T *)0)->member) - (char *)0) 30#endif 31 32/* A temporary sop to older compilers */ 33#if defined (__NetBSD__) || defined (unix) 34# ifndef __unix /* (good for long-term portability?) */ 35# define __unix 1 36# endif 37#endif 38 39#if defined(__unix) 40/* Generic unix -- hopefully a split into other variants will not be */ 41/* needed. However, beware the 'bsd' test above and safe_toupper etc. */ 42/* which cope with backwards (pre-posix/X/open) unix compatility. */ 43# define COMPILING_ON_UNIX 1 44#endif 45#if defined(_WIN32) 46# define COMPILING_ON_WIN32 1 47# if !defined(__CYGWIN__) 48# define COMPILING_ON_WINDOWS 1 49# endif 50#endif 51#if defined(_CONSOLE) 52# define COMPILING_ON_WINDOWS_CONSOLE 1 53# define COMPILING_ON_WINDOWS 1 54#endif 55/* The '(defined(__sparc) && defined(P_tmpdir) */ 56/* && !defined(__svr4__))' is to detect gcc on SunOS. */ 57/* C++ compilers don't have to define __STDC__ */ 58#if (defined(__sparc) && defined(P_tmpdir)) 59# if defined(__svr4__) 60# define COMPILING_ON_SOLARIS 61# else 62# define COMPILING_ON_SUNOS 63# endif 64#endif 65#ifdef __hppa 66# define COMPILING_ON_HPUX 67#endif 68 69/* 70 * The following typedefs may need alteration for obscure host machines. 71 */ 72#if defined(__alpha) && defined(__osf__) /* =========================== */ 73/* Under OSF the alpha has 64-bit pointers and 64-bit longs. */ 74typedef int int32; 75typedef unsigned int unsigned32; 76/* IPtr and UPtr are 'ints of same size as pointer'. Do not use in */ 77/* new code. Currently only used within 'ncc'. */ 78typedef long int IPtr; 79typedef unsigned long int UPtr; 80 81#else /* all hosts except alpha under OSF ============================= */ 82 83typedef long int int32; 84typedef unsigned long int unsigned32; 85/* IPtr and UPtr are 'ints of same size as pointer'. Do not use in */ 86/* new code. Currently only used within 'ncc'. */ 87#define IPtr int32 88#define UPtr unsigned32 89#endif /* ============================================================= */ 90 91typedef short int int16; 92typedef unsigned short int unsigned16; 93typedef signed char int8; 94typedef unsigned char unsigned8; 95 96/* The following code defines the 'bool' type to be 'int' under C */ 97/* and real 'bool' under C++. It also avoids warnings such as */ 98/* C++ keyword 'bool' used as identifier. It can be overridden by */ 99/* defining IMPLEMENT_BOOL_AS_ENUM or IMPLEMENT_BOOL_AS_INT. */ 100#undef _bool 101 102#ifdef IMPLEMENT_BOOL_AS_ENUM 103 enum _bool { _false, _true }; 104# define _bool enum _bool 105#elif defined(IMPLEMENT_BOOL_AS_INT) || !defined(__cplusplus) 106# define _bool int 107# define _false 0 108# define _true 1 109#endif 110 111#ifdef _bool 112# if defined(_MFC_VER) || defined(__CC_NORCROFT) /* When using MS Visual C/C++ v4.2 */ 113# define bool _bool /* avoids "'bool' is reserved word" warning */ 114# else 115# ifndef bool 116 typedef _bool bool; 117# endif 118# endif 119# define true _true 120# define false _false 121#endif 122 123#define YES true 124#define NO false 125#undef TRUE /* some OSF headers define as 1 */ 126#define TRUE true 127#undef FALSE /* some OSF headers define as 1 */ 128#define FALSE false 129 130/* 'uint' conflicts with some Unixen sys/types.h, so we now don't define it */ 131typedef unsigned8 uint8; 132typedef unsigned16 uint16; 133typedef unsigned32 uint32; 134 135typedef unsigned Uint; 136typedef unsigned8 Uint8; 137typedef unsigned16 Uint16; 138typedef unsigned32 Uint32; 139 140#ifdef ALPHA_TASO_SHORT_ON_OSF /* was __alpha && __osf. */ 141/* The following sets ArgvType for 64-bit pointers so that */ 142/* DEC Unix (OSF) cc can be used with the -xtaso_short compiler option */ 143/* to force pointers to be 32-bit. Not currently used since most/all */ 144/* ARM tools accept 32 or 64 bit pointers transparently. See IPtr. */ 145#pragma pointer_size (save) 146#pragma pointer_size (long) 147typedef char *ArgvType; 148#pragma pointer_size (restore) 149#else 150typedef char *ArgvType; 151#endif 152 153/* 154 * Rotate macros 155 */ 156#define ROL_32(val, n) \ 157((((unsigned32)(val) << (n)) | ((unsigned32)(val) >> (32-(n)))) & 0xFFFFFFFFL) 158#define ROR_32(val, n) \ 159((((unsigned32)(val) >> (n)) | ((unsigned32)(val) << (32-(n)))) & 0xFFFFFFFFL) 160 161#ifdef COMPILING_ON_UNIX 162# define FOPEN_WB "w" 163# define FOPEN_RB "r" 164# define FOPEN_RWB "r+" 165# ifndef __STDC__ /* caveat RISCiX... */ 166# define remove(file) unlink(file) /* a horrid hack, but probably best? */ 167# endif 168#else 169# define FOPEN_WB "wb" 170# define FOPEN_RB "rb" 171# define FOPEN_RWB "rb+" 172#endif 173 174#ifndef FILENAME_MAX 175# define FILENAME_MAX 256 176#endif 177 178#if (!defined(__STDC__) && !defined(__cplusplus)) || defined(COMPILING_ON_SUNOS) 179/* Use bcopy rather than memmove, as memmove is not available. */ 180/* There does not seem to be a header for bcopy. */ 181void bcopy(const char *src, char *dst, int length); 182# define memmove(d,s,l) bcopy(s,d,l) 183 184/* BSD/SUN don't have strtoul(), but then strtol() doesn't barf on */ 185/* overflow as required by ANSI... This bodge is horrid. */ 186# define strtoul(s, ptr, base) strtol(s, ptr, base) 187 188/* strtod is present in the C-library but is not in stdlib.h */ 189extern double strtod(const char *str, char **ptr); 190#endif 191 192/* For systems that do not define EXIT_SUCCESS and EXIT_FAILURE */ 193#ifndef EXIT_SUCCESS 194# define EXIT_SUCCESS 0 195#endif 196#ifndef EXIT_FAILURE 197# define EXIT_FAILURE 1 198#endif 199 200#ifndef IGNORE 201#define IGNORE(x) (x = x) /* Silence compiler warnings for unused arguments */ 202#endif 203 204/* Define endian-ness of host */ 205 206#if defined(__acorn) || defined(__mvs) || defined(_WIN32) || \ 207 (defined(__alpha) && defined(__osf__)) 208# define HOST_ENDIAN_LITTLE 209#elif defined(__sparc) || defined(macintosh) 210# define HOST_ENDIAN_BIG 211#else 212# define HOST_ENDIAN_UNKNOWN 213#endif 214 215#endif 216 217/* Needs to be supplied by the host. */ 218extern void Fail (const char *, ...); 219 220/* end of host.h */ 221