[Rd] R callbacks

Simon Urbanek simon.urbanek at r-project.org
Tue Apr 3 16:11:03 CEST 2007


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();

Cheers,
Simon



More information about the R-devel mailing list