mirror of https://github.com/YosysHQ/abc.git
310 lines
7.8 KiB
C
310 lines
7.8 KiB
C
/*
|
|
* 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
|