#ifndef PORT_H #define PORT_H #ifdef _WIN32 #include #include #endif #ifndef NULL #define NULL 0 #endif /* NULL */ #ifndef _WIN32 #ifdef SABER #define volatile #endif #ifdef _IBMR2 #define _BSD #ifndef _POSIX_SOURCE #define _POSIX_SOURCE /* Argh! IBM strikes again */ #endif #ifndef _ALL_SOURCE #define _ALL_SOURCE /* Argh! IBM strikes again */ #endif #ifndef _ANSI_C_SOURCE #define _ANSI_C_SOURCE /* Argh! IBM strikes again */ #endif #endif /* * int32 should be defined as the most economical sized integer capable of * holding a 32 bit quantity * int16 should be similarly defined */ /* XXX hack */ #ifndef MACHDEP_INCLUDED #define MACHDEP_INCLUDED #ifdef vax typedef int int32; typedef short int16; #else /* Ansi-C promises that these definitions should always work */ typedef long int32; typedef int int16; #endif /* vax */ #endif /* MACHDEP_INCLUDED */ #ifndef __STDC__ #ifndef __DATE__ #ifdef CUR_DATE #define __DATE__ CUR_DATE #else #define __DATE__ "unknown-date" #endif /* CUR_DATE */ #endif /* __DATE__ */ #ifndef __TIME__ #ifdef CUR_TIME #define __TIME__ CUR_TIME #else #define __TIME__ "unknown-time" #endif /* CUR_TIME */ #endif /* __TIME__ */ #endif /* __STDC__ */ #ifdef sun386 #define PORTAR #endif #include #include #include #undef HUGE #include #include #if defined(ultrix) /* { */ #if defined(_SIZE_T_) /* { */ #define ultrix4 #else /* } else { */ #if defined(SIGLOST) /* { */ #define ultrix3 #else /* } else { */ #define ultrix2 #endif /* } */ #endif /* } */ #endif /* } */ #if defined(ultrix3) && defined(mips) extern double rint(); extern double trunc(); #endif #if defined(sun) && defined(FD_SETSIZE) #define sunos4 #else #define sunos3 #endif #if defined(sequent) || defined(news800) #define LACK_SYS5 #endif #if defined(ultrix3) || defined(sunos4) || defined(_IBMR2) #define SIGNAL_FN void #else /* sequent, ultrix2, 4.3BSD (vax, hp), sunos3 */ #define SIGNAL_FN int #endif /* Some systems have 'fixed' certain functions which used to be int */ #if defined(ultrix) || defined(SABER) || defined(hpux) || defined(aiws) || defined(apollo) || defined(__STDC__) #define VOID_HACK void #else #define VOID_HACK int #endif /* * CHARBITS should be defined only if the compiler lacks "unsigned char". * It should be a mask, e.g. 0377 for an 8-bit machine. */ #ifndef CHARBITS # define UNSCHAR(c) ((unsigned char)(c)) #else # define UNSCHAR(c) ((c)&CHARBITS) #endif #define SIZET int #ifdef __STDC__ #define CONST const #define VOIDSTAR void * #else #define CONST #define VOIDSTAR char * #endif /* __STDC__ */ /* Some machines fail to define some functions in stdio.h */ #if !defined(__STDC__) && !defined(sprite) extern FILE *popen(), *tmpfile(); extern int pclose(); #ifndef clearerr /* is a macro on many machines, but not all */ extern VOID_HACK clearerr(); #endif /* clearerr */ #ifndef rewind extern VOID_HACK rewind(); #endif /* rewind */ #endif /* __STDC__ */ /* most machines don't give us a header file for these */ #if defined(__STDC__) || defined(sprite) #include #else #ifdef hpux extern int abort(); extern void free(), exit(), perror(); #else extern VOID_HACK abort(), free(), exit(), perror(); #endif /* hpux */ extern char *getenv(); #ifdef ultrix4 extern void *malloc(), *realloc(), *calloc(); #else extern char *malloc(), *realloc(), *calloc(); #endif #if defined(aiws) || defined(hpux) extern int sprintf(); #else extern char *sprintf(); #endif extern int system(); extern double atof(); extern long atol(); extern int sscanf(); #endif /* __STDC__ */ /* some call it strings.h, some call it string.h; others, also have memory.h */ #if defined(__STDC__) || defined(sprite) #include #else /* ANSI C string.h -- 1/11/88 Draft Standard */ #if defined(ultrix4) || defined(hpux) #include #else extern char *strcpy(), *strncpy(), *strcat(), *strncat(), *strerror(); extern char *strpbrk(), *strtok(), *strchr(), *strrchr(), *strstr(); extern int strcoll(), strxfrm(), strncmp(), strlen(), strspn(), strcspn(); extern char *memmove(), *memccpy(), *memchr(), *memcpy(), *memset(); extern int memcmp(), strcmp(); #endif /* ultrix4 */ #endif /* __STDC__ */ #ifdef lint #undef putc /* correct lint '_flsbuf' bug */ #endif /* lint */ /* a few extras */ #if defined(hpux) extern VOID_HACK srand(); extern int rand(); #define random() rand() #define srandom(a) srand(a) #define bzero(a,b) memset(a, 0, b) #else extern VOID_HACK srandom(); extern long random(); #endif /* ** _std_h is defined in /usr/local/lib/g++-include/std.h */ #if ! defined(_std_h) #if defined(ultrix3) || defined(ultrix4) || defined(hpux) extern unsigned sleep(); #else extern VOID_HACK sleep(); #endif #endif /* _std_h */ /* assertion macro */ #ifndef assert #if defined(__STDC__) || defined(sprite) #include #else #ifndef NDEBUG #define assert(ex) {\ if (! (ex)) {\ (void) fprintf(stderr, "Assertion failed: file %s, line %d\n",\ __FILE__, __LINE__);\ (void) fflush(stdout);\ abort();\ }\ } #else #define assert(ex) {;} #endif #endif #endif /* handle the various limits */ #if defined(__STDC__) || defined(POSIX) #include #else #define USHRT_MAX (~ (unsigned short int) 0) #define UINT_MAX (~ (unsigned int) 0) #define ULONG_MAX (~ (unsigned long int) 0) #define SHRT_MAX ((short int) (USHRT_MAX >> 1)) #define INT_MAX ((int) (UINT_MAX >> 1)) #define LONG_MAX ((long int) (ULONG_MAX >> 1)) #endif #endif #endif /* PORT_H */