/* * R : A Computer Language for Statistical Data Analysis * Copyright (C) 1995, 1996 Robert Gentleman and Ross Ihaka * Copyright (C) 1998--2006 The R Development Core Team. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef DEFN_H_ #define DEFN_H_ /* seems unused */ #define COUNTING #define BYTECODE /* probably no longer needed */ #define NEW_CONDITION_HANDLING /* To test the write barrier used by the generational collector, define TESTING_WRITE_BARRIER. This makes the internal structure of SEXPRECs visible only inside of files that explicitly define USE_RINTERNALS, and all uses of SEXPREC fields that do not go through the appropriate functions or macros will become compilation errors. Since this does impose a small but noticable performance penalty, code that includes Defn.h (or code that explicitly defines USE_RINTERNALS) can access a SEXPREC's fields directly. */ #ifndef TESTING_WRITE_BARRIER # define USE_RINTERNALS #endif #ifdef HAVE_VISIBILITY_ATTRIBUTE # define attribute_visible __attribute__ ((visibility ("default"))) # define attribute_hidden __attribute__ ((visibility ("hidden"))) #else # define attribute_visible # define attribute_hidden #endif #define MAXELTSIZE 8192 /* The largest string size */ #include void Rf_CoercionWarning(int);/* warning code */ int Rf_LogicalFromInteger(int, int*); int Rf_LogicalFromReal(double, int*); int Rf_LogicalFromComplex(Rcomplex, int*); int Rf_IntegerFromLogical(int, int*); int Rf_IntegerFromReal(double, int*); int Rf_IntegerFromComplex(Rcomplex, int*); double Rf_RealFromLogical(int, int*); double Rf_RealFromInteger(int, int*); double Rf_RealFromComplex(Rcomplex, int*); Rcomplex Rf_ComplexFromLogical(int, int*); Rcomplex Rf_ComplexFromInteger(int, int*); Rcomplex Rf_ComplexFromReal(double, int*); #define CALLED_FROM_DEFN_H 1 #include /*-> Arith.h, Complex.h, Error.h, Memory.h PrtUtil.h, Utils.h */ #undef CALLED_FROM_DEFN_H #include "Internal.h" /* do_FOO */ #include "Errormsg.h" /* SunOS 4 is famous for broken header files. */ #ifdef SunOS4 # ifndef NULL # define NULL 0 # endif #endif /* SunOS4 */ #if defined(Win32) || defined(HAVE_AQUA) extern void R_ProcessEvents(void); #endif #ifdef Win32 # include #else # include # include #endif #ifdef Unix # define OSTYPE "unix" # define FILESEP "/" #endif /* Unix */ #ifdef Win32 # define OSTYPE "windows" # define FILESEP "/" #endif /* Win32 */ #ifdef HAVE_F77_UNDERSCORE # define F77_SYMBOL(x) x ## _ # define F77_QSYMBOL(x) #x "_" #else # define F77_SYMBOL(x) x # define F77_QSYMBOL(x) #x #endif /* Heap and Pointer Protection Stack Sizes. */ /* These are for future protection: will need to be different on Win64 */ typedef unsigned long R_ulong_t; typedef long R_long_t; /* NB: will need a 64-bit type, ULONG64 or size_t, for Win64 */ #if defined HAVE_DECL_SIZE_MAX && HAVE_DECL_SIZE_MAX # ifdef HAVE_INTTYPES_H # include # endif /* According to POSIX inttypes.h should include stdint.h, but let's be sure. */ # ifdef HAVE_STDINT_H # include # endif # ifdef HAVE_LIMITS_H # include # endif typedef size_t R_size_t; /* final precaution in case we don't have the right headers */ # ifdef SIZE_MAX # define R_SIZE_T_MAX SIZE_MAX # else # define R_SIZE_T_MAX ULONG_MAX # endif #else typedef unsigned long R_size_t; # define R_SIZE_T_MAX ULONG_MAX #endif /* These are optional C99 types */ #if !defined(HAVE_INTPTR_T) && !defined(intptr_t) typedef long intptr_t; #endif #if !defined(HAVE_UINTPTR_T) && !defined(uintptr_t) typedef unsigned long uintptr_t; #endif #define Mega 1048576. /* 1 Mega Byte := 2^20 (= 1048576) Bytes */ #define Giga 1073741824. /* 1 Giga Byte := 2^30 Bytes */ /* R_PPSSIZE The pointer protection stack size */ /* R_NSIZE The number of cons cells */ /* R_VSIZE The vector heap size in bytes */ /* These values are defaults and can be overridden in config.h The maxima and minima are in ../unix/sys-common.c */ #ifndef R_PPSSIZE #define R_PPSSIZE 50000L #endif #ifndef R_NSIZE #define R_NSIZE 350000L #endif #ifndef R_VSIZE #define R_VSIZE 6291456L #endif #include /* declare substitutions */ #if !defined(acosh) && defined(HAVE_DECL_ACOSH) && !HAVE_DECL_ACOSH extern double acosh(double x); #endif #if !defined(asinh) && defined(HAVE_DECL_ASINH) && !HAVE_DECL_ASINH extern double asinh(double x); #endif #if !defined(atanh) && defined(HAVE_DECL_ATANH) && !HAVE_DECL_ATANH extern double atanh(double x); #endif #if !defined(snprintf) && defined(HAVE_DECL_SNPRINTF) && !HAVE_DECL_SNPRINTF extern int snprintf (char *s, size_t n, const char *format, ...); #endif #if !defined(strdup) && defined(HAVE_DECL_STRDUP) && !HAVE_DECL_STRDUP extern char *strdup(const char *s1); #endif #if !defined(strncascmp) && defined(HAVE_DECL_STRNCASECMP) && !HAVE_DECL_STRNCASECMP extern int strncasecmp(const char *s1, const char *s2, size_t n); #endif #if !defined(vsnprintf) && defined(HAVE_DECL_VSNPRINTF) && !HAVE_DECL_VSNPRINTF extern int vsnprintf (char *str, size_t count, const char *fmt, va_list arg); #endif /* Glibc manages to not define this in -pedantic -ansi */ #if defined(HAVE_PUTENV) && !defined(putenv) && defined(HAVE_DECL_PUTENV) && !HAVE_DECL_PUTENV extern int putenv(char *string); #endif /* Maximal length of an entire file name */ #if !defined(PATH_MAX) # if defined(HAVE_SYS_PARAM_H) # include # endif # if !defined(PATH_MAX) # if defined(MAXPATHLEN) # define PATH_MAX MAXPATHLEN # elif defined(Win32) # define PATH_MAX 260 # else /* quite possibly unlimited, so we make this large, and test when used */ # define PATH_MAX 5000 # endif # endif #endif #ifdef HAVE_POSIX_SETJMP # define SIGJMP_BUF sigjmp_buf # define SIGSETJMP(x,s) sigsetjmp(x,s) # define SIGLONGJMP(x,i) siglongjmp(x,i) # define JMP_BUF sigjmp_buf # define SETJMP(x) sigsetjmp(x,0) # define LONGJMP(x,i) siglongjmp(x,i) #else # define SIGJMP_BUF jmp_buf # define SIGSETJMP(x,s) setjmp(x) # define SIGLONGJMP(x,i) longjmp(x,i) # define JMP_BUF jmp_buf # define SETJMP(x) setjmp(x) # define LONGJMP(x,i) longjmp(x,i) #endif /* Availability of timing: on Unix, we need times(2). On Windows and the Mac, we can do without. */ #if (defined(HAVE_TIMES) || defined(Win32)) # define _R_HAVE_TIMING_ 1 #endif #include #define HSIZE 4119 /* The size of the hash table for symbols */ #define MAXIDSIZE 256 /* Largest symbol size possible */ /* The type of the do_xxxx functions. */ /* These are the built-in R functions. */ typedef SEXP (*CCODE)(); /* Information for Deparsing Expressions */ typedef enum { PP_ASSIGN = 1, PP_ASSIGN2 = 2, PP_BINARY = 3, PP_BINARY2 = 4, PP_BREAK = 5, PP_CURLY = 6, PP_FOR = 7, PP_FUNCALL = 8, PP_FUNCTION = 9, PP_IF = 10, PP_NEXT = 11, PP_PAREN = 12, PP_RETURN = 13, PP_SUBASS = 14, PP_SUBSET = 15, PP_WHILE = 16, PP_UNARY = 17, PP_DOLLAR = 18, PP_FOREIGN = 19, PP_REPEAT = 20 } PPkind; typedef enum { PREC_FN = 0, PREC_LEFT = 1, PREC_EQ = 2, PREC_RIGHT = 3, PREC_TILDE = 4, PREC_OR = 5, PREC_AND = 6, PREC_NOT = 7, PREC_COMPARE = 8, PREC_SUM = 9, PREC_PROD = 10, PREC_PERCENT = 11, PREC_COLON = 12, PREC_SIGN = 13, PREC_POWER = 14, PREC_DOLLAR = 15, PREC_NS = 16, PREC_SUBSET = 17 } PPprec; typedef struct { PPkind kind; /* deparse kind */ PPprec precedence; /* operator precedence */ unsigned int rightassoc; /* right associative? */ } PPinfo; /* The type definitions for the table of built-in functions. */ /* This table can be found in ../main/names.c */ typedef struct { char *name; /* print name */ CCODE cfun; /* c-code address */ int code; /* offset within c-code */ int eval; /* evaluate args? */ int arity; /* function arity */ PPinfo gram; /* pretty-print info */ } FUNTAB; #ifdef USE_RINTERNALS /* There is much more in Rinternals.h, including function versions * of the Promise and Hasking groups. */ /* Primitive Access Macros */ #define PRIMOFFSET(x) ((x)->u.primsxp.offset) #define SET_PRIMOFFSET(x,v) (((x)->u.primsxp.offset)=(v)) #define PRIMFUN(x) (R_FunTab[(x)->u.primsxp.offset].cfun) #define PRIMNAME(x) (R_FunTab[(x)->u.primsxp.offset].name) #define PRIMVAL(x) (R_FunTab[(x)->u.primsxp.offset].code) #define PRIMARITY(x) (R_FunTab[(x)->u.primsxp.offset].arity) #define PPINFO(x) (R_FunTab[(x)->u.primsxp.offset].gram) #define PRIMPRINT(x) (((R_FunTab[(x)->u.primsxp.offset].eval)/100)%10) /* Promise Access Macros */ #define PRCODE(x) ((x)->u.promsxp.expr) #define PRENV(x) ((x)->u.promsxp.env) #define PRVALUE(x) ((x)->u.promsxp.value) #define PRSEEN(x) ((x)->sxpinfo.gp) #define SET_PRSEEN(x,v) (((x)->sxpinfo.gp)=(v)) /* Hashing Macros */ #define HASHASH(x) ((x)->sxpinfo.gp) #define HASHVALUE(x) TRUELENGTH(x) #define SET_HASHASH(x,v) (((x)->sxpinfo.gp)=(v)) #define SET_HASHVALUE(x,v) SET_TRUELENGTH(x, v) /* Vector Heap Structure */ typedef struct { union { SEXP backpointer; double align; } u; } VECREC, *VECP; /* Vector Heap Macros */ #define BACKPOINTER(v) ((v).u.backpointer) #define BYTE2VEC(n) (((n)>0)?(((n)-1)/sizeof(VECREC)+1):0) #define INT2VEC(n) (((n)>0)?(((n)*sizeof(int)-1)/sizeof(VECREC)+1):0) #define FLOAT2VEC(n) (((n)>0)?(((n)*sizeof(double)-1)/sizeof(VECREC)+1):0) #define COMPLEX2VEC(n) (((n)>0)?(((n)*sizeof(Rcomplex)-1)/sizeof(VECREC)+1):0) #define PTR2VEC(n) (((n)>0)?(((n)*sizeof(SEXP)-1)/sizeof(VECREC)+1):0) /* Bindings */ /* use the same bits (15 and 14) in symbols and bindings */ #define ACTIVE_BINDING_MASK (1<<15) #define BINDING_LOCK_MASK (1<<14) #define SPECIAL_BINDING_MASK (ACTIVE_BINDING_MASK | BINDING_LOCK_MASK) #define IS_ACTIVE_BINDING(b) ((b)->sxpinfo.gp & ACTIVE_BINDING_MASK) #define BINDING_IS_LOCKED(b) ((b)->sxpinfo.gp & BINDING_LOCK_MASK) #define SET_ACTIVE_BINDING_BIT(b) ((b)->sxpinfo.gp |= ACTIVE_BINDING_MASK) #define LOCK_BINDING(b) ((b)->sxpinfo.gp |= BINDING_LOCK_MASK) #define UNLOCK_BINDING(b) ((b)->sxpinfo.gp &= (~BINDING_LOCK_MASK)) #else /* USE_RINTERNALS */ typedef struct VECREC *VECP; int (PRIMOFFSET)(SEXP x); void (SET_PRIMOFFSET)(SEXP x, int v); #define PRIMFUN(x) (R_FunTab[PRIMOFFSET(x)].cfun) #define PRIMNAME(x) (R_FunTab[PRIMOFFSET(x)].name) #define PRIMVAL(x) (R_FunTab[PRIMOFFSET(x)].code) #define PRIMARITY(x) (R_FunTab[PRIMOFFSET(x)].arity) #define PPINFO(x) (R_FunTab[PRIMOFFSET(x)].gram) #define PRIMPRINT(x) (((R_FunTab[PRIMOFFSET(x)].eval)/100)%10) Rboolean (IS_ACTIVE_BINDING)(SEXP b); Rboolean (BINDING_IS_LOCKED)(SEXP b); void (SET_ACTIVE_BINDING_BIT)(SEXP b); void (LOCK_BINDING)(SEXP b); void (UNLOCK_BINDING)(SEXP b); #endif /* USE_RINTERNALS */ #ifdef BYTECODE # ifdef BC_INT_STACK typedef union { void *p; int i; } IStackval; # endif #endif /* Evaluation Context Structure */ typedef struct RCNTXT { struct RCNTXT *nextcontext; /* The next context up the chain */ int callflag; /* The context "type" */ JMP_BUF cjmpbuf; /* C stack and register information */ int cstacktop; /* Top of the pointer protection stack */ int evaldepth; /* evaluation depth at inception */ SEXP promargs; /* Promises supplied to closure */ SEXP callfun; /* The closure called */ SEXP sysparent; /* environment the closure was called from */ SEXP call; /* The call that effected this context*/ SEXP cloenv; /* The environment */ SEXP conexit; /* Interpreted "on.exit" code */ void (*cend)(void *); /* C "on.exit" thunk */ void *cenddata; /* data for C "on.exit" thunk */ char *vmax; /* top of R_alloc stack */ int intsusp; /* interrupts are suspended */ SEXP handlerstack; /* condition handler stack */ SEXP restartstack; /* stack of available restarts */ #ifdef BYTECODE SEXP *nodestack; # ifdef BC_INT_STACK IStackval *intstack; # endif #endif } RCNTXT, *context; /* The Various Context Types. * In general the type is a bitwise OR of the values below. * Note that CTXT_LOOP is already the or of CTXT_NEXT and CTXT_BREAK. * Only functions should have the third bit turned on; * this allows us to move up the context stack easily * with either RETURN's or GENERIC's or RESTART's. * If you add a new context type for functions make sure * CTXT_NEWTYPE & CTXT_FUNCTION > 0 */ enum { CTXT_TOPLEVEL = 0, CTXT_NEXT = 1, CTXT_BREAK = 2, CTXT_LOOP = 3, /* break OR next target */ CTXT_FUNCTION = 4, CTXT_CCODE = 8, CTXT_RETURN = 12, CTXT_BROWSER = 16, CTXT_GENERIC = 20, CTXT_RESTART = 32, CTXT_BUILTIN = 64 /* used in profiling */ }; /* TOP 0 0 0 0 0 0 = 0 NEX 1 0 0 0 0 0 = 1 BRE 0 1 0 0 0 0 = 2 LOO 1 1 0 0 0 0 = 3 FUN 0 0 1 0 0 0 = 4 CCO 0 0 0 1 0 0 = 8 BRO 0 0 0 0 1 0 = 16 RET 0 0 1 1 0 0 = 12 GEN 0 0 1 0 1 0 = 20 RES 0 0 0 0 0 0 1 = 32 BUI 0 0 0 0 0 0 0 1 = 64 */ #define IS_RESTART_BIT_SET(flags) ((flags) & CTXT_RESTART) #define SET_RESTART_BIT_ON(flags) (flags |= CTXT_RESTART) #define SET_RESTART_BIT_OFF(flags) (flags &= ~CTXT_RESTART) /* Miscellaneous Definitions */ #define streql(s, t) (!strcmp((s), (t))) /* Arithmetic and Relation Operators */ typedef enum { PLUSOP = 1, MINUSOP, TIMESOP, DIVOP, POWOP, MODOP, IDIVOP } ARITHOP_TYPE; typedef enum { EQOP = 1, NEOP, LTOP, LEOP, GEOP, GTOP } RELOP_TYPE; /* File Handling */ /* #define R_EOF 65535 */ #define R_EOF -1 /*--- Global Variables ---------------------------------------------------- */ /* Defined and initialized in names.c (not main.c) :*/ #ifndef __R_Names__ extern #endif FUNTAB R_FunTab[]; /* Built in functions */ #include #ifdef __MAIN__ # define INI_as(v) = v #define extern0 attribute_hidden #else # define INI_as(v) #define extern0 extern #endif /* extern int errno; already have errno.h ! */ extern int gc_inhibit_torture INI_as(1); LibExtern Rboolean R_interrupts_suspended INI_as(FALSE); LibExtern int R_interrupts_pending INI_as(0); /* R Home Directory */ LibExtern char* R_Home; /* Root of the R tree */ /* Memory Management */ extern0 R_size_t R_NSize INI_as(R_NSIZE);/* Size of cons cell heap */ extern0 R_size_t R_VSize INI_as(R_VSIZE);/* Size of the vector heap */ extern0 SEXP R_NHeap; /* Start of the cons cell heap */ extern0 SEXP R_FreeSEXP; /* Cons cell free list */ extern0 R_size_t R_Collected; /* Number of free cons cells (after gc) */ extern0 SEXP R_PreciousList; /* List of Persistent Objects */ LibExtern int R_Is_Running; /* for Windows memory manager */ /* The Pointer Protection Stack */ extern0 int R_PPStackSize INI_as(R_PPSSIZE); /* The stack size (elements) */ extern0 int R_PPStackTop; /* The top of the stack */ extern0 SEXP* R_PPStack; /* The pointer protection stack */ /* Evaluation Environment */ LibExtern SEXP R_CurrentExpr; /* Currently evaluating expression */ extern0 SEXP R_ReturnedValue; /* Slot for return-ing values */ extern0 SEXP* R_SymbolTable; /* The symbol table */ LibExtern RCNTXT R_Toplevel; /* Storage for the toplevel environment */ LibExtern RCNTXT* R_ToplevelContext; /* The toplevel environment */ LibExtern RCNTXT* R_GlobalContext; /* The global environment */ LibExtern int R_Visible; /* Value visibility flag */ LibExtern int R_EvalDepth INI_as(0); /* Evaluation recursion depth */ extern0 int R_BrowseLevel INI_as(0); /* how deep the browser is */ extern0 int R_BrowseLines INI_as(0); /* lines/per call in browser */ extern0 int R_Expressions INI_as(5000); /* options(expressions) */ extern0 int R_Expressions_keep INI_as(5000); /* options(expressions) */ extern0 Rboolean R_KeepSource INI_as(FALSE); /* options(keep.source) */ extern0 int R_WarnLength INI_as(1000); /* Error/warning max length */ extern uintptr_t R_CStackLimit INI_as((uintptr_t)-1); /* C stack limit */ extern uintptr_t R_CStackStart INI_as((uintptr_t)-1); /* Initial stack address */ extern0 int R_CStackDir INI_as(1); /* C stack direction */ /* File Input/Output */ LibExtern Rboolean R_Interactive INI_as(TRUE); /* TRUE during interactive use*/ extern0 Rboolean R_Quiet INI_as(FALSE); /* Be as quiet as possible */ extern Rboolean R_Slave INI_as(FALSE); /* Run as a slave process */ extern0 Rboolean R_Verbose INI_as(FALSE); /* Be verbose */ /* extern int R_Console; */ /* Console active flag */ /* IoBuffer R_ConsoleIob; : --> ./IOStuff.h */ /* R_Consolefile is used in the internet module */ extern FILE* R_Consolefile INI_as(NULL); /* Console output file */ extern FILE* R_Outputfile INI_as(NULL); /* Output file */ extern0 int R_ErrorCon INI_as(2); /* Error connection */ LibExtern char* R_TempDir INI_as(NULL); /* Name of per-session dir */ extern0 char* Sys_TempDir INI_as(NULL); /* Name of per-session dir if set by R itself */ extern0 char R_StdinEnc[31] INI_as(""); /* Encoding assumed for stdin */ /* Objects Used In Parsing */ extern0 SEXP R_CommentSxp; /* Comments accumulate here */ extern0 int R_ParseError INI_as(0); /* Line where parse error occured */ #define PARSE_CONTEXT_SIZE 256 /* Recent parse context kept in a circular buffer */ extern0 char R_ParseContext[PARSE_CONTEXT_SIZE] INI_as(""); extern0 int R_ParseContextLast INI_as(0); /* last character in context buffer */ /* Image Dump/Restore */ extern int R_DirtyImage INI_as(0); /* Current image dirty */ /* History */ LibExtern char* R_HistoryFile; /* Name of the history file */ LibExtern int R_HistorySize; /* Size of the history file */ LibExtern int R_RestoreHistory; /* restore the history file? */ extern void R_setupHistory(); /* Warnings/Errors */ extern0 int R_CollectWarnings INI_as(0); /* the number of warnings */ extern0 SEXP R_Warnings; /* the warnings and their calls */ extern0 int R_ShowErrorMessages INI_as(1); /* show error messages? */ extern0 SEXP R_HandlerStack; /* Condition handler stack */ extern0 SEXP R_RestartStack; /* Stack of available restarts */ LibExtern Rboolean utf8locale INI_as(FALSE); /* is this a UTF-8 locale? */ LibExtern Rboolean mbcslocale INI_as(FALSE); /* is this a MBCS locale? */ #ifdef Win32 LibExtern unsigned int localeCP INI_as(1252); /* the locale's codepage */ #endif extern0 char OutDec INI_as('.'); /* decimal point used for output */ /* Initialization of the R environment when it is embedded */ extern int Rf_initEmbeddedR(int argc, char **argv); /* GUI type */ extern char* R_GUIType INI_as("unknown"); #ifdef BYTECODE #define R_BCNODESTACKSIZE 10000 extern0 SEXP *R_BCNodeStackBase, *R_BCNodeStackTop, *R_BCNodeStackEnd; # ifdef BC_INT_STACK #define R_BCINTSTACKSIZE 10000 extern0 IStackval *R_BCIntStackBase, *R_BCIntStackTop, *R_BCIntStackEnd; # endif #endif /* Pointer type and utilities for dispatch in the methods package */ typedef SEXP (*R_stdGen_ptr_t)(SEXP, SEXP, SEXP); /* typedef */ R_stdGen_ptr_t R_get_standardGeneric_ptr(); /* get method */ R_stdGen_ptr_t R_set_standardGeneric_ptr(R_stdGen_ptr_t, SEXP); /* set method */ LibExtern SEXP R_MethodsNamespace; SEXP R_deferred_default_method(); SEXP R_set_prim_method(SEXP fname, SEXP op, SEXP code_vec, SEXP fundef, SEXP mlist); SEXP do_set_prim_method(SEXP op, char *code_string, SEXP fundef, SEXP mlist); void R_set_quick_method_check(R_stdGen_ptr_t); SEXP R_primitive_methods(SEXP op); SEXP R_primitive_generic(SEXP op); /* slot management (in attrib.c) */ SEXP R_do_slot(SEXP obj, SEXP name); SEXP R_do_slot_assign(SEXP obj, SEXP name, SEXP value); /* smallest decimal exponent, needed in format.c, set in Init_R_Machine */ extern0 int R_dec_min_exponent INI_as(-308); /* structure for caching machine accuracy values */ typedef struct { int ibeta, it, irnd, ngrd, machep, negep, iexp, minexp, maxexp; double eps, epsneg, xmin, xmax; } AccuracyInfo; LibExtern AccuracyInfo R_AccuracyInfo; extern0 unsigned int max_contour_segments INI_as(25000); #ifdef __MAIN__ # undef extern # undef extern0 # undef LibExtern #endif #undef INI_as /*--- FUNCTIONS ------------------------------------------------------ */ # define begincontext Rf_begincontext # define checkArity Rf_checkArity # define check_stack_balance Rf_check_stack_balance # define CheckFormals Rf_CheckFormals # define CleanEd Rf_CleanEd # define CoercionWarning Rf_CoercionWarning # define ComplexFromInteger Rf_ComplexFromInteger # define ComplexFromLogical Rf_ComplexFromLogical # define ComplexFromReal Rf_ComplexFromReal # define ComplexFromString Rf_ComplexFromString # define copyListMatrix Rf_copyListMatrix # define copyMostAttribNoTs Rf_copyMostAttribNoTs # define CustomPrintValue Rf_CustomPrintValue # define DataFrameClass Rf_DataFrameClass # define ddfindVar Rf_ddfindVar # define deparse1 Rf_deparse1 # define deparse1line Rf_deparse1line # define DispatchGroup Rf_DispatchGroup # define DispatchOrEval Rf_DispatchOrEval # define dynamicfindVar Rf_dynamicfindVar # define EncodeRaw Rf_EncodeRaw # define EncodeString Rf_EncodeString # define EnsureString Rf_EnsureString # define endcontext Rf_endcontext # define envlength Rf_envlength # define ErrorMessage Rf_ErrorMessage # define evalList Rf_evalList # define evalListKeepMissing Rf_evalListKeepMissing # define factorsConform Rf_factorsConform # define findcontext Rf_findcontext # define findVar1 Rf_findVar1 # define FrameClassFix Rf_FrameClassFix # define framedepth Rf_framedepth # define frameSubscript Rf_frameSubscript # define get1index Rf_get1index # define getVar Rf_getVar # define getVarInFrame Rf_getVarInFrame # define hashpjw Rf_hashpjw # define InheritsClass Rf_InheritsClass # define InitArithmetic Rf_InitArithmetic # define InitColors Rf_InitColors # define InitConnections Rf_InitConnections # define InitEd Rf_InitEd # define InitFunctionHashing Rf_InitFunctionHashing # define InitBaseEnv Rf_InitBaseEnv # define InitGlobalEnv Rf_InitGlobalEnv # define InitMemory Rf_InitMemory # define InitNames Rf_InitNames # define InitOptions Rf_InitOptions # define InitTempDir Rf_InitTempDir # define initStack Rf_initStack # define IntegerFromComplex Rf_IntegerFromComplex # define IntegerFromLogical Rf_IntegerFromLogical # define IntegerFromReal Rf_IntegerFromReal # define IntegerFromString Rf_IntegerFromString # define internalTypeCheck Rf_internalTypeCheck # define isValidName Rf_isValidName # define ItemName Rf_ItemName # define jump_to_toplevel Rf_jump_to_toplevel # define levelsgets Rf_levelsgets # define LogicalFromComplex Rf_LogicalFromComplex # define LogicalFromInteger Rf_LogicalFromInteger # define LogicalFromReal Rf_LogicalFromReal # define LogicalFromString Rf_LogicalFromString # define mainloop Rf_mainloop # define makeSubscript Rf_makeSubscript # define mat2indsub Rf_mat2indsub # define matchArg Rf_matchArg # define matchArgExact Rf_matchArgExact # define matchArgs Rf_matchArgs # define matchPar Rf_matchPar # define Mbrtowc Rf_mbrtowc # define mkCLOSXP Rf_mkCLOSXP # define mkComplex Rf_mkComplex # define mkFalse Rf_mkFalse # define mkFloat Rf_mkFloat # define mkNA Rf_mkNA # define mkPROMISE Rf_mkPROMISE # define mkQUOTE Rf_mkQUOTE # define mkSYMSXP Rf_mkSYMSXP # define mkTrue Rf_mkTrue # define NewEnvironment Rf_NewEnvironment # define OneIndex Rf_OneIndex # define onintr Rf_onintr # define onsigusr1 Rf_onsigusr1 # define onsigusr2 Rf_onsigusr2 # define parse Rf_parse # define PrintDefaults Rf_PrintDefaults # define PrintGreeting Rf_PrintGreeting # define PrintValueEnv Rf_PrintValueEnv # define PrintValueRec Rf_PrintValueRec # define PrintVersion Rf_PrintVersion # define PrintVersionString Rf_PrintVersionString # define PrintWarnings Rf_PrintWarnings # define promiseArgs Rf_promiseArgs # define RealFromComplex Rf_RealFromComplex # define RealFromInteger Rf_RealFromInteger # define RealFromLogical Rf_RealFromLogical # define RealFromString Rf_RealFromString # define RemoveClass Rf_RemoveClass # define sortVector Rf_sortVector # define ssort Rf_ssort # define str2type Rf_str2type # define StringFromComplex Rf_StringFromComplex # define StringFromInteger Rf_StringFromInteger # define StringFromLogical Rf_StringFromLogical # define StringFromReal Rf_StringFromReal # define StrToInternal Rf_StrToInternal # define substituteList Rf_substituteList # define tsConform Rf_tsConform # define tspgets Rf_tspgets # define type2char Rf_type2char # define type2str Rf_type2str # define type2symbol Rf_type2symbol # define unbindVar Rf_unbindVar # define usemethod Rf_usemethod # define vectorSubscript Rf_vectorSubscript # define warningcall Rf_warningcall # define WarningMessage Rf_WarningMessage # define yychar Rf_yychar # define yylval Rf_yylval # define yynerrs Rf_yynerrs # define yyparse Rf_yyparse /* Platform Dependent Gui Hooks */ #define R_CONSOLE 1 #define R_FILE 2 #define R_TEXT 3 /* The maximum length of input line which will be asked for */ #define CONSOLE_BUFFER_SIZE 1024 int R_ReadConsole(char*, unsigned char*, int, int); void R_WriteConsole(char*, int); void R_ResetConsole(void); void R_FlushConsole(void); void R_ClearerrConsole(void); void R_Busy(int); int R_ShowFiles(int, char **, char **, char *, Rboolean, char *); int R_EditFiles(int, char **, char **, char *); int R_ChooseFile(int, char*, int); char* R_HomeDir(void); Rboolean R_FileExists(char*); Rboolean R_HiddenFile(char*); double R_FileMtime(char*); /* environment cell access */ typedef struct R_varloc_st *R_varloc_t; R_varloc_t R_findVarLocInFrame(SEXP, SEXP); SEXP R_GetVarLocValue(R_varloc_t); SEXP R_GetVarLocSymbol(R_varloc_t); Rboolean R_GetVarLocMISSING(R_varloc_t); void R_SetVarLocValue(R_varloc_t, SEXP); /* deparse option bits */ #define KEEPINTEGER 1 #define QUOTEEXPRESSIONS 2 #define SHOWATTRIBUTES 4 #define USESOURCE 8 #define WARNINCOMPLETE 16 #define DELAYPROMISES 32 /* common combinations of the above */ #define SIMPLEDEPARSE 0 #define FORSOURCING 31 /* Coercion functions */ int Rf_LogicalFromString(SEXP, int*); int Rf_IntegerFromString(SEXP, int*); double Rf_RealFromString(SEXP, int*); Rcomplex Rf_ComplexFromString(SEXP, int*); SEXP Rf_StringFromLogical(int, int*); SEXP Rf_StringFromInteger(int, int*); SEXP Rf_StringFromReal(double, int*); SEXP Rf_StringFromComplex(Rcomplex, int*); SEXP Rf_EnsureString(SEXP); /* Other Internally Used Functions */ SEXP Rf_append(SEXP, SEXP); /* apparently unused now */ void begincontext(RCNTXT*, int, SEXP, SEXP, SEXP, SEXP, SEXP); void checkArity(SEXP, SEXP); void CheckFormals(SEXP); void check_stack_balance(SEXP op, int save); void CleanEd(void); void copyListMatrix(SEXP, SEXP, Rboolean); void copyMostAttribNoTs(SEXP, SEXP); void CustomPrintValue(SEXP,SEXP); void DataFrameClass(SEXP); SEXP ddfindVar(SEXP, SEXP); SEXP deparse1(SEXP,Rboolean,int); SEXP deparse1line(SEXP,Rboolean); int DispatchOrEval(SEXP, SEXP, char*, SEXP, SEXP, SEXP*, int, int); int DispatchGroup(char*, SEXP,SEXP,SEXP,SEXP,SEXP*); SEXP duplicated(SEXP); SEXP dynamicfindVar(SEXP, RCNTXT*); void endcontext(RCNTXT*); int envlength(SEXP); SEXP evalList(SEXP, SEXP, SEXP); SEXP evalListKeepMissing(SEXP, SEXP); int factorsConform(SEXP, SEXP); void findcontext(int, SEXP, SEXP); SEXP findVar1(SEXP, SEXP, SEXPTYPE, int); void FrameClassFix(SEXP); int framedepth(RCNTXT*); SEXP frameSubscript(int, SEXP, SEXP); int get1index(SEXP, SEXP, int, Rboolean, int); SEXP getVar(SEXP, SEXP); SEXP getVarInFrame(SEXP, SEXP); int hashpjw(char*); Rboolean InheritsClass(SEXP, char*); void InitArithmetic(void); void InitColors(void); void InitConnections(void); void InitEd(void); void InitFunctionHashing(void); void InitBaseEnv(void); void InitGlobalEnv(void); Rboolean R_current_trace_state(); Rboolean R_has_methods(SEXP); void R_InitialData(void); SEXP R_possible_dispatch(SEXP, SEXP, SEXP, SEXP); void InitMemory(void); void InitNames(void); void InitOptions(void); void Init_R_Variables(SEXP); void InitTempDir(void); void initStack(void); void R_InsertRestartHandlers(RCNTXT *, Rboolean); void internalTypeCheck(SEXP, SEXP, SEXPTYPE); Rboolean isMethodsDispatchOn(void); int isValidName(char *); void R_JumpToContext(RCNTXT *, int, SEXP); void jump_to_toplevel(void); SEXP levelsgets(SEXP, SEXP); void mainloop(void); SEXP makeSubscript(SEXP, SEXP, int *); SEXP mat2indsub(SEXP, SEXP); SEXP matchArg(SEXP, SEXP*); SEXP matchArgExact(SEXP, SEXP*); SEXP matchArgs(SEXP, SEXP); SEXP matchPar(char*, SEXP*); void memtrace_report(SEXP, SEXP); SEXP mkCLOSXP(SEXP, SEXP, SEXP); /* SEXP mkComplex(char *s); */ /* SEXP mkEnv(SEXP, SEXP, SEXP); */ SEXP mkFalse(void); /* SEXP mkFloat(char *s); SEXP mkNA(void); */ SEXP mkPRIMSXP (int, int); SEXP mkPROMISE(SEXP, SEXP); SEXP mkQUOTE(SEXP); SEXP mkSYMSXP(SEXP, SEXP); SEXP mkTrue(void); SEXP NewEnvironment(SEXP, SEXP, SEXP); void onintr(); RETSIGTYPE onsigusr1(int); RETSIGTYPE onsigusr2(int); int OneIndex(SEXP, SEXP, int, int, SEXP*, int); SEXP parse(FILE*, int); void PrintDefaults(SEXP); void PrintGreeting(void); void PrintValueEnv(SEXP, SEXP); void PrintValueRec(SEXP, SEXP); void PrintVersion(char *); void PrintVersionString(char *); void PrintWarnings(void); void process_site_Renviron(); void process_system_Renviron(); void process_user_Renviron(); SEXP promiseArgs(SEXP, SEXP); void Rcons_vprintf(const char *, va_list); void RemoveClass(SEXP, char *); SEXP R_data_class(SEXP , Rboolean); SEXP R_data_class2(SEXP); SEXP R_LoadFromFile(FILE*, int); SEXP R_NewHashedEnv(SEXP); extern int R_Newhashpjw(char*); FILE* R_OpenLibraryFile(char *); char *R_LibraryFileName(char *, char *, size_t); void R_RestoreGlobalEnv(void); void R_RestoreGlobalEnvFromFile(const char *, Rboolean); void R_SaveGlobalEnv(void); void R_SaveGlobalEnvToFile(const char *); void R_SaveToFile(SEXP, FILE*, int); void R_SaveToFileV(SEXP, FILE*, int, int); SEXP R_set_class(SEXP, SEXP, SEXP); int R_SetOptionWarn(int); int R_SetOptionWidth(int); void R_Suicide(char*); void sortVector(SEXP, Rboolean); void ssort(SEXP*,int); SEXPTYPE str2type(char*); int StrToInternal(char*); SEXP substituteList(SEXP, SEXP); SEXP R_syscall(int,RCNTXT*); int R_sysparent(int,RCNTXT*); SEXP R_sysframe(int,RCNTXT*); SEXP R_sysfunction(int,RCNTXT*); Rboolean tsConform(SEXP,SEXP); SEXP tspgets(SEXP, SEXP); char * type2char(SEXPTYPE); SEXP type2str(SEXPTYPE); SEXP type2symbol(SEXPTYPE); void unbindVar(SEXP, SEXP); #ifdef ALLOW_OLD_SAVE void unmarkPhase(void); #endif SEXP R_LookupMethod(SEXP, SEXP, SEXP, SEXP); int usemethod(char*, SEXP, SEXP, SEXP, SEXP, SEXP, SEXP, SEXP*); SEXP Rf_vectorSubscript(int, SEXP, int*, SEXP (*)(SEXP,SEXP), SEXP (*)(SEXP, int), SEXP); /* ../main/bind.c */ SEXP ItemName(SEXP, int); /* ../main/errors.c : */ void ErrorMessage(SEXP, int, ...); void WarningMessage(SEXP, R_WARNING, ...); SEXP R_GetTraceback(int); R_size_t R_GetMaxVSize(void); void R_SetMaxVSize(R_size_t); R_size_t R_GetMaxNSize(void); void R_SetMaxNSize(R_size_t); R_size_t R_Decode2Long(char *p, int *ierr); void R_SetPPSize(R_size_t); void R_run_onexits(RCNTXT *); void R_restore_globals(RCNTXT *); /* ../main/identical.c : */ Rboolean compute_identical(SEXP x, SEXP y); /* ../../main/printutils.c : */ typedef enum { Rprt_adj_left = 0, Rprt_adj_right = 1, Rprt_adj_centre = 2, Rprt_adj_none = 3 } Rprt_adj; int Rstrlen(SEXP, int); char *EncodeRaw(Rbyte); char *EncodeString(SEXP, int, int, Rprt_adj); /* main/sort.c */ void orderVector1(int *indx, int n, SEXP key, Rboolean nalast, Rboolean decreasing); /* main/subset.c */ SEXP R_subset3_dflt(SEXP, SEXP); /* main/subassign.c */ SEXP R_subassign3_dflt(SEXP, SEXP, SEXP, SEXP); #ifdef SUPPORT_MBCS /* implies we have this header */ #include #endif /* main/util.c */ void UNIMPLEMENTED_TYPE(char *s, SEXP x); void UNIMPLEMENTED_TYPEt(char *s, SEXPTYPE t); Rboolean utf8strIsASCII(char *str); #ifdef SUPPORT_MBCS typedef unsigned short ucs2_t; size_t mbcsToUcs2(char *in, ucs2_t *out, int nout); /* size_t mbcsMblen(char *in); size_t ucs2ToMbcs(ucs2_t *in, char *out); size_t ucs2Mblen(ucs2_t *in); */ int utf8clen(char c); #define mbs_init(x) memset(x, 0, sizeof(mbstate_t)) size_t Mbrtowc(wchar_t *wc, const char *s, size_t n, mbstate_t *ps); void mbcsToLatin1(char *in, char *out); Rboolean mbcsValid(char *str); char *Rf_strchr(const char *s, int c); char *Rf_strrchr(const char *s, int c); #else #define Rf_strchr(s, c) strchr(s, c) #define Rf_strrchr(s, c) strrchr(s, c) #endif #ifdef Win32 void R_fixslash(char *s); void R_fixbackslash(char *s); #endif #if defined(Win32) && defined(SUPPORT_UTF8) #define mbrtowc(a,b,c,d) Rmbrtowc(a,b) #define wcrtomb(a,b,c) Rwcrtomb(a,b) #define mbstowcs(a,b,c) Rmbstowcs(a,b,c) #define wcstombs(a,b,c) Rwcstombs(a,b,c) size_t Rmbrtowc(wchar_t *wc, const char *s); size_t Rwcrtomb(char *s, const wchar_t wc); size_t Rmbstowcs(wchar_t *wc, const char *s, size_t n); size_t Rwcstombs(char *s, const wchar_t *wc, size_t n); #endif /* From localecharset.c */ extern char * locale2charset(const char *); /* used in relop.c and sort.c */ #if defined(Win32) && defined(SUPPORT_UTF8) #define STRCOLL Rstrcoll #else #ifdef HAVE_STRCOLL #define STRCOLL strcoll #else #define STRCOLL strcmp #endif #endif /* Localization */ #ifdef ENABLE_NLS #include #ifdef Win32 #define _(String) libintl_gettext (String) #undef gettext /* needed for graphapp */ #else #define _(String) gettext (String) #endif #define gettext_noop(String) String #define N_(String) gettext_noop (String) #define P_(StringS, StringP, N) ngettext (StringS, StringP, N) #else /* not NLS */ #define _(String) (String) #define N_(String) String #define P_(String, StringP, N) (N > 1 ? StringP: String) #endif /* Macros for suspending interrupts */ #define BEGIN_SUSPEND_INTERRUPTS do { \ Rboolean __oldsusp__ = R_interrupts_suspended; \ R_interrupts_suspended = TRUE; #define END_SUSPEND_INTERRUPTS R_interrupts_suspended = __oldsusp__; \ if (R_interrupts_pending && ! R_interrupts_suspended) \ onintr(); \ } while(0) /* FreeBSD defines alloca in stdlib.h, _and_ does not allow a definition as here. (Since it uses GCC, it should use the first clause.) */ #ifdef __GNUC__ # undef alloca # define alloca(x) __builtin_alloca((x)) #else # ifdef HAVE_ALLOCA_H # include # endif # if !HAVE_DECL_ALLOCA && !defined(__FreeBSD__) extern char *alloca(size_t); # endif #endif /* Or use typedef? */ #ifdef HAVE_LONG_DOUBLE # define LDOUBLE long double #else # define LDOUBLE double #endif #endif /* DEFN_H_ */ /* *- Local Variables: *- page-delimiter: "^/\\*---" *- End: */