1 /* 2 * Revision Control Information 3 * 4 * $Source: /vol/opua/opua2/sis/sis-1.2/common/src/sis/util/RCS/util.h,v $ 5 * $Author: sis $ 6 * $Revision: 1.9 $ 7 * $Date: 1993/06/07 21:04:07 $ 8 * 9 */ 10 #ifndef ABC__misc__espresso__util_old_h 11 #define ABC__misc__espresso__util_old_h 12 13 #if defined(_IBMR2) 14 #ifndef _POSIX_SOURCE 15 #define _POSIX_SOURCE /* Argh! IBM strikes again */ 16 #endif 17 #ifndef _ALL_SOURCE 18 #define _ALL_SOURCE /* Argh! IBM strikes again */ 19 #endif 20 #ifndef _ANSI_C_SOURCE 21 #define _ANSI_C_SOURCE /* Argh! IBM strikes again */ 22 #endif 23 #endif 24 25 #if defined(__STDC__) || defined(sprite) || defined(_IBMR2) || defined(__osf__) 26 #include <unistd.h> 27 #endif 28 29 #if defined(_IBMR2) && !defined(__STDC__) 30 #define _BSD 31 #endif 32 33 #include "ansi.h" /* since some files don't include sis.h */ 34 35 /* This was taken out and defined at compile time in the SIS Makefile 36 that uses the OctTools. When the OctTools are used, USE_MM is defined, 37 because the OctTools contain libmm.a. Otherwise, USE_MM is not defined, 38 since the mm package is not distributed with SIS, only with Oct. */ 39 40 /* #define USE_MM */ /* choose libmm.a as the memory allocator */ 41 42 #define NIL(type) ((type *) 0) 43 44 #ifdef USE_MM 45 /* 46 * assumes the memory manager is libmm.a 47 * - allows malloc(0) or realloc(obj, 0) 48 * - catches out of memory (and calls MMout_of_memory()) 49 * - catch free(0) and realloc(0, size) in the macros 50 */ 51 #define ALLOC(type, num) \ 52 ((type *) malloc(sizeof(type) * (num))) 53 #define REALLOC(type, obj, num) \ 54 (obj) ? ((type *) realloc((char *) obj, sizeof(type) * (num))) : \ 55 ((type *) malloc(sizeof(type) * (num))) 56 #define FREE(obj) \ 57 ((obj) ? (free((char *) (obj)), (obj) = 0) : 0) 58 #else 59 /* 60 * enforce strict semantics on the memory allocator 61 * - when in doubt, delete the '#define USE_MM' above 62 */ 63 #define ALLOC(type, num) \ 64 ((type *) MMalloc((long) sizeof(type) * (long) (num))) 65 #define REALLOC(type, obj, num) \ 66 ((type *) MMrealloc((char *) (obj), (long) sizeof(type) * (long) (num))) 67 #define FREE(obj) \ 68 ((obj) ? (free((void *) (obj)), (obj) = 0) : 0) 69 #endif 70 71 72 /* Ultrix (and SABER) have 'fixed' certain functions which used to be int */ 73 #if defined(ultrix) || defined(SABER) || defined(aiws) || defined(__hpux) || defined(__STDC__) || defined(apollo) 74 #define VOID_HACK void 75 #else 76 #define VOID_HACK int 77 #endif 78 79 80 /* No machines seem to have much of a problem with these */ 81 #include <stdio.h> 82 #include <ctype.h> 83 84 85 /* Some machines fail to define some functions in stdio.h */ 86 #if !defined(__STDC__) && !defined(sprite) && !defined(_IBMR2) && !defined(__osf__) 87 extern FILE *popen(), *tmpfile(); 88 extern int pclose(); 89 #ifndef clearerr /* is a macro on many machines, but not all */ 90 extern VOID_HACK clearerr(); 91 #endif 92 #ifndef rewind 93 extern VOID_HACK rewind(); 94 #endif 95 #endif 96 97 #ifndef PORT_H 98 #include <sys/types.h> 99 #include <signal.h> 100 #if defined(ultrix) 101 #if defined(_SIZE_T_) 102 #define ultrix4 103 #else 104 #if defined(SIGLOST) 105 #define ultrix3 106 #else 107 #define ultrix2 108 #endif 109 #endif 110 #endif 111 #endif 112 113 /* most machines don't give us a header file for these */ 114 #if defined(__STDC__) || defined(sprite) || defined(_IBMR2) || defined(__osf__) || defined(sunos4) || defined(__hpux) 115 #include <stdlib.h> 116 #if defined(__hpux) 117 #include <errno.h> /* For perror() defininition */ 118 #endif /* __hpux */ 119 #else 120 extern VOID_HACK abort(), free(), exit(), perror(); 121 extern char *getenv(); 122 #ifdef ultrix4 123 extern void *malloc(), *realloc(), *calloc(); 124 #else 125 extern char *malloc(), *realloc(), *calloc(); 126 #endif 127 #if defined(aiws) 128 extern int sprintf(); 129 #else 130 #ifndef _IBMR2 131 extern char *sprintf(); 132 #endif 133 #endif 134 extern int system(); 135 extern double atof(); 136 #endif 137 138 #ifndef PORT_H 139 #if defined(ultrix3) || defined(sunos4) || defined(_IBMR2) || defined(__STDC__) 140 #define SIGNAL_FN void 141 #else 142 /* sequent, ultrix2, 4.3BSD (vax, hp), sunos3 */ 143 #define SIGNAL_FN int 144 #endif 145 #endif 146 147 /* some call it strings.h, some call it string.h; others, also have memory.h */ 148 #if defined(__STDC__) || defined(sprite) 149 #include <string.h> 150 #else 151 #if defined(ultrix4) || defined(__hpux) 152 #include <strings.h> 153 #else 154 #if defined(_IBMR2) || defined(__osf__) 155 #include<string.h> 156 #include<strings.h> 157 #else 158 /* ANSI C string.h -- 1/11/88 Draft Standard */ 159 /* ugly, awful hack */ 160 #ifndef PORT_H 161 extern char *strcpy(), *strncpy(), *strcat(), *strncat(), *strerror(); 162 extern char *strpbrk(), *strtok(), *strchr(), *strrchr(), *strstr(); 163 extern int strcoll(), strxfrm(), strncmp(), strlen(), strspn(), strcspn(); 164 extern char *memmove(), *memccpy(), *memchr(), *memcpy(), *memset(); 165 extern int memcmp(), strcmp(); 166 #endif 167 #endif 168 #endif 169 #endif 170 171 /* a few extras */ 172 #if defined(__hpux) 173 #define random() lrand48() 174 #define srandom(a) srand48(a) 175 #define bzero(a,b) memset(a, 0, b) 176 #else 177 #if !defined(__osf__) && !defined(linux) 178 /* these are defined as macros in stdlib.h */ 179 extern VOID_HACK srandom(); 180 extern long random(); 181 #endif 182 #endif 183 184 /* code from sis-1.3 commented out below 185 #if defined(__STDC__) || defined(sprite) 186 #include <assert.h> 187 #else 188 #ifndef NDEBUG 189 #define assert(ex) {\ 190 if (! (ex)) {\ 191 (void) fprintf(stderr,\ 192 "Assertion failed: file %s, line %d\n\"%s\"\n",\ 193 __FILE__, __LINE__, "ex");\ 194 (void) fflush(stdout);\ 195 abort();\ 196 }\ 197 } 198 #else 199 #define assert(ex) {ex;} 200 #endif 201 #endif 202 */ 203 204 /* Sunil 5/3/97: 205 sis-1.4: dont let the assert call go to the OS, since 206 much of the code in SIS has actual computation done in 207 the assert function. %$#$@@#! The OS version of assert 208 will do nothing if NDEBUG is set. We cant let that happen... 209 */ 210 # ifdef NDEBUG 211 # define assert(ex) {ex;} 212 # else 213 # define assert(ex) {\ 214 if (! (ex)) {\ 215 (void) fprintf(stderr,\ 216 "Assertion failed: file %s, line %d\n\"%s\"\n",\ 217 __FILE__, __LINE__, "ex");\ 218 (void) fflush(stdout);\ 219 abort();\ 220 }\ 221 } 222 # endif 223 224 225 #define fail(why) {\ 226 (void) fprintf(stderr, "Fatal error: file %s, line %d\n%s\n",\ 227 __FILE__, __LINE__, why);\ 228 (void) fflush(stdout);\ 229 abort();\ 230 } 231 232 233 #ifdef lint 234 #undef putc /* correct lint '_flsbuf' bug */ 235 #undef ALLOC /* allow for lint -h flag */ 236 #undef REALLOC 237 #define ALLOC(type, num) (((type *) 0) + (num)) 238 #define REALLOC(type, obj, num) ((obj) + (num)) 239 #endif 240 241 /* 242 #if !defined(__osf__) 243 #define MAXPATHLEN 244 1024 245 #endif 246 */ 247 248 /* These arguably do NOT belong in util.h */ 249 #ifndef ABS 250 #define ABS(a) ((a) < 0 ? -(a) : (a)) 251 #endif 252 #ifndef MAX 253 #define MAX(a,b) ((a) > (b) ? (a) : (b)) 254 #endif 255 #ifndef MIN 256 #define MIN(a,b) ((a) < (b) ? (a) : (b)) 257 #endif 258 259 260 #ifndef USE_MM 261 EXTERN void MMout_of_memory ARGS((long)); 262 EXTERN char *MMalloc ARGS((long)); 263 EXTERN char *MMrealloc ARGS((char *, long)); 264 EXTERN void MMfree ARGS((char *)); 265 #endif 266 267 EXTERN void util_print_cpu_stats ARGS((FILE *)); 268 EXTERN long util_cpu_time ARGS((void)); 269 EXTERN void util_getopt_reset ARGS((void)); 270 EXTERN int util_getopt ARGS((int, char **, char *)); 271 EXTERN char *util_path_search ARGS((char *)); 272 EXTERN char *util_file_search ARGS((char *, char *, char *)); 273 EXTERN int util_pipefork ARGS((char **, FILE **, FILE **, int *)); 274 EXTERN char *util_print_time ARGS((long)); 275 EXTERN int util_save_image ARGS((char *, char *)); 276 EXTERN char *util_strsav ARGS((char *)); 277 EXTERN int util_do_nothing ARGS((void)); 278 EXTERN char *util_tilde_expand ARGS((char *)); 279 EXTERN char *util_tempnam ARGS((char *, char *)); 280 EXTERN FILE *util_tmpfile ARGS((void)); 281 EXTERN long getSoftDataLimit(); 282 283 #define ptime() util_cpu_time() 284 #define print_time(t) util_print_time(t) 285 286 /* util_getopt() global variables (ack !) */ 287 extern int util_optind; 288 extern char *util_optarg; 289 290 #include <math.h> 291 #ifndef HUGE_VAL 292 #ifndef HUGE 293 #define HUGE 8.9884656743115790e+307 294 #endif 295 #define HUGE_VAL HUGE 296 #endif 297 #ifndef MAXINT 298 #define MAXINT (1 << 30) 299 #endif 300 301 #include <varargs.h> 302 303 ABC_NAMESPACE_HEADER_START 304 305 306 307 ABC_NAMESPACE_HEADER_END 308 309 #endif 310