| #ifndef PORT_H |
| #define PORT_H |
| |
| /* |
| * 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 <stdio.h> |
| #include <ctype.h> |
| #include <sys/types.h> |
| #undef HUGE |
| #include <math.h> |
| #include <signal.h> |
| |
| #if defined(ultrix) && defined(SIGLOST) |
| #define ultrix3 |
| #else |
| #define ultrix2 |
| #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) |
| #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 |
| |
| #ifndef NULL |
| #define NULL 0 |
| #endif /* NULL */ |
| |
| /* |
| * 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 */ |
| #ifndef __STDC__ |
| 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 */ |
| #ifdef __STDC__ |
| #include <stdlib.h> |
| #else |
| #ifdef hpux |
| extern int abort(); |
| extern void free(), exit(), perror(); |
| #else |
| extern VOID_HACK abort(), free(), exit(), perror(); |
| #endif /* hpux */ |
| extern char *getenv(), *malloc(), *realloc(), *calloc(); |
| #ifdef aiws |
| 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 */ |
| #ifdef __STDC__ |
| #include <string.h> |
| #else |
| /* ANSI C string.h -- 1/11/88 Draft Standard */ |
| 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 /* __STDC__ */ |
| |
| #ifdef lint |
| #undef putc /* correct lint '_flsbuf' bug */ |
| #endif /* lint */ |
| |
| /* a few extras */ |
| extern VOID_HACK srandom(); |
| extern long random(); |
| |
| #if defined(ultrix3) |
| extern unsigned sleep(); |
| #else |
| extern VOID_HACK sleep(); |
| #endif |
| |
| /* assertion macro */ |
| |
| #ifndef assert |
| #ifdef __STDC__ |
| #include <assert.h> |
| #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 <limits.h> |
| #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 /* PORT_H */ |
| |