1 #ifndef R_H__
2 #define R_H__
3 
4 # include <stddef.h>
5 
6 #ifndef LIBR
7 #define RAPI_EXTERN extern
8 #else
9 #define RAPI_EXTERN
10 #endif
11 
12 // begin cdef
13 typedef unsigned char Rbyte;
14 
15 typedef enum {Bytes, Chars, Width} nchar_type;
16 typedef void * (*DL_FUNC)();
17 
18 typedef int R_len_t;
19 
20 // FIXME: when size of size_t <= 4
21 typedef ptrdiff_t R_xlen_t;
22 
23 typedef unsigned int SEXPTYPE;
24 
25 static const unsigned int NILSXP     =  0;
26 static const unsigned int SYMSXP     =  1;
27 static const unsigned int LISTSXP    =  2;
28 static const unsigned int CLOSXP     =  3;
29 static const unsigned int ENVSXP     =  4;
30 static const unsigned int PROMSXP    =  5;
31 static const unsigned int LANGSXP    =  6;
32 static const unsigned int SPECIALSXP =  7;
33 static const unsigned int BUILTINSXP =  8;
34 static const unsigned int CHARSXP    =  9;
35 static const unsigned int LGLSXP     = 10;
36 static const unsigned int INTSXP     = 13;
37 static const unsigned int REALSXP    = 14;
38 static const unsigned int CPLXSXP    = 15;
39 static const unsigned int STRSXP     = 16;
40 static const unsigned int DOTSXP     = 17;
41 static const unsigned int ANYSXP     = 18;
42 static const unsigned int VECSXP     = 19;
43 static const unsigned int EXPRSXP    = 20;
44 static const unsigned int BCODESXP   = 21;
45 static const unsigned int EXTPTRSXP  = 22;
46 static const unsigned int WEAKREFSXP = 23;
47 static const unsigned int RAWSXP     = 24;
48 static const unsigned int S4SXP      = 25;
49 static const unsigned int NEWSXP     = 30;
50 static const unsigned int FREESXP    = 31;
51 static const unsigned int FUNSXP     = 99;
52 
53 typedef struct {
54     double r;
55     double i;
56 } Rcomplex;
57 
58 typedef enum { FALSE = 0, TRUE } Rboolean;
59 
60 struct sxpinfo_struct {
61     SEXPTYPE type      :  5;
62     unsigned int scalar:  1;
63     unsigned int obj   :  1;
64     unsigned int alt   :  1;
65     unsigned int gp    : 16;
66     unsigned int mark  :  1;
67     unsigned int debug :  1;
68     unsigned int trace :  1;
69     unsigned int spare :  1;
70     unsigned int gcgen :  1;
71     unsigned int gccls :  3;
72     unsigned int named : 16;
73     unsigned int extra : 16;
74 };
75 
76 struct vecsxp_struct {
77     R_xlen_t    length;
78     R_xlen_t    truelength;
79 };
80 
81 
82 struct primsxp_struct {
83     int offset;
84 };
85 
86 struct symsxp_struct {
87     struct SEXPREC *pname;
88     struct SEXPREC *value;
89     struct SEXPREC *internal;
90 };
91 
92 struct listsxp_struct {
93     struct SEXPREC *carval;
94     struct SEXPREC *cdrval;
95     struct SEXPREC *tagval;
96 };
97 
98 struct envsxp_struct {
99     struct SEXPREC *frame;
100     struct SEXPREC *enclos;
101     struct SEXPREC *hashtab;
102 };
103 
104 struct closxp_struct {
105     struct SEXPREC *formals;
106     struct SEXPREC *body;
107     struct SEXPREC *env;
108 };
109 
110 struct promsxp_struct {
111     struct SEXPREC *value;
112     struct SEXPREC *expr;
113     struct SEXPREC *env;
114 };
115 
116 typedef struct SEXPREC {
117     struct sxpinfo_struct sxpinfo;
118     struct SEXPREC *attrib;
119     struct SEXPREC *gengc_next_node, *gengc_prev_node;
120     union {
121         struct primsxp_struct primsxp;
122         struct symsxp_struct symsxp;
123         struct listsxp_struct listsxp;
124         struct envsxp_struct envsxp;
125         struct closxp_struct closxp;
126         struct promsxp_struct promsxp;
127     } u;
128 } SEXPREC;
129 
130 typedef struct SEXPREC *SEXP;
131 
132 // Rinternals.h
133 RAPI_EXTERN const char* (*R_CHAR)(SEXP x);
134 RAPI_EXTERN Rboolean (*Rf_isNull)(SEXP s);
135 RAPI_EXTERN Rboolean (*Rf_isSymbol)(SEXP s);
136 RAPI_EXTERN Rboolean (*Rf_isLogical)(SEXP s);
137 RAPI_EXTERN Rboolean (*Rf_isReal)(SEXP s);
138 RAPI_EXTERN Rboolean (*Rf_isComplex)(SEXP s);
139 RAPI_EXTERN Rboolean (*Rf_isExpression)(SEXP s);
140 RAPI_EXTERN Rboolean (*Rf_isEnvironment)(SEXP s);
141 RAPI_EXTERN Rboolean (*Rf_isString)(SEXP s);
142 RAPI_EXTERN Rboolean (*Rf_isObject)(SEXP s);
143 
144 RAPI_EXTERN int (*TYPEOF)(SEXP x);
145 RAPI_EXTERN int (*IS_S4_OBJECT)(SEXP x);
146 
147 RAPI_EXTERN int  (*LENGTH)(SEXP x);
148 RAPI_EXTERN R_xlen_t (*XLENGTH)(SEXP x);
149 RAPI_EXTERN R_xlen_t  (*TRUELENGTH)(SEXP x);
150 RAPI_EXTERN void (*SETLENGTH)(SEXP x, R_xlen_t v);
151 RAPI_EXTERN void (*SET_TRUELENGTH)(SEXP x, R_xlen_t v);
152 RAPI_EXTERN int  (*IS_LONG_VEC)(SEXP x);
153 RAPI_EXTERN int  (*LEVELS)(SEXP x);
154 RAPI_EXTERN int  (*SETLEVELS)(SEXP x, int v);
155 
156 // Vector Access Functions
157 RAPI_EXTERN int *(*LOGICAL)(SEXP x);
158 RAPI_EXTERN int  *(*INTEGER)(SEXP x);
159 RAPI_EXTERN Rbyte *(*RAW)(SEXP x);
160 RAPI_EXTERN double *(*REAL)(SEXP x);
161 RAPI_EXTERN Rcomplex *(*COMPLEX)(SEXP x);
162 RAPI_EXTERN SEXP (*STRING_ELT)(SEXP x, R_xlen_t i);
163 RAPI_EXTERN SEXP (*VECTOR_ELT)(SEXP x, R_xlen_t i);
164 RAPI_EXTERN void (*SET_STRING_ELT)(SEXP x, R_xlen_t i, SEXP v);
165 RAPI_EXTERN SEXP (*SET_VECTOR_ELT)(SEXP x, R_xlen_t i, SEXP v);
166 
167 // List Access
168 RAPI_EXTERN SEXP (*Rf_cons)(SEXP, SEXP);
169 RAPI_EXTERN SEXP (*Rf_lcons)(SEXP, SEXP);
170 RAPI_EXTERN SEXP (*TAG)(SEXP e);
171 RAPI_EXTERN SEXP (*CAR)(SEXP e);
172 RAPI_EXTERN SEXP (*CDR)(SEXP e);
173 RAPI_EXTERN SEXP (*CAAR)(SEXP e);
174 RAPI_EXTERN SEXP (*CDAR)(SEXP e);
175 RAPI_EXTERN SEXP (*CADR)(SEXP e);
176 RAPI_EXTERN SEXP (*CDDR)(SEXP e);
177 RAPI_EXTERN SEXP (*CDDDR)(SEXP e);
178 RAPI_EXTERN SEXP (*CADDR)(SEXP e);
179 RAPI_EXTERN SEXP (*CADDDR)(SEXP e);
180 RAPI_EXTERN SEXP (*CAD4R)(SEXP e);
181 RAPI_EXTERN int  (*MISSING)(SEXP x);
182 RAPI_EXTERN void (*SET_MISSING)(SEXP x, int v);
183 RAPI_EXTERN void (*SET_TAG)(SEXP x, SEXP y);
184 RAPI_EXTERN SEXP (*SETCAR)(SEXP x, SEXP y);
185 RAPI_EXTERN SEXP (*SETCDR)(SEXP x, SEXP y);
186 RAPI_EXTERN SEXP (*SETCADR)(SEXP x, SEXP y);
187 RAPI_EXTERN SEXP (*SETCADDR)(SEXP x, SEXP y);
188 RAPI_EXTERN SEXP (*SETCADDDR)(SEXP x, SEXP y);
189 RAPI_EXTERN SEXP (*SETCAD4R)(SEXP e, SEXP y);
190 RAPI_EXTERN SEXP (*CONS_NR)(SEXP a, SEXP b);
191 
192 RAPI_EXTERN SEXP (*PRINTNAME)(SEXP x);
193 
194 RAPI_EXTERN SEXP (*Rf_protect)(SEXP);
195 RAPI_EXTERN void (*Rf_unprotect)(int);
196 
197 RAPI_EXTERN SEXP R_GlobalEnv;
198 RAPI_EXTERN SEXP R_EmptyEnv;
199 RAPI_EXTERN SEXP R_BaseEnv;
200 RAPI_EXTERN SEXP R_BaseNamespace;
201 RAPI_EXTERN SEXP R_NamespaceRegistry;
202 RAPI_EXTERN SEXP R_Srcref;
203 RAPI_EXTERN SEXP R_NilValue;
204 RAPI_EXTERN SEXP R_UnboundValue;
205 RAPI_EXTERN SEXP R_MissingArg;
206 RAPI_EXTERN SEXP R_InBCInterpreter;
207 RAPI_EXTERN SEXP R_CurrentExpression;
208 RAPI_EXTERN SEXP R_AsCharacterSymbol;
209 RAPI_EXTERN SEXP R_baseSymbol;
210 RAPI_EXTERN SEXP R_BaseSymbol;
211 RAPI_EXTERN SEXP R_BraceSymbol;
212 RAPI_EXTERN SEXP R_Bracket2Symbol;
213 RAPI_EXTERN SEXP R_BracketSymbol;
214 RAPI_EXTERN SEXP R_ClassSymbol;
215 RAPI_EXTERN SEXP R_DeviceSymbol;
216 RAPI_EXTERN SEXP R_DimNamesSymbol;
217 RAPI_EXTERN SEXP R_DimSymbol;
218 RAPI_EXTERN SEXP R_DollarSymbol;
219 RAPI_EXTERN SEXP R_DotsSymbol;
220 RAPI_EXTERN SEXP R_DoubleColonSymbol;
221 RAPI_EXTERN SEXP R_DropSymbol;
222 RAPI_EXTERN SEXP R_LastvalueSymbol;
223 RAPI_EXTERN SEXP R_LevelsSymbol;
224 RAPI_EXTERN SEXP R_ModeSymbol;
225 RAPI_EXTERN SEXP R_NaRmSymbol;
226 RAPI_EXTERN SEXP R_NameSymbol;
227 RAPI_EXTERN SEXP R_NamesSymbol;
228 RAPI_EXTERN SEXP R_NamespaceEnvSymbol;
229 RAPI_EXTERN SEXP R_PackageSymbol;
230 RAPI_EXTERN SEXP R_PreviousSymbol;
231 RAPI_EXTERN SEXP R_QuoteSymbol;
232 RAPI_EXTERN SEXP R_RowNamesSymbol;
233 RAPI_EXTERN SEXP R_SeedsSymbol;
234 RAPI_EXTERN SEXP R_SortListSymbol;
235 RAPI_EXTERN SEXP R_SourceSymbol;
236 RAPI_EXTERN SEXP R_SpecSymbol;
237 RAPI_EXTERN SEXP R_TripleColonSymbol;
238 RAPI_EXTERN SEXP R_TspSymbol;
239 RAPI_EXTERN SEXP R_dot_defined;
240 RAPI_EXTERN SEXP R_dot_Method;
241 RAPI_EXTERN SEXP R_dot_packageName;
242 RAPI_EXTERN SEXP R_dot_target;
243 RAPI_EXTERN SEXP R_dot_Generic;
244 RAPI_EXTERN SEXP R_NaString;
245 RAPI_EXTERN SEXP R_BlankString;
246 RAPI_EXTERN SEXP R_BlankScalarString;
247 
248 RAPI_EXTERN SEXP (*Rf_asChar)(SEXP);
249 RAPI_EXTERN SEXP (*Rf_coerceVector)(SEXP, SEXPTYPE);
250 RAPI_EXTERN SEXP (*Rf_PairToVectorList)(SEXP x);
251 RAPI_EXTERN SEXP (*Rf_VectorToPairList)(SEXP x);
252 RAPI_EXTERN SEXP (*Rf_asCharacterFactor)(SEXP x);
253 RAPI_EXTERN int (*Rf_asLogical)(SEXP x);
254 RAPI_EXTERN int (*Rf_asLogical2)(SEXP x, int checking, SEXP call, SEXP rho);
255 RAPI_EXTERN int (*Rf_asInteger)(SEXP x);
256 RAPI_EXTERN double (*Rf_asReal)(SEXP x);
257 RAPI_EXTERN Rcomplex (*Rf_asComplex)(SEXP x);
258 
259 RAPI_EXTERN char * (*Rf_acopy_string)(const char *);
260 // RAPI_EXTERN void (*Rf_addMissingVarsToNewEnv)(SEXP, SEXP);
261 RAPI_EXTERN SEXP (*Rf_alloc3DArray)(SEXPTYPE, int, int, int);
262 RAPI_EXTERN SEXP (*Rf_allocArray)(SEXPTYPE, SEXP);
263 RAPI_EXTERN SEXP (*Rf_allocFormalsList2)(SEXP sym1, SEXP sym2);
264 RAPI_EXTERN SEXP (*Rf_allocFormalsList3)(SEXP sym1, SEXP sym2, SEXP sym3);
265 RAPI_EXTERN SEXP (*Rf_allocFormalsList4)(SEXP sym1, SEXP sym2, SEXP sym3, SEXP sym4);
266 RAPI_EXTERN SEXP (*Rf_allocFormalsList5)(SEXP sym1, SEXP sym2, SEXP sym3, SEXP sym4, SEXP sym5);
267 RAPI_EXTERN SEXP (*Rf_allocFormalsList6)(SEXP sym1, SEXP sym2, SEXP sym3, SEXP sym4, SEXP sym5, SEXP sym6);
268 RAPI_EXTERN SEXP (*Rf_allocMatrix)(SEXPTYPE, int, int);
269 RAPI_EXTERN SEXP (*Rf_allocList)(int);
270 RAPI_EXTERN SEXP (*Rf_allocS4Object)(void);
271 RAPI_EXTERN SEXP (*Rf_allocSExp)(SEXPTYPE);
272 RAPI_EXTERN SEXP (*Rf_allocVector3)(SEXPTYPE, R_xlen_t, void*);
273 RAPI_EXTERN R_xlen_t (*Rf_any_duplicated)(SEXP x, Rboolean from_last);
274 RAPI_EXTERN R_xlen_t (*Rf_any_duplicated3)(SEXP x, SEXP incomp, Rboolean from_last);
275 RAPI_EXTERN SEXP (*Rf_applyClosure)(SEXP, SEXP, SEXP, SEXP, SEXP);
276 RAPI_EXTERN SEXP (*Rf_arraySubscript)(int, SEXP, SEXP, SEXP (*)(SEXP,SEXP), SEXP (*)(SEXP, int), SEXP);
277 RAPI_EXTERN SEXP (*Rf_classgets)(SEXP, SEXP);
278 RAPI_EXTERN void (*Rf_copyMatrix)(SEXP, SEXP, Rboolean);
279 RAPI_EXTERN void (*Rf_copyListMatrix)(SEXP, SEXP, Rboolean);
280 RAPI_EXTERN void (*Rf_copyMostAttrib)(SEXP, SEXP);
281 RAPI_EXTERN void (*Rf_copyVector)(SEXP, SEXP);
282 RAPI_EXTERN int (*Rf_countContexts)(int, int);
283 RAPI_EXTERN SEXP (*Rf_CreateTag)(SEXP);
284 RAPI_EXTERN void (*Rf_defineVar)(SEXP, SEXP, SEXP);
285 RAPI_EXTERN SEXP (*Rf_dimgets)(SEXP, SEXP);
286 RAPI_EXTERN SEXP (*Rf_dimnamesgets)(SEXP, SEXP);
287 RAPI_EXTERN SEXP (*Rf_DropDims)(SEXP);
288 RAPI_EXTERN SEXP (*Rf_duplicate)(SEXP);
289 RAPI_EXTERN SEXP (*Rf_shallow_duplicate)(SEXP);
290 // RAPI_EXTERN SEXP (*R_duplicate_attr)(SEXP);
291 // RAPI_EXTERN SEXP (*R_shallow_duplicate_attr)(SEXP);
292 RAPI_EXTERN SEXP (*Rf_lazy_duplicate)(SEXP);
293 
294 RAPI_EXTERN SEXP (*Rf_duplicated)(SEXP, Rboolean);
295 RAPI_EXTERN Rboolean (*R_envHasNoSpecialSymbols)(SEXP);
296 RAPI_EXTERN SEXP (*Rf_eval)(SEXP, SEXP);
297 RAPI_EXTERN SEXP (*Rf_findFun)(SEXP, SEXP);
298 RAPI_EXTERN SEXP (*Rf_findVar)(SEXP, SEXP);
299 RAPI_EXTERN SEXP (*Rf_findVarInFrame)(SEXP, SEXP);
300 RAPI_EXTERN SEXP (*Rf_findVarInFrame3)(SEXP, SEXP, Rboolean);
301 RAPI_EXTERN SEXP (*Rf_getAttrib)(SEXP, SEXP);
302 RAPI_EXTERN SEXP (*Rf_GetArrayDimnames)(SEXP);
303 RAPI_EXTERN SEXP (*Rf_GetColNames)(SEXP);
304 RAPI_EXTERN void (*Rf_GetMatrixDimnames)(SEXP, SEXP*, SEXP*, const char**, const char**);
305 RAPI_EXTERN SEXP (*Rf_GetOption1)(SEXP);
306 RAPI_EXTERN int (*Rf_GetOptionDigits)(void);
307 RAPI_EXTERN int (*Rf_GetOptionWidth)(void);
308 RAPI_EXTERN SEXP (*Rf_GetRowNames)(SEXP);
309 RAPI_EXTERN void (*Rf_gsetVar)(SEXP, SEXP, SEXP);
310 RAPI_EXTERN SEXP (*Rf_install)(const char *);
311 RAPI_EXTERN SEXP (*Rf_installChar)(SEXP);
312 RAPI_EXTERN Rboolean (*Rf_isFree)(SEXP);
313 RAPI_EXTERN Rboolean (*Rf_isOrdered)(SEXP);
314 RAPI_EXTERN Rboolean (*Rf_isUnordered)(SEXP);
315 RAPI_EXTERN Rboolean (*Rf_isUnsorted)(SEXP, Rboolean);
316 RAPI_EXTERN SEXP (*Rf_lengthgets)(SEXP, R_len_t);
317 RAPI_EXTERN SEXP (*Rf_xlengthgets)(SEXP, R_xlen_t);
318 RAPI_EXTERN SEXP (*R_lsInternal)(SEXP, Rboolean);
319 RAPI_EXTERN SEXP (*R_lsInternal3)(SEXP, Rboolean, Rboolean);
320 RAPI_EXTERN SEXP (*Rf_match)(SEXP, SEXP, int);
321 RAPI_EXTERN SEXP (*Rf_matchE)(SEXP, SEXP, int, SEXP);
322 RAPI_EXTERN SEXP (*Rf_namesgets)(SEXP, SEXP);
323 RAPI_EXTERN SEXP (*Rf_mkChar)(const char *);
324 RAPI_EXTERN SEXP (*Rf_mkCharLen)(const char *, int);
325 RAPI_EXTERN Rboolean (*Rf_NonNullStringMatch)(SEXP, SEXP);
326 RAPI_EXTERN int (*Rf_ncols)(SEXP);
327 RAPI_EXTERN int (*Rf_nrows)(SEXP);
328 RAPI_EXTERN SEXP (*Rf_nthcdr)(SEXP, int);
329 
330 RAPI_EXTERN int (*R_nchar)(SEXP string, nchar_type type_, Rboolean allowNA, Rboolean keepNA, const char* msg_name);
331 RAPI_EXTERN Rboolean (*Rf_pmatch)(SEXP, SEXP, Rboolean);
332 RAPI_EXTERN Rboolean (*Rf_psmatch)(const char *, const char *, Rboolean);
333 RAPI_EXTERN SEXP (*R_ParseEvalString)(const char *, SEXP);
334 RAPI_EXTERN void (*Rf_PrintValue)(SEXP);
335 // RAPI_EXTERN void (*Rf_printwhere)(void);
336 // RAPI_EXTERN void (*Rf_readS3VarsFromFrame)(SEXP, SEXP*, SEXP*, SEXP*, SEXP*, SEXP*, SEXP*);
337 RAPI_EXTERN SEXP (*Rf_setAttrib)(SEXP, SEXP, SEXP);
338 RAPI_EXTERN void (*Rf_setSVector)(SEXP*, int, SEXP);
339 RAPI_EXTERN void (*Rf_setVar)(SEXP, SEXP, SEXP);
340 // RAPI_EXTERN SEXP (*Rf_stringSuffix)(SEXP, int);
341 RAPI_EXTERN SEXPTYPE (*Rf_str2type)(const char *);
342 RAPI_EXTERN Rboolean (*Rf_StringBlank)(SEXP);
343 RAPI_EXTERN SEXP (*Rf_substitute)(SEXP,SEXP);
344 RAPI_EXTERN SEXP (*Rf_topenv)(SEXP, SEXP);
345 RAPI_EXTERN const char * (*Rf_translateChar)(SEXP);
346 RAPI_EXTERN const char * (*Rf_translateChar0)(SEXP);
347 RAPI_EXTERN const char * (*Rf_translateCharUTF8)(SEXP);
348 RAPI_EXTERN const char * (*Rf_type2char)(SEXPTYPE);
349 RAPI_EXTERN SEXP (*Rf_type2rstr)(SEXPTYPE);
350 RAPI_EXTERN SEXP (*Rf_type2str)(SEXPTYPE);
351 RAPI_EXTERN SEXP (*Rf_type2str_nowarn)(SEXPTYPE);
352 
353 RAPI_EXTERN SEXP (*_R_tryEval)(SEXP, SEXP, int *);
354 RAPI_EXTERN SEXP (*R_tryEvalSilent)(SEXP, SEXP, int *);
355 RAPI_EXTERN const char *(*R_curErrorBuf)();
356 
357 RAPI_EXTERN Rboolean (*Rf_isS4)(SEXP);
358 RAPI_EXTERN SEXP (*Rf_asS4)(SEXP, Rboolean, int);
359 RAPI_EXTERN SEXP (*Rf_S3Class)(SEXP);
360 RAPI_EXTERN int (*Rf_isBasicClass)(const char *);
361 
362 typedef enum {
363     CE_NATIVE = 0,
364     CE_UTF8   = 1,
365     CE_LATIN1 = 2,
366     CE_BYTES  = 3,
367     CE_SYMBOL = 5,
368     CE_ANY    =99
369 } cetype_t;
370 
371 RAPI_EXTERN cetype_t (*Rf_getCharCE)(SEXP);
372 RAPI_EXTERN SEXP (*Rf_mkCharCE)(const char *, cetype_t);
373 RAPI_EXTERN SEXP (*Rf_mkCharLenCE)(const char *, int, cetype_t);
374 RAPI_EXTERN const char *(*Rf_reEnc)(const char *x, cetype_t ce_in, cetype_t ce_out, int subst);
375 
376 RAPI_EXTERN SEXP (*R_MakeExternalPtr)(void *p, SEXP tag, SEXP prot);
377 RAPI_EXTERN void *(*R_ExternalPtrAddr)(SEXP s);
378 RAPI_EXTERN SEXP (*R_ExternalPtrTag)(SEXP s);
379 RAPI_EXTERN SEXP (*R_ExternalPtrProtected)(SEXP s);
380 RAPI_EXTERN void (*R_ClearExternalPtr)(SEXP s);
381 RAPI_EXTERN void (*R_SetExternalPtrAddr)(SEXP s, void *p);
382 RAPI_EXTERN void (*R_SetExternalPtrTag)(SEXP s, SEXP tag);
383 RAPI_EXTERN void (*R_SetExternalPtrProtected)(SEXP s, SEXP p);
384 RAPI_EXTERN SEXP (*R_MakeExternalPtrFn)(DL_FUNC p, SEXP tag, SEXP prot);
385 RAPI_EXTERN DL_FUNC (*R_ExternalPtrAddrFn)(SEXP s);
386 
387 typedef void (*R_CFinalizer_t)(SEXP);
388 
389 RAPI_EXTERN void (*R_RegisterFinalizer)(SEXP s, SEXP fun);
390 RAPI_EXTERN void (*R_RegisterCFinalizer)(SEXP s, R_CFinalizer_t fun);
391 RAPI_EXTERN void (*R_RegisterFinalizerEx)(SEXP s, SEXP fun, Rboolean onexit);
392 RAPI_EXTERN void (*R_RegisterCFinalizerEx)(SEXP s, R_CFinalizer_t fun, Rboolean onexit);
393 RAPI_EXTERN void (*R_RunPendingFinalizers)(void);
394 
395 RAPI_EXTERN Rboolean (*R_ToplevelExec)(void (*fun)(void *), void *data);
396 RAPI_EXTERN SEXP (*R_tryCatch)(SEXP (*)(void *), void *, SEXP, SEXP (*)(SEXP, void *), void *, void (*)(void *), void *);
397 RAPI_EXTERN SEXP (*R_tryCatchError)(SEXP (*)(void *), void *, SEXP (*)(SEXP, void *), void *);
398 
399 RAPI_EXTERN void (*R_RestoreHashCount)(SEXP rho);
400 RAPI_EXTERN Rboolean (*R_IsPackageEnv)(SEXP rho);
401 RAPI_EXTERN SEXP (*R_PackageEnvName)(SEXP rho);
402 RAPI_EXTERN SEXP (*R_FindPackageEnv)(SEXP info);
403 RAPI_EXTERN Rboolean (*R_IsNamespaceEnv)(SEXP rho);
404 RAPI_EXTERN SEXP (*R_NamespaceEnvSpec)(SEXP rho);
405 RAPI_EXTERN SEXP (*R_FindNamespace)(SEXP info);
406 RAPI_EXTERN void (*R_LockEnvironment)(SEXP env, Rboolean bindings);
407 RAPI_EXTERN Rboolean (*R_EnvironmentIsLocked)(SEXP env);
408 RAPI_EXTERN void (*R_LockBinding)(SEXP sym, SEXP env);
409 RAPI_EXTERN void (*R_unLockBinding)(SEXP sym, SEXP env);
410 RAPI_EXTERN void (*R_MakeActiveBinding)(SEXP sym, SEXP fun, SEXP env);
411 RAPI_EXTERN Rboolean (*R_BindingIsLocked)(SEXP sym, SEXP env);
412 RAPI_EXTERN Rboolean (*R_BindingIsActive)(SEXP sym, SEXP env);
413 RAPI_EXTERN Rboolean (*R_HasFancyBindings)(SEXP rho);
414 
415 RAPI_EXTERN void (*Rf_errorcall)(SEXP, const char *, ...);
416 RAPI_EXTERN void (*Rf_warningcall)(SEXP, const char *, ...);
417 
418 RAPI_EXTERN SEXP (*R_do_slot)(SEXP obj, SEXP name);
419 RAPI_EXTERN SEXP (*R_do_slot_assign)(SEXP obj, SEXP name, SEXP value);
420 RAPI_EXTERN int (*R_has_slot)(SEXP obj, SEXP name);
421 RAPI_EXTERN SEXP (*R_S4_extends)(SEXP klass, SEXP useTable);
422 
423 RAPI_EXTERN void (*R_PreserveObject)(SEXP);
424 RAPI_EXTERN void (*R_ReleaseObject)(SEXP);
425 
426 RAPI_EXTERN void (*R_dot_Last)(void);
427 RAPI_EXTERN void (*R_RunExitFinalizers)(void);
428 
429 RAPI_EXTERN Rboolean (*R_compute_identical)(SEXP, SEXP, int);
430 
431 RAPI_EXTERN SEXP     (*Rf_allocVector)(SEXPTYPE, R_xlen_t);
432 RAPI_EXTERN Rboolean (*Rf_conformable)(SEXP, SEXP);
433 RAPI_EXTERN SEXP     (*Rf_elt)(SEXP, int);
434 RAPI_EXTERN Rboolean (*Rf_inherits)(SEXP, const char *);
435 RAPI_EXTERN Rboolean (*Rf_isArray)(SEXP);
436 RAPI_EXTERN Rboolean (*Rf_isFactor)(SEXP);
437 RAPI_EXTERN Rboolean (*Rf_isFrame)(SEXP);
438 RAPI_EXTERN Rboolean (*Rf_isFunction)(SEXP);
439 RAPI_EXTERN Rboolean (*Rf_isInteger)(SEXP);
440 RAPI_EXTERN Rboolean (*Rf_isLanguage)(SEXP);
441 RAPI_EXTERN Rboolean (*Rf_isList)(SEXP);
442 RAPI_EXTERN Rboolean (*Rf_isMatrix)(SEXP);
443 RAPI_EXTERN Rboolean (*Rf_isNewList)(SEXP);
444 RAPI_EXTERN Rboolean (*Rf_isNumber)(SEXP);
445 RAPI_EXTERN Rboolean (*Rf_isNumeric)(SEXP);
446 RAPI_EXTERN Rboolean (*Rf_isPairList)(SEXP);
447 RAPI_EXTERN Rboolean (*Rf_isPrimitive)(SEXP);
448 RAPI_EXTERN Rboolean (*Rf_isTs)(SEXP);
449 RAPI_EXTERN Rboolean (*Rf_isUserBinop)(SEXP);
450 RAPI_EXTERN Rboolean (*Rf_isValidString)(SEXP);
451 RAPI_EXTERN Rboolean (*Rf_isValidStringF)(SEXP);
452 RAPI_EXTERN Rboolean (*Rf_isVector)(SEXP);
453 RAPI_EXTERN Rboolean (*Rf_isVectorAtomic)(SEXP);
454 RAPI_EXTERN Rboolean (*Rf_isVectorList)(SEXP);
455 RAPI_EXTERN Rboolean (*Rf_isVectorizable)(SEXP);
456 RAPI_EXTERN SEXP     (*Rf_lang1)(SEXP);
457 RAPI_EXTERN SEXP     (*Rf_lang2)(SEXP, SEXP);
458 RAPI_EXTERN SEXP     (*Rf_lang3)(SEXP, SEXP, SEXP);
459 RAPI_EXTERN SEXP     (*Rf_lang4)(SEXP, SEXP, SEXP, SEXP);
460 RAPI_EXTERN SEXP     (*Rf_lang5)(SEXP, SEXP, SEXP, SEXP, SEXP);
461 RAPI_EXTERN SEXP     (*Rf_lang6)(SEXP, SEXP, SEXP, SEXP, SEXP, SEXP);
462 RAPI_EXTERN SEXP     (*Rf_lastElt)(SEXP);
463 RAPI_EXTERN R_len_t  (*Rf_length)(SEXP);
464 RAPI_EXTERN SEXP     (*Rf_list1)(SEXP);
465 RAPI_EXTERN SEXP     (*Rf_list2)(SEXP, SEXP);
466 RAPI_EXTERN SEXP     (*Rf_list3)(SEXP, SEXP, SEXP);
467 RAPI_EXTERN SEXP     (*Rf_list4)(SEXP, SEXP, SEXP, SEXP);
468 RAPI_EXTERN SEXP     (*Rf_list5)(SEXP, SEXP, SEXP, SEXP, SEXP);
469 RAPI_EXTERN SEXP     (*Rf_list6)(SEXP, SEXP, SEXP, SEXP, SEXP, SEXP);
470 RAPI_EXTERN SEXP     (*Rf_listAppend)(SEXP, SEXP);
471 RAPI_EXTERN SEXP     (*Rf_mkNamed)(SEXPTYPE, const char **);
472 RAPI_EXTERN SEXP     (*Rf_mkString)(const char *);
473 RAPI_EXTERN int  (*Rf_nlevels)(SEXP);
474 RAPI_EXTERN int  (*Rf_stringPositionTr)(SEXP, const char *);
475 RAPI_EXTERN SEXP     (*Rf_ScalarComplex)(Rcomplex);
476 RAPI_EXTERN SEXP     (*Rf_ScalarInteger)(int);
477 RAPI_EXTERN SEXP     (*Rf_ScalarLogical)(int);
478 RAPI_EXTERN SEXP     (*Rf_ScalarRaw)(Rbyte);
479 RAPI_EXTERN SEXP     (*Rf_ScalarReal)(double);
480 RAPI_EXTERN SEXP     (*Rf_ScalarString)(SEXP);
481 RAPI_EXTERN R_xlen_t  (*Rf_xlength)(SEXP);
482 RAPI_EXTERN R_xlen_t  (*XTRUELENGTH)(SEXP x);
483 // RAPI_EXTERN int (*LENGTH_EX)(SEXP x, const char *file, int line);
484 // RAPI_EXTERN R_xlen_t (*XLENGTH_EX)(SEXP x);
485 
486 
487 // Arith.h
488 // RAPI_EXTERN double R_NaN;
489 // RAPI_EXTERN double R_PosInf;
490 // RAPI_EXTERN double R_NegInf;
491 // RAPI_EXTERN double R_NaReal;
492 // RAPI_EXTERN int    R_NaInt;
493 RAPI_EXTERN int (*R_IsNA)(double);
494 RAPI_EXTERN int (*R_IsNaN)(double);
495 RAPI_EXTERN int (*R_finite)(double);
496 
497 
498 // Parse.h
499 typedef enum {
500     PARSE_NULL,
501     PARSE_OK,
502     PARSE_INCOMPLETE,
503     PARSE_ERROR,
504     PARSE_EOF
505 } ParseStatus;
506 
507 RAPI_EXTERN SEXP (*_R_ParseVector)(SEXP, int, ParseStatus *, SEXP);
508 
509 // Memory.h
510 RAPI_EXTERN void*   (*vmaxget)(void);
511 RAPI_EXTERN void    (*vmaxset)(const void *);
512 
513 RAPI_EXTERN void    (*R_gc)(void);
514 RAPI_EXTERN int (*R_gc_running)();
515 
516 RAPI_EXTERN char*   (*R_alloc)(size_t, int);
517 RAPI_EXTERN long double *(*R_allocLD)(size_t nelem);
518 
519 // RAPI_EXTERN void *  (*R_malloc_gc)(size_t);
520 // RAPI_EXTERN void *  (*R_calloc_gc)(size_t, size_t);
521 // RAPI_EXTERN void *  (*R_realloc_gc)(void *, size_t);
522 
523 // Error.h
524 RAPI_EXTERN void    (*Rf_error)(const char *, ...);
525 RAPI_EXTERN void    (*Rf_warning)(const char *, ...);
526 RAPI_EXTERN void    (*R_ShowMessage)(const char *s);
527 
528 // Defn.h
529 // RAPI_EXTERN void (*Rf_CoercionWarning)(int);/* warning code */
530 // RAPI_EXTERN int (*Rf_LogicalFromInteger)(int, int*);
531 // RAPI_EXTERN int (*Rf_LogicalFromReal)(double, int*);
532 // RAPI_EXTERN int (*Rf_LogicalFromComplex)(Rcomplex, int*);
533 // RAPI_EXTERN int (*Rf_IntegerFromLogical)(int, int*);
534 // RAPI_EXTERN int (*Rf_IntegerFromReal)(double, int*);
535 // RAPI_EXTERN int (*Rf_IntegerFromComplex)(Rcomplex, int*);
536 // RAPI_EXTERN double (*Rf_RealFromLogical)(int, int*);
537 // RAPI_EXTERN double (*Rf_RealFromInteger)(int, int*);
538 // RAPI_EXTERN double (*Rf_RealFromComplex)(Rcomplex, int*);
539 // RAPI_EXTERN Rcomplex (*Rf_ComplexFromLogical)(int, int*);
540 // RAPI_EXTERN Rcomplex (*Rf_ComplexFromInteger)(int, int*);
541 // RAPI_EXTERN Rcomplex (*Rf_ComplexFromReal)(double, int*);
542 
543 RAPI_EXTERN void (*R_ProcessEvents)(void);
544 
545 // RAPI_EXTERN void (*Rf_PrintVersion)(char *, size_t len);
546 // RAPI_EXTERN void (*Rf_PrintVersion_part_1)(char *, size_t len);
547 // RAPI_EXTERN void (*Rf_PrintVersionString)(char *, size_t len);
548 RAPI_EXTERN SEXP (*R_data_class)(SEXP , Rboolean);
549 
550 // Utils.h
551 RAPI_EXTERN void (*R_CheckUserInterrupt)(void);
552 
553 // RStartup.h
554 
555 typedef struct
556 {
557     Rboolean R_Quiet;
558     Rboolean R_Slave;
559     Rboolean R_Interactive;
560     Rboolean R_Verbose;
561     Rboolean LoadSiteFile;
562     Rboolean LoadInitFile;
563     Rboolean DebugInitFile;
564     int RestoreAction;
565     int SaveAction;
566     size_t vsize;
567     size_t nsize;
568     size_t max_vsize;
569     size_t max_nsize;
570     size_t ppsize;
571     int NoRenviron;
572     char *rhome;
573     char *home;
574     // we use _ReadConsole and _WriteConsole to avoid name collision
575     int  (*_ReadConsole)(const char *, unsigned char *, int, int);
576     void (*_WriteConsole)(const char *, int);
577     void (*CallBack)(void);
578     void (*ShowMessage) (const char *);
579     int (*YesNoCancel) (const char *);
580     void (*Busy) (int);
581     int CharacterMode;
582     void (*WriteConsoleEx)(const char *, int, int);
583 } structRstart;
584 typedef structRstart *Rstart;
585 
586 RAPI_EXTERN void (*R_DefParams)(Rstart);
587 RAPI_EXTERN void (*R_SetParams)(Rstart);
588 RAPI_EXTERN void (*R_set_command_line_arguments)(int argc, char **argv);
589 
590 // Rinterface.h
591 
592 RAPI_EXTERN int (*Rstd_CleanUp)(int saveact, int status, int RunLast);
593 
594 
595 // Rembedded.h
596 RAPI_EXTERN int (*Rf_initialize_R)(int ac, char **av);
597 RAPI_EXTERN void (*setup_Rmainloop)(void);
598 RAPI_EXTERN void (*_run_Rmainloop)(void);
599 
600 // Rdynload.h
601 
602 typedef struct {
603     const char *name;
604     DL_FUNC     fun;
605     int         numArgs;
606 } R_CallMethodDef;
607 typedef struct _DllInfo DllInfo;
608 
609 typedef R_CallMethodDef R_ExternalMethodDef;
610 RAPI_EXTERN DllInfo* (*R_getEmbeddingDllInfo)(void);
611 RAPI_EXTERN int (*R_registerRoutines)(DllInfo*, void*, void*, void*, void*);
612 
613 
614 // end cdef
615 
616 
617 #ifdef _WIN32
618 RAPI_EXTERN char *(*get_R_HOME)(void);
619 RAPI_EXTERN char *(*getRUser)(void);
620 RAPI_EXTERN int* UserBreak_t;
621 RAPI_EXTERN int* CharacterMode_t;
622 RAPI_EXTERN int* EmitEmbeddedUTF8_t;
623 RAPI_EXTERN int (*GA_peekevent)(void);
624 #else
625 // eventloop.h
626 RAPI_EXTERN void* R_InputHandlers;
627 RAPI_EXTERN void (**R_PolledEvents_t)(void);
628 
629 RAPI_EXTERN void* (*R_checkActivity)(int usec, int ignore_stdin);
630 RAPI_EXTERN void (*R_runHandlers)(void* handlers, void* mask);
631 
632 RAPI_EXTERN int* R_interrupts_pending_t;
633 #endif
634 
635 #endif /* end of include guard: R_H__ */
636