/* * Revision Control Information * * $Source: /vol/opua/opua2/sis/sis-1.2/common/src/sis/util/RCS/util.h,v $ * $Author: sis $ * $Revision: 1.9 $ * $Date: 1993/06/07 21:04:07 $ * */ #ifndef ABC__misc__espresso__util_old_h #define ABC__misc__espresso__util_old_h #if defined(_IBMR2) #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 #if defined(__STDC__) || defined(sprite) || defined(_IBMR2) || defined(__osf__) #include #endif #if defined(_IBMR2) && !defined(__STDC__) #define _BSD #endif #include "ansi.h" /* since some files don't include sis.h */ /* This was taken out and defined at compile time in the SIS Makefile that uses the OctTools. When the OctTools are used, USE_MM is defined, because the OctTools contain libmm.a. Otherwise, USE_MM is not defined, since the mm package is not distributed with SIS, only with Oct. */ /* #define USE_MM */ /* choose libmm.a as the memory allocator */ #define NIL(type) ((type *) 0) #ifdef USE_MM /* * assumes the memory manager is libmm.a * - allows malloc(0) or realloc(obj, 0) * - catches out of memory (and calls MMout_of_memory()) * - catch free(0) and realloc(0, size) in the macros */ #define ALLOC(type, num) \ ((type *) malloc(sizeof(type) * (num))) #define REALLOC(type, obj, num) \ (obj) ? ((type *) realloc((char *) obj, sizeof(type) * (num))) : \ ((type *) malloc(sizeof(type) * (num))) #define FREE(obj) \ ((obj) ? (free((char *) (obj)), (obj) = 0) : 0) #else /* * enforce strict semantics on the memory allocator * - when in doubt, delete the '#define USE_MM' above */ #define ALLOC(type, num) \ ((type *) MMalloc((long) sizeof(type) * (long) (num))) #define REALLOC(type, obj, num) \ ((type *) MMrealloc((char *) (obj), (long) sizeof(type) * (long) (num))) #define FREE(obj) \ ((obj) ? (free((void *) (obj)), (obj) = 0) : 0) #endif /* Ultrix (and SABER) have 'fixed' certain functions which used to be int */ #if defined(ultrix) || defined(SABER) || defined(aiws) || defined(__hpux) || defined(__STDC__) || defined(apollo) #define VOID_HACK void #else #define VOID_HACK int #endif /* No machines seem to have much of a problem with these */ #include #include /* Some machines fail to define some functions in stdio.h */ #if !defined(__STDC__) && !defined(sprite) && !defined(_IBMR2) && !defined(__osf__) extern FILE *popen(), *tmpfile(); extern int pclose(); #ifndef clearerr /* is a macro on many machines, but not all */ extern VOID_HACK clearerr(); #endif #ifndef rewind extern VOID_HACK rewind(); #endif #endif #ifndef PORT_H #include #include #if defined(ultrix) #if defined(_SIZE_T_) #define ultrix4 #else #if defined(SIGLOST) #define ultrix3 #else #define ultrix2 #endif #endif #endif #endif /* most machines don't give us a header file for these */ #if defined(__STDC__) || defined(sprite) || defined(_IBMR2) || defined(__osf__) || defined(sunos4) || defined(__hpux) #include #if defined(__hpux) #include /* For perror() defininition */ #endif /* __hpux */ #else extern VOID_HACK abort(), free(), exit(), perror(); extern char *getenv(); #ifdef ultrix4 extern void *malloc(), *realloc(), *calloc(); #else extern char *malloc(), *realloc(), *calloc(); #endif #if defined(aiws) extern int sprintf(); #else #ifndef _IBMR2 extern char *sprintf(); #endif #endif extern int system(); extern double atof(); #endif #ifndef PORT_H #if defined(ultrix3) || defined(sunos4) || defined(_IBMR2) || defined(__STDC__) #define SIGNAL_FN void #else /* sequent, ultrix2, 4.3BSD (vax, hp), sunos3 */ #define SIGNAL_FN int #endif #endif /* some call it strings.h, some call it string.h; others, also have memory.h */ #if defined(__STDC__) || defined(sprite) #include #else #if defined(ultrix4) || defined(__hpux) #include #else #if defined(_IBMR2) || defined(__osf__) #include #include #else /* ANSI C string.h -- 1/11/88 Draft Standard */ /* ugly, awful hack */ #ifndef PORT_H 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 #endif #endif #endif /* a few extras */ #if defined(__hpux) #define random() lrand48() #define srandom(a) srand48(a) #define bzero(a,b) memset(a, 0, b) #else #if !defined(__osf__) && !defined(linux) /* these are defined as macros in stdlib.h */ extern VOID_HACK srandom(); extern long random(); #endif #endif /* code from sis-1.3 commented out below #if defined(__STDC__) || defined(sprite) #include #else #ifndef NDEBUG #define assert(ex) {\ if (! (ex)) {\ (void) fprintf(stderr,\ "Assertion failed: file %s, line %d\n\"%s\"\n",\ __FILE__, __LINE__, "ex");\ (void) fflush(stdout);\ abort();\ }\ } #else #define assert(ex) {ex;} #endif #endif */ /* Sunil 5/3/97: sis-1.4: dont let the assert call go to the OS, since much of the code in SIS has actual computation done in the assert function. %$#$@@#! The OS version of assert will do nothing if NDEBUG is set. We cant let that happen... */ # ifdef NDEBUG # define assert(ex) {ex;} # else # define assert(ex) {\ if (! (ex)) {\ (void) fprintf(stderr,\ "Assertion failed: file %s, line %d\n\"%s\"\n",\ __FILE__, __LINE__, "ex");\ (void) fflush(stdout);\ abort();\ }\ } # endif #define fail(why) {\ (void) fprintf(stderr, "Fatal error: file %s, line %d\n%s\n",\ __FILE__, __LINE__, why);\ (void) fflush(stdout);\ abort();\ } #ifdef lint #undef putc /* correct lint '_flsbuf' bug */ #undef ALLOC /* allow for lint -h flag */ #undef REALLOC #define ALLOC(type, num) (((type *) 0) + (num)) #define REALLOC(type, obj, num) ((obj) + (num)) #endif /* #if !defined(__osf__) #define MAXPATHLEN 1024 #endif */ /* These arguably do NOT belong in util.h */ #ifndef ABS #define ABS(a) ((a) < 0 ? -(a) : (a)) #endif #ifndef MAX #define MAX(a,b) ((a) > (b) ? (a) : (b)) #endif #ifndef MIN #define MIN(a,b) ((a) < (b) ? (a) : (b)) #endif #ifndef USE_MM EXTERN void MMout_of_memory ARGS((long)); EXTERN char *MMalloc ARGS((long)); EXTERN char *MMrealloc ARGS((char *, long)); EXTERN void MMfree ARGS((char *)); #endif EXTERN void util_print_cpu_stats ARGS((FILE *)); EXTERN long util_cpu_time ARGS((void)); EXTERN void util_getopt_reset ARGS((void)); EXTERN int util_getopt ARGS((int, char **, char *)); EXTERN char *util_path_search ARGS((char *)); EXTERN char *util_file_search ARGS((char *, char *, char *)); EXTERN int util_pipefork ARGS((char **, FILE **, FILE **, int *)); EXTERN char *util_print_time ARGS((long)); EXTERN int util_save_image ARGS((char *, char *)); EXTERN char *util_strsav ARGS((char *)); EXTERN int util_do_nothing ARGS((void)); EXTERN char *util_tilde_expand ARGS((char *)); EXTERN char *util_tempnam ARGS((char *, char *)); EXTERN FILE *util_tmpfile ARGS((void)); EXTERN long getSoftDataLimit(); #define ptime() util_cpu_time() #define print_time(t) util_print_time(t) /* util_getopt() global variables (ack !) */ extern int util_optind; extern char *util_optarg; #include #ifndef HUGE_VAL #ifndef HUGE #define HUGE 8.9884656743115790e+307 #endif #define HUGE_VAL HUGE #endif #ifndef MAXINT #define MAXINT (1 << 30) #endif #include ABC_NAMESPACE_HEADER_START ABC_NAMESPACE_HEADER_END #endif