blob: d60790d376da8360c956d1c83bb94049e043339a [file] [log] [blame]
/*
* 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 <unistd.h>
#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 <stdio.h>
#include <ctype.h>
/* 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 <sys/types.h>
#include <signal.h>
#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 <stdlib.h>
#if defined(__hpux)
#include <errno.h> /* 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 <string.h>
#else
#if defined(ultrix4) || defined(__hpux)
#include <strings.h>
#else
#if defined(_IBMR2) || defined(__osf__)
#include<string.h>
#include<strings.h>
#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 <assert.h>
#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 <math.h>
#ifndef HUGE_VAL
#ifndef HUGE
#define HUGE 8.9884656743115790e+307
#endif
#define HUGE_VAL HUGE
#endif
#ifndef MAXINT
#define MAXINT (1 << 30)
#endif
#include <varargs.h>
ABC_NAMESPACE_HEADER_START
ABC_NAMESPACE_HEADER_END
#endif