diff R/rdyncall/man/dynport.Rd @ 0:0cfcc391201f

initial from svn dyncall-1745
author Daniel Adler
date Thu, 19 Mar 2015 22:26:28 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/R/rdyncall/man/dynport.Rd	Thu Mar 19 22:26:28 2015 +0100
@@ -0,0 +1,122 @@
+\name{dynport}
+\alias{dynport}
+\alias{loadDynportNamespace}
+\title{Dynamic R Bindings to standard and common C libraries}
+\description{Function to bind APIs of standard and common C libraries to R via dynamically created interface environment objects
+comprising R wrappers for C functions, object-like macros, enums and data types.
+}
+\usage{
+dynport(portname, portfile=NULL,
+ repo=system.file("dynports",package="rdyncall") )
+}
+\arguments{
+\item{portname}{the name of a dynport, given as a literal or character string.}
+\item{portfile}{\code{NULL} or character string giving a script file to parse ; \code{portname} and \code{repo} are .}
+\item{repo}{character string giving the path to the root of the \emph{dynport} repository.}  
+}
+\details{
+\code{dynport} offers a convenient method for binding entire C libraries to R.
+This mechanism runs cross-platform and uses dynamic linkage but it implies
+that the run-time library of a choosen binding need to be preinstalled in the system.
+Depending on the OS, the run-time libraries may be preinstalled or require manual installation.
+See \link{rdyncall-demos} for OS-specific installation notes for several C libraries.
+
+The binding method is data-driven using platform-portable specifications named \emph{DynPort} files.
+DynPort files are stored in a repository that is installed as part of the package installation.
+When \code{dynport} processes a \emph{DynPort} file given by \code{portname}, 
+an environment object is created, populated with R wrapper and helper objects
+that make up the interface to the C library, and attached to the search path with the name \code{dynport:<PORTNAME>}.
+Unloading of previously loaded dynport environments is achieved via \code{detach(dynport:<PORTNAME>)}.
+
+Up to \pkg{rdyncall} version 0.7.4, R name space objects were used as containers as described in the article \emph{Foreign Library Interface}, thus 
+dynport \sQuote{packages} appeared as \code{"package:<PORTNAME>"} on the search path. The mechanism to create synthesized R packages at run-time 
+required the use of \code{.Internal} calls.
+But since the use of internal R functions is not permitted for packages distributed on CRAN we downgraded the package to use ordinary environment 
+objects starting with version 0.7.5 until a public interface for the creation of R namespace objects is available.
+
+The following gives a list of currently available \emph{DynPorts}:
+\tabular{ll}{
+\strong{DynPort name/C Library} \tab \strong{Description}                        \cr
+\code{expat}       \tab Expat XML Parser Library                    \cr
+\code{GL}          \tab OpenGL 1.1 API                              \cr
+\code{GLU}         \tab OpenGL Utility Library                      \cr
+\code{GLUT}        \tab OpenGL Utility Toolkit Library              \cr
+\code{SDL}         \tab Simple DirectMedia Layer library            \cr
+\code{SDL_image}   \tab Loading of image files (png,jpeg..)         \cr
+\code{SDL_mixer}   \tab Loading/Playing of ogg/mp3/mod music files. \cr
+\code{SDL_ttf}     \tab Loading/Rendering of True Type Fonts.       \cr
+\code{SDL_net}     \tab Networking library.                         \cr
+\code{glew}        \tab OpenGL Extension Wrangler (includes OpenGL 3.0) \cr
+\code{glfw}        \tab OpenGL Windowing/Setup Library              \cr
+\code{gl3}         \tab strict OpenGL 3 (untested)                  \cr
+\code{R}           \tab R shared library                            \cr
+\code{ode}         \tab Open Dynamics (Physics-) Engine (untested)  \cr
+\code{cuda}        \tab NVIDIA Cuda (untested)                      \cr
+\code{csound}      \tab Sound programming language and library      \cr
+\code{opencl}      \tab OpenCL (untested)                           \cr
+\code{stdio}       \tab C Standard Library I/O Functions            \cr
+\code{glpk}        \tab GNU Linear Programming Kit                  \cr
+\code{EGL}         \tab Embedded Systems Graphics Library           \cr
+}
+
+As of the current implementation \emph{DynPort} files are R scripts
+that perform up to three tasks:
+
+\itemize{
+\item Functions (and pointer-to-function variables) are mapped via \code{\link{dynbind}} and a description of the C library using a \emph{library signatures}.
+\item Symbolic names are assigned to its values for object-like macro defines and C enum types.
+\item Run-time type-information objects for aggregate C data types (struct and union) are registered via \code{\link{parseStructInfos}} and \code{\link{parseUnionInfos}}.
+}
+
+The file path to the \emph{DynPort} file is derived from
+\code{portname} per default. This would refer to \code{"<repo>/<portname>.R"} 
+where  \code{repo} usually refers to the initial \emph{DynPort} repository
+located at the sub-folder \code{"dynports/"} of the package.
+If \code{portfile} is given, then this value is taken as file path (usually
+for testing purpose).
+
+A tool suite, comprising AWK (was boost wave), GCC Preprocessor, GCC-XML and XSLT, was used to generate the available \emph{DynPort} files automatically
+by extracting type information from C library header files. 
+
+In a future release, the DynPort format will be changed to
+a language-neutral text file document. For the interested reader: 
+A first prototyp is currently available in an FFI extension to the Lua 
+programming language (see \code{luadyncall} subversion sub-tree).
+A third revision (including function types in call signatures, bitfields, arrays, etc..)
+is currently in development.
+}
+\references{
+  Adler, D. (2012) \dQuote{Foreign Library Interface}, \emph{The R Journal}, \bold{4(1)}, 30--40, June 2012.
+  \url{http://journal.r-project.org/archive/2012-1/RJournal_2012-1_Adler.pdf}
+  
+  Adler, D., Philipp, T. (2008) \emph{DynCall Project}. \url{http://dyncall.org} 
+
+  Clark, J. (1998). expat - XML Parser Toolkit. \url{http://expat.sourceforge.net} 
+
+  Ikits, M. and Magallon, M. (2002).  The OpenGL Extension Wrangler Library. \url{http://glew.sourceforge.net} 
+
+  Latinga, S. (1998). The Simple DirectMedia Layer Library. \url{http://www.libsdl.org} 
+
+  Segal, M. and Akeley, K. (1992). The OpenGL Graphics System. A Specification, Version 1.0. \url{http://www.opengl.org} 
+
+  Smith, R. (2001). Open Dynamics Engine. \url{http://www.ode.org} 
+}
+\examples{
+\donttest{
+# Using SDL and OpenGL in R 
+dynport(SDL)
+dynport(GL)
+# Initialize Video Sub-system
+SDL_Init(SDL_INIT_VIDEO)
+# Initialize Screen with OpenGL Context and Double Buffering
+SDL_SetVideoMode(320,256,32,SDL_OPENGL+SDL_DOUBLEBUF)
+# Clear Color and Clear Screen
+glClearColor(0,0,1,0) # blue
+glClear(GL_COLOR_BUFFER_BIT)
+# Flip Double-Buffer
+SDL_GL_SwapBuffers()
+}
+}
+\keyword{programming}
+\keyword{interface}
+