/* * R : A Computer Language for Statistical Data Analysis * Copyright (C) 2002-2014 The R 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, a copy is available at * https://www.R-project.org/Licenses/ * */ /* * 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 /* These get the declarations of some routines referenced here but not explicitly declared. This is necessary when we link with a C++ compiler because the linkage changes as the declarations are (currently) within extern "C" blocks. */ #include #include #include "basedecl.h" #define CALLDEF(name, n) {#name, (DL_FUNC) &name, n} static R_CallMethodDef callMethods [] = { /* Top-level task callbacks: .Call as .Internal does not work */ CALLDEF(R_addTaskCallback, 4), CALLDEF(R_getTaskCallbackNames, 0), CALLDEF(R_removeTaskCallback, 1), {NULL, NULL, 0} }; #define FDEF(name, n) {#name, (DL_FUNC) &F77_SYMBOL(name), n, NULL} static R_FortranMethodDef fortranMethods[] = { /* LINPACK */ FDEF(dqrcf, 8), // qr and auxiliaries FDEF(dqrdc2, 9), FDEF(dqrqty, 7), FDEF(dqrqy, 7), FDEF(dqrrsd, 7), FDEF(dqrxb, 7), FDEF(dtrco, 6), // .kappa_tri {NULL, NULL, 0} }; attribute_hidden void R_init_base(DllInfo *dll) { R_registerRoutines(dll, NULL, callMethods, fortranMethods, NULL); R_useDynamicSymbols(dll, FALSE); R_forceSymbols(dll, TRUE); }