On 24/04/17 12:39, Duncan Murdoch wrote:
On 23/04/2017 7:53 PM, Rolf Turner wrote:
On 24/04/17 11:36, Duncan Murdoch wrote:
On 23/04/2017 6:18 PM, Rolf Turner wrote:
On 23/04/17 23:05, Duncan Murdoch wrote:


Looks like

extern void F77_NAME(mnnd)(double *, double *, int *, double *,
double *);

to me.

One more (I hope it's the last!) question:

One of my subroutines has an argument of type *logical*.  There is no
logical type in C.  So, since I am perforce using C-speak, I cannot
change "void *" to "void logical".


For questions like this, see Writing R Extensions section 5.2. "Logical"
in R is "int *" in C, and "INTEGER" in Fortran.

This is important:  *there is no way to pass a Fortran "LOGICAL" from R
to Fortran*.

The issue is that different Fortran compilers store LOGICAL in different
ways.  Some are equivalent to int with 0 for FALSE, all else for TRUE,
but not all are.  So don't rely on it.

If you need to call a Fortran subroutine that takes a LOGICAL argument,
you need to write another Fortran subroutine that takes an INTEGER
argument.  Then compute "arg NE 0" (or whatever the Fortran version is
for testing not equal to zero) and pass that to the original routine.

Hoo-boy!!!  Some serious code-rewriting called for!

Thanks for setting me straight on this.

Is it possible that R CMD check could be set up to issue an error, or at
least a warning, if it finds "logical" or "as.logical" in the argument
lists of calls to .Fortran()?


The problem is at the other end.  Passing an R logical is fine; it just
turns into an INTEGER on its way to Fortran.

Yes, but surely this is an indication that the Fortran code being called "expects" a logical and thereby might screw up if its way of
converting integers to logicals were problematic.

I doubt if it is feasible to detect the problem in Fortran, but static
analysis keeps getting better, so I could be wrong now or in a while.

If it is, or should become, feasible, it seems to me that it should be done. OTOH I gather from other posts that the .Fortran() interface will eventually be removed, so the problem (in this form) will go away.

The *real* problem will then be to write C wrappers for all our Fortran routines that are (directly) called by R functions. And this is a task that is impossible for people like me who go catatonic when they see C code. So at that point I will just give up and go to the pub.

<SNIP>

cheers,

Rolf

--
Technical Editor ANZJS
Department of Statistics
University of Auckland
Phone: +64-9-373-7599 ext. 88276

______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel

Reply via email to