Renard Didier
2006-Feb-03 07:25 UTC
[Rd] Interfacing C-code (gets and printf) under WINDOWS (Visual C++)
Hi I try to develop a R interface to a set of C routines, in order to produce a R-package on Geostatistics. My C-code uses interaction with the user as I use printf and gets statements. I develop the code in a LINUX environment and do not face any problem having the questions and answers routed on my current Terminal. When I tried to port the package on Windows, the problems began. No message was routed to the Console and I could not enter any answer. Let me first admit that I am not a specialist of the WINDOWS environment. I started looking for an answer on the WEB and intercepted some pieces of answers ... but I did not succeed in getting a workable solution. This is the reason why I put this open question here today. I did not find lots of information about the gets solution. Finally, I have chosen to use R_WriteConsole and R_ReadConsole which seemed to be promising solutions. I discovered an information saying that starting R-2.0.1, the include file R-interface.h could help me. This is the reason why I downloaded the latest version available on the R site (R-2.2.1). Unfortunately, I did not find such a file in the include directory. Moreover, in Visual C++ that I am using for building my DLL, I need to find the LIBRARY containing the objects of these two routines. Did I do something wrong. Do I need to download other contributions first. Do I use incorrect routines ? Thank you for your help. Didier RENARD
Prof Brian Ripley
2006-Feb-03 08:49 UTC
[Rd] Interfacing C-code (gets and printf) under WINDOWS (Visual C++)
Please do study the `Writing R Extensions' manual. The `information' you have that> starting R-2.0.1, the include file R-interface.h could help me.is misinformation: it is for writing alternative front ends under Unix-alikes and not included in the Windows binary distribution. R_WriteConsole and R_ReadConsole are not part of the R API (and not defined in that file). The distinction is not between Linux and Windows, but between a command-line and a console (GUI) environment. Rterm.exe on Windows works as you expect. OTOH, there are several GUI consoles on Unix-alikes, most notably the MacOS X GUI. For output, the manual clearly describes the problem and the solution (Rprintf/REprintf). This is used by hundreds of packages. For input, you can read from the stdin() connection. However, it is confusing to the users to mix up input to your functions with input to R, and in a GUI context it is normal for a function to use a dialog box for input. For example, the R/Windows equivalent of gets is winDialogString(). With very few exceptions (scan(), readline(), menu(), ...) the user expects to use console input only for R commands. If your interaction is like those R commands, you can execute them from your C code (via eval). If your code needs frequent interactions with the user an alternative approach is to use its own GUI. Quite a few packages do that, using the tcltk package to build a GUI in Tcl/Tk, with the analysis functions programmed as callbacks. [I should add that Visual C++ is not supported, and that you will need to make your own import library - this is described in file README.packages. For a Linux programmer it would be much easier to use the supported MinGW environment.] On Fri, 3 Feb 2006, Renard Didier wrote:> Hi > > I try to develop a R interface to a set of C routines, in order to > produce a R-package on Geostatistics. > My C-code uses interaction with the user as I use printf and gets > statements. > I develop the code in a LINUX environment and do not face any problem > having the questions and answers routed on my current Terminal. > When I tried to port the package on Windows, the problems began. No > message was routed to the Console and I could not enter any answer. Let > me first admit that I am not a specialist of the WINDOWS environment. > I started looking for an answer on the WEB and intercepted some pieces > of answers ... but I did not succeed in getting a workable solution. > This is the reason why I put this open question here today. > > I did not find lots of information about the gets solution. Finally, I > have chosen to use R_WriteConsole and R_ReadConsole which seemed to be > promising solutions. I discovered an information saying that starting > R-2.0.1, the include file R-interface.h could help me. This is the > reason why I downloaded the latest version available on the R site > (R-2.2.1). Unfortunately, I did not find such a file in the include > directory. Moreover, in Visual C++ that I am using for building my DLL, > I need to find the LIBRARY containing the objects of these two routines. > Did I do something wrong. Do I need to download other contributions > first. Do I use incorrect routines ? > > Thank you for your help. > > Didier RENARD-- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595