psyclpc/src/driver.h

170 lines
4.7 KiB
C

#ifndef DRIVER_H__
#define DRIVER_H__
/*------------------------------------------------------------------
* Global mandatory include file.
*
* It contains various global macros and declarations, and takes
* care of the proper inclusion of the configuration/portability
* include files.
*------------------------------------------------------------------
*/
#define __DRIVER_SOURCE__
#include "config.h"
/* TODO: Some TODO defines */
/* NO_NEGATIVE_RANGES: If defined, assignments to negative ranges
* like [4..2] are not allowed. However, they are useful at times
* and so this switch should be under control of a pragma or special
* syntactic construct. For now and for compatibility reasons, these
* ranges remain allowed.
*/
/* #undef NO_NEGATIVE_RANGES */
/*----------------------------------------------------------------*/
/* Verify some of the definitions in config.h */
/* Make sure that YYDEBUG is defined to 1 - just being defined
* is not sufficient.
*/
#if defined(YYDEBUG)
# undef YYDEBUG
# define YYDEBUG 1
#endif
#if !defined(MALLOC_smalloc) && !defined(MALLOC_sysmalloc) && !defined(MALLOC_ptmalloc) && ~defined(MALLOC_slaballoc)
# define MALLOC_slaballoc
#endif
/* Do we have full GC support? */
#if defined(MALLOC_smalloc) || defined(MALLOC_ptmalloc) || defined(MALLOC_slaballoc)
# define GC_SUPPORT 1
#endif
/* Do some of the selected packages require special treatment? */
/* SQLite in the threadsafe mode needs a normal malloc() */
#if defined(SBRK_OK) && defined(USE_SQLITE)
# undef SBRK_OK
#endif
/* PTHREADS need a normal malloc() */
#if defined(SBRK_OK) && (defined(USE_PTHREADS) || defined(SQLITE3_USES_PTHREADS))
# undef SBRK_OK
#endif
/* When we have allocation tracing, the allocator annotates every
* allocation with the source filename and line where the allocation
* occured. To allow the annotation of the allocations of higher structures
* like strings with the place where the string as such is allocated (and not
* the places in the string module), the following macros can be used
* to declare and pass the necessary information transparently:
*
* MTRACE_DECL: the declaration of the tracing arguments
* MTRACE_PASS: the tracing arguments when passed on to lower
* functions
* MTRACE_ARG: the tracing arguments on the toplevel call
*/
#ifdef MALLOC_TRACE
#define MTRACE_DECL , const char * malloc_trace_file, int malloc_trace_line
#define MTRACE_PASS , malloc_trace_file, malloc_trace_line
#define MTRACE_ARG , __FILE__, __LINE__
#else
#define MTRACE_DECL
#define MTRACE_PASS
#define MTRACE_ARG
#endif
/* To function properly, MALLOC_(LPC_)TRACE need to be able to
* test whether a memory block is free or not. This is reliably implemented
* by MALLOC_CHECK.
*/
#if (defined(MALLOC_TRACE) || defined(MALLOC_LPC_TRACE)) && !defined(MALLOC_CHECK)
# define MALLOC_CHECK
#endif
/* This one is for backwards compatibility with old config.hs */
#if defined(NATIVE_MODE) && !defined(STRICT_EUIDS)
# define STRICT_EUIDS
#elif defined(COMPAT_MODE)
# undef STRICT_EUIDS
#endif
/* The string table is shadowed only in DEBUG mode */
#if !defined(DEBUG) && defined(CHECK_STRINGS)
# undef CHECK_STRINGS
#endif
/* The ALARM and HEART_BEAT time need to be at least 1. */
#if !defined(ALARM_TIME)
#define ALARM_TIME 1
#elif ALARM_TIME < 1
#undef ALARM_TIME
#define ALARM_TIME 1
#endif
#if !defined(HEART_BEAT_INTERVAL)
#define HEART_BEAT_INTERVAL 1
#elif HEART_BEAT_INTERVAL < 1
#undef HEART_BEAT_INTERVAL
#define HEART_BEAT_INTERVAL 1
#endif
/* Define some macros needed in the headers included from ../mudlib/sys */
#ifdef USE_IPV6
# define __IPV6__
#endif
/* Include the portability headers */
#include "port.h"
/* TODO: this ctype-stuff might go into lex.h (impl in efun_defs.c) */
#define _MCTe 0x01 /* escaped character in save/restore object. */
#define _MCTd 0x02 /* numeric digit */
#define _MCTt 0x04 /* delimiters in save/restore object. */
#define _MCTs 0x10 /* whitespace EXCLUDING '\n' */
#define _MCTx 0x40 /* hexadecimal */
#define _MCTa 0x80 /* alphanumeric or '_' */
extern unsigned char _my_ctype[];
#define isescaped(c) (_my_ctype[(unsigned char)(c)]&_MCTe)
#define issavedel(c) (_my_ctype[(unsigned char)(c)]&_MCTt)
#define isalunum( c) (_my_ctype[(unsigned char)(c)]&_MCTa)
#define lexdigit( c) (_my_ctype[(unsigned char)(c)]&_MCTd)
#ifndef MAXINT
# define MAXINT (0x7fffffffU)
#endif
/* A define to point out empty loop bodies. */
#define NOOP
/* A macro to wrap statements */
#define MACRO(x) do { x ; } while(0)
/* Determine the minimum of two values.
* Some systems define this in system includes.
*/
#ifndef MIN
#define MIN(a,b) (((a)<(b))?(a):(b))
#endif /* MIN */
#endif /* DRIVER_H__ */