0
|
1 #
|
|
2 # bind library by import string
|
|
3 #
|
|
4
|
|
5 eatws <- function(x) gsub("[ \n\t]*","",x)
|
|
6
|
|
7 bind1 <- function(symbol, signature, libh, callvm, envir=parent.frame() )
|
|
8 {
|
|
9 funcptr <- rdcFind(libh, symbol)
|
|
10 f <- function(...) NULL
|
|
11 body(f) <- substitute( dcCall( callvm, funcptr, signature, ... ), list(funcptr=funcptr, signature=signature) )
|
|
12 assign( symbol, f, envir=envir )
|
|
13 }
|
|
14
|
|
15 rdcBind <- function(libname, sigs, callvm, envir=parent.frame() )
|
|
16 {
|
|
17 libh <- rdcLoad(libname)
|
|
18 sigs <- eatws(sigs)
|
|
19 sigs <- strsplit(sigs, ";")[[1]]
|
|
20 sigs <- strsplit(sigs, "\\(")
|
|
21 for (i in seq(along=sigs)) bind1(sigs[[i]][[1]], sigs[[i]][[2]], libh, callvm, envir )
|
|
22 }
|