/* * R : A Computer Language for Statistical Data Analysis * Copyright (C) 2002-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 * */ /* * This file replaces the previously used ROUTINES file and is used to * explicitly register native routines that are located in the R * executable (e.g. R.bin, Rgui.exe) but which are intended to be * accessible to S code via .C(), .Fortran(), .Call(), .External(). * The approach we use here is the regular registration mechanism that * packages can use to explicitly list the symbols to be exported. * For .C() and .Call() routines, we give the number of arguments * expected. * For .C() routines, we also specify the types of the arguments. * For .Fortran() and .External() routines, we specify only the name * and symbol. * To add an entry, first determine by which interface the routine will * be accessed: * .C, .Call, .External or .Fortran * Then add an entry to * cMethods, callMethods, externalMethods, or fortranMethods * respectively * * DTL 14-Dec-2002 */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include "basedecl.h" /* Omitted (relative to those in ROUTINES): fft_factor fft_work fdhess optif9 These can still be called directly in native code in a package. They are just not exported here for access via the .C(), .Call(), .Fortran() or .External() interfaces. If these omitted routines are not visible to package DLLs/shared libraries on some platforms, the package should be linked against Rdll.lib or libR.so or the equivalent on that platform. */ static R_NativePrimitiveArgType R_approx_t[] = {REALSXP, REALSXP, INTSXP, REALSXP, INTSXP, INTSXP, REALSXP, REALSXP, REALSXP}; static R_NativePrimitiveArgType bakslv_t[] = {REALSXP, INTSXP, INTSXP, REALSXP, INTSXP, INTSXP, REALSXP, INTSXP, INTSXP}; static R_NativePrimitiveArgType bincode_t[] = {REALSXP, INTSXP, REALSXP, INTSXP, INTSXP, LGLSXP, LGLSXP, LGLSXP}; static R_NativePrimitiveArgType bincount_t[] = {REALSXP, INTSXP, REALSXP, INTSXP, INTSXP, LGLSXP, LGLSXP, LGLSXP}; static R_NativePrimitiveArgType R_cumsum_t[] = {REALSXP, INTSXP, REALSXP, REALSXP}; static R_NativePrimitiveArgType find_interv_vec_t[] = {REALSXP, INTSXP, REALSXP, INTSXP, LGLSXP, LGLSXP, INTSXP}; static R_NativePrimitiveArgType loglin_t[] = {INTSXP, INTSXP, INTSXP, INTSXP, INTSXP, REALSXP, REALSXP, INTSXP, INTSXP, REALSXP, INTSXP, REALSXP, REALSXP, INTSXP, REALSXP, INTSXP, INTSXP}; static R_NativePrimitiveArgType lowess_t[] = {REALSXP, REALSXP, INTSXP, REALSXP, INTSXP, REALSXP, REALSXP, REALSXP, REALSXP}; static R_NativePrimitiveArgType massdist_t[] = {REALSXP, REALSXP, INTSXP, REALSXP, REALSXP, REALSXP, INTSXP}; static R_NativePrimitiveArgType R_max_col_t[] = {REALSXP, INTSXP, INTSXP, INTSXP, INTSXP}; static R_NativePrimitiveArgType R_pretty_t[] = {REALSXP, REALSXP, INTSXP, INTSXP, REALSXP, REALSXP, INTSXP}; static R_NativePrimitiveArgType R_rowsum_t[] = {INTSXP, REALSXP, REALSXP, REALSXP}; static R_NativePrimitiveArgType spline_coef_t[] = {INTSXP, INTSXP, REALSXP, REALSXP, REALSXP, REALSXP, REALSXP, REALSXP}; static R_NativePrimitiveArgType spline_eval_t[] = {INTSXP, INTSXP, REALSXP, REALSXP, INTSXP, REALSXP, REALSXP, REALSXP, REALSXP, REALSXP}; static R_NativePrimitiveArgType stemleaf_t[] = {REALSXP, INTSXP, REALSXP, INTSXP, REALSXP}; /* Note the ANYSXP in the first place. Doesn't quite work. Needs investigation. See the odd first argument in the routine's definition. static R_NativePrimitiveArgType str_signif_t[] = {ANYSXP, INTSXP, STRSXP, INTSXP, INTSXP, STRSXP, STRSXP, STRSXP}; */ static R_NativePrimitiveArgType R_tabulate_t[] = {INTSXP, INTSXP, INTSXP, INTSXP}; static R_NativePrimitiveArgType Rsockconnect_t[] = {INTSXP, STRSXP}; static R_NativePrimitiveArgType Rsockopen_t[] = {INTSXP}; static R_NativePrimitiveArgType Rsocklisten_t[] = {INTSXP, STRSXP, INTSXP}; static R_NativePrimitiveArgType Rsockclose_t[] = {INTSXP}; static R_NativePrimitiveArgType Rsockread_t[] = {INTSXP, STRSXP, INTSXP}; static R_NativePrimitiveArgType Rsockwrite_t[] = {INTSXP, STRSXP, INTSXP, INTSXP, INTSXP}; #ifdef PROBLEMS static R_NativePrimitiveArgType fft_factor_t[] = {REALSXP, INTSXP, REALSXP, INTSXP, INTSXP, INTSXP, INTSXP}; static R_NativePrimitiveArgType fft_work_t[] = {REALSXP, REALSXP, }; static R_NativePrimitiveArgType fdhess_t[] = {}; #endif #define CDEF(name) {#name, (DL_FUNC) &name, sizeof(name ## _t)/sizeof(name ## _t[0]), name ##_t} static R_CMethodDef cMethods [] = { CDEF(R_approx), CDEF(bakslv), CDEF(bincode), CDEF(bincount), CDEF(R_cumsum), CDEF(find_interv_vec), CDEF(loglin), CDEF(lowess), CDEF(massdist), CDEF(R_max_col), CDEF(R_pretty), CDEF(R_rowsum), CDEF(spline_coef), CDEF(spline_eval), CDEF(stemleaf), #if 0 CDEF(str_signif), #else {"str_signif", (DL_FUNC) &str_signif, 8, NULL}, #endif CDEF(R_tabulate), /* Sockets */ CDEF(Rsockconnect), CDEF(Rsockopen), CDEF(Rsocklisten), CDEF(Rsockclose), CDEF(Rsockread), CDEF(Rsockwrite), /* nmath cleanup */ {"signrank_free", (DL_FUNC)&signrank_free, 0, NULL}, {"wilcox_free", (DL_FUNC)&wilcox_free, 0, NULL}, {"InitGraphics", (DL_FUNC)&Rf_InitGraphics, 0, NULL}, {"InitColors", (DL_FUNC)&Rf_InitColors, 0, NULL}, {NULL, NULL, 0} }; #define CALLDEF(name, n) {#name, (DL_FUNC) &name, n} static R_CallMethodDef callMethods [] = { /* lapack */ CALLDEF(La_svd, 7), CALLDEF(La_rs, 2), CALLDEF(La_rg, 2), CALLDEF(La_zgesv, 2), CALLDEF(La_zgeqp3, 1), CALLDEF(qr_coef_cmplx, 2), CALLDEF(qr_qy_cmplx, 3), CALLDEF(La_svd_cmplx, 6), CALLDEF(La_rs_cmplx, 2), CALLDEF(La_rg_cmplx, 2), CALLDEF(La_chol2inv, 2), CALLDEF(La_chol, 1), CALLDEF(La_dgesv, 3), CALLDEF(La_dgeqp3, 1), CALLDEF(qr_coef_real, 2), CALLDEF(qr_qy_real, 3), CALLDEF(det_ge_real, 2), /* In ../main/unique.c to use hashing. */ CALLDEF(Rrowsum_matrix, 5), CALLDEF(Rrowsum_df, 5), /* Top-level task callbacks */ CALLDEF(R_getTaskCallbackNames, 0), CALLDEF(R_removeTaskCallback, 1), CALLDEF(R_addTaskCallback, 4), /* Reflectance for the dynamically loaded native symbols. */ CALLDEF(R_getSymbolInfo, 3), CALLDEF(R_getDllTable, 0), CALLDEF(R_getRegisteredRoutines, 1), /* mapply */ CALLDEF(do_mapply, 4), /* in ../main/random.c to generate 'sequences' of random 2-d tables * using Patefield's algorithm. */ CALLDEF(R_r2dtable, 3), /* Methods related routines. */ CALLDEF(R_isMethodsDispatchOn, 1), CALLDEF(R_traceOnOff, 1), CALLDEF(R_isS4Object, 1), CALLDEF(R_setS4Object, 2), CALLDEF(R_do_new_object, 1), CALLDEF(R_get_primname, 1), /* compression and serialization routines */ CALLDEF(R_compress1, 1), CALLDEF(R_decompress1, 1), CALLDEF(R_serializeb, 3), CALLDEF(R_serialize, 4), CALLDEF(R_unserialize, 2), /* lazy loading support */ CALLDEF(R_getVarsFromFrame, 3), CALLDEF(R_lazyLoadDBinsertValue, 5), CALLDEF(R_lazyLoadDBfetch, 4), CALLDEF(R_lazyLoadDBflush, 1), #ifdef BYTECODE CALLDEF(R_getbcprofcounts, 0), CALLDEF(R_startbcprof, 0), CALLDEF(R_stopbcprof, 0), #endif {NULL, NULL, 0} }; #define EXTDEF(name, n) {#name, (DL_FUNC) &name, n} static R_ExternalMethodDef externalMethods [] = { EXTDEF(call_dqags, 7), EXTDEF(call_dqagi, 7), {NULL, NULL, 0} }; #define FDEF(name) {#name, (DL_FUNC) &F77_SYMBOL(name), -1, NULL} static R_FortranMethodDef fortranMethods[] = { /* Linpack */ FDEF(ch2inv), FDEF(chol), FDEF(cg), FDEF(ch), FDEF(rg), FDEF(rs), FDEF(dchdc), FDEF(dpbfa), FDEF(dpbsl), FDEF(dpoco), FDEF(dpodi), FDEF(dpofa), FDEF(dposl), FDEF(dqrcf), FDEF(dqrdc), FDEF(dqrdc2), FDEF(dqrls), FDEF(dqrsl), FDEF(dqrqty), FDEF(dqrqy), FDEF(dqrrsd), FDEF(dqrsl), FDEF(dqrxb), FDEF(dsvdc), FDEF(dtrsl), FDEF(dtrco), FDEF(lminfl), {NULL, NULL, 0} }; void attribute_hidden R_init_base(DllInfo *dll) { R_registerRoutines(dll, cMethods, callMethods, fortranMethods, externalMethods); R_useDynamicSymbols(dll, FALSE); }