[Rd] R callbacks

Deepayan Sarkar deepayan.sarkar at gmail.com
Wed Apr 4 01:17:03 CEST 2007


On 4/3/07, Simon Urbanek <simon.urbanek at r-project.org> wrote:
> On Apr 2, 2007, at 8:51 PM, Deepayan Sarkar wrote:
>
> > Hi,
> >
> > I'm trying to understand (mostly from the R-exts manual) how to use
> > the callbacks declared in Rinterface.h. As a first attempt, I'm trying
> > to redefine ptr_R_WriteConsole in a very trivial manner. Here's my
> > code:
> >
> > ---------------
> > $ cat altr.c
> >
> > int Rf_initialize_R(int ac, char **av);
> >
> > #define R_INTERFACE_PTRS 1
> > #include <Rinterface.h>
> >
> > extern int R_running_as_main_program;
> >
> > static void my_R_WriteConsole(char *buf, int len)
> > {
> >     printf("R<< %s", buf);
> > }
> >
> > int main(int ac, char **av)
> > {
> >     R_running_as_main_program = 1;
> >     ptr_R_WriteConsole = my_R_WriteConsole;
> >     Rf_initialize_R(ac, av);
> >     Rf_mainloop();
> >     return 0;
> > }
> > ---------------
> >
> > I compile and run this in bash with
> >
> >
> > RPROG=R
> >
> > INC=`${RPROG} CMD config --cppflags`
> > LDF=`${RPROG} CMD config --ldflags`
> > export LD_LIBRARY_PATH=`${RPROG} RHOME`/lib
> > gcc -o altr ${INC} ${LDF} altr.c
> >
> > ${RPROG} CMD ./altr
> >
> > However, my customized version seems not to be used. What am I
> > missing?
> >
>
> 1) see Byron's e-mail
> 2) by default R uses stdout/err connections instead of the console
> API, you need to disable that
>
> so the resulting code should look like this:
>
>      Rf_initialize_R(ac, av);
>      ptr_R_WriteConsole = my_R_WriteConsole;
>      R_Outputfile = NULL;
>      R_Consolefile = NULL;
>      Rf_mainloop();

Thanks, setting things to NULL was the critical piece (I had tried
Byron's suggestion myself). A note mentioning this in R-exts would be
helpful.

-Deepayan



More information about the R-devel mailing list