/*
******************************************************************************** * ringlib.h -- Include file for standard RingLib features * * Mark Showalter and Neil Heather, PDS Ring-Moon Systems Node, May 1998 *******************************************************************************/ #ifndef RINGLIB_INCLUDED #define RINGLIB_INCLUDED /******************************************************************************* * Check some properties of this compiler *******************************************************************************/ /* * The only really really braindead compiler out there is the default Sun * compiler. It is recognized by "sun" being defined and by "__STDC__" being * undefined. */ #ifdef __STDC__ #undef sun #endif #ifndef sun #define XRL_HAS_PROTOTYPES 1 #define XRL_HAS_VOIDSTAR 1 #define XRL_HAS_SIZE_T 1 #endif /* * We need to know how to declare a 4-byte integer. The int type is usually * four bytes but is sometimes two bytes. The long type is usually four bytes * but is sometimes eight bytes. * * So far, int is four bytes on all systems where RingLib has been tested. * However, this may have to be updated in the future. */ #define XRL_INT_IS_FOURBYTES 1 /******************************************************************************* * DATA TYPES * * This section may have conditional code for different compilers *******************************************************************************/ #ifdef XRL_INT_IS_FOURBYTES typedef int RL_INT4; /* 4-byte integer */ #else typedef long RL_INT4; /* 4-byte integer */ #endif typedef int RL_BOOL; /* boolean */ typedef float RL_FLT4; /* single precision */ typedef double RL_FLT8; /* double precision */ typedef char RL_CHAR; /* 1-byte character */ /* The ANSI C type "size_t" is not supported by the Sun C compiler. */ #include <stddef.h> /* should define size_t */ #ifdef XRL_HAS_SIZE_T typedef size_t RL_SIZE; /* size type */ #else typedef unsigned RL_SIZE; /* size type */ #endif /* The RL_VOID data type is used exclusively in the context of "void *". * The ANSI C data type "void *" is not supported by the Sun C compiler. * Note that this has to be done as a macro definition, because declaring a * typedef to be void is not allowed (since void is not really a data type!) */ #ifdef XRL_HAS_VOIDSTAR #define RL_VOID void #else #define RL_VOID char #endif /******************************************************************************* * MACRO DEFINITIONS *******************************************************************************/ /* Required constants */ #ifndef TRUE #define TRUE ((RL_BOOL) 1) #define FALSE ((RL_BOOL) 0) #endif #ifndef NULL #define NULL ((RL_VOID *) 0) #endif /* The macro RL_PROTO(), is used in function prototype declarations. * * Using this macro, a function prototype can be declared as follows: * type function_name RL_PROTO((arg1, arg2, ...)) * Note the use of double parentheses. The RL_PROTO macro will eliminate the * arguments for those C compilers (such as Sun's) on which prototypes are not * supported. */ #ifdef XRL_HAS_PROTOTYPES #define RL_PROTO(arglist) arglist #else #define RL_PROTO(arglist) () #endif /* Symbolic names for RingLib error types */ #define RL_IGNORE -1 /* don't print, don't record */ #define RL_INFORM 1 /* print, don't record */ #define RL_RECORD -2 /* don't print, record */ #define RL_SIGNAL 2 /* print, record */ #define RL_ABORT 3 /* print, abort */ /* On some systems, HUGE is defined instead of HUGE_VAL inside math.h */ #ifndef HUGE_VAL #ifdef HUGE #define HUGE_VAL HUGE #endif #endif /******************************************************************************* * FUNCTION PROTOTYPES *******************************************************************************/ /* * rl_error.c -- RingLib error handling routines */ void RL_RaiseError RL_PROTO((RL_CHAR *error_id, RL_CHAR *message)); void RL_PipeErrors RL_PROTO((RL_CHAR *filename)); RL_CHAR *RL_TestError RL_PROTO((void)); RL_CHAR *RL_ClearError RL_PROTO((void)); RL_BOOL RL_TestError1 RL_PROTO((RL_CHAR *error_id)); RL_BOOL RL_ClearError1 RL_PROTO((RL_CHAR *error_id)); RL_INT4 RL_SetErrorType RL_PROTO((RL_CHAR *error_id, RL_INT4 error_type)); RL_INT4 RL_GetErrorType RL_PROTO((RL_CHAR *error_id)); /* * rlmemory.c -- Ringlib memory management routines */ RL_VOID *XRL_Malloc RL_PROTO((RL_SIZE size)); RL_VOID *XRL_Realloc RL_PROTO((RL_VOID *pointer, RL_SIZE size)); RL_VOID *XRL_MustAlloc RL_PROTO((RL_SIZE size)); void XRL_Free RL_PROTO((RL_VOID *pointer)); #endif /********************************************************************************/