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