From ripley at stats.ox.ac.uk  Fri Feb  3 09:49:20 2006
From: ripley at stats.ox.ac.uk (Prof Brian Ripley)
Date: Fri, 3 Feb 2006 08:49:20 +0000 (GMT)
Subject: [Rd] Interfacing C-code (gets and printf) under WINDOWS (Visual
 C++)
In-Reply-To: <43E3054C.5020600@ensmp.fr>
References: <43E3054C.5020600@ensmp.fr>
Message-ID: <Pine.LNX.4.61.0602030742200.4544@gannet.stats>

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



[Rd] Interfacing C-code (gets and printf) under WINDOWS (Visual C++)
Prof Brian Ripley