On Thursday, 10 July 2014 at 12:12:20 UTC, Marc Schütz wrote:
On Wednesday, 9 July 2014 at 15:09:08 UTC, Chris wrote:
On Wednesday, 9 July 2014 at 15:00:25 UTC, seany wrote:
I apologize many times for this question, may be this had
already been answered somewhere, but considering today the
last of my nerve is broken, I can not really find the soution.
So I have a D code, which acts as a central manager of all my
codes, reads user input, reads files, etc, and based on the
file readouts, I would like to pass some variables from the D
code to a fortran code, in binary format, perhaps, if such a
thing exists, instead of encoding to text/ ASCII first.
I would also like to read some (not all) variables back from
the fortran code.
The Fortran code resides in a subdirectory to the
path/to/d/code
How to do this? is there a preffered way / easier than system
call way to interface D and Fortran code? This must be Fortan
code - these are the standard atmospheric chemistry codes.
I apologize again if the question is stupid, trust me, today
all my nerves are broken.
Off the top of my head I'd say you could try to interface
Fortran and C. Then you could interface D and C, i.e. D > C >
Fortran.
http://fortranwiki.org/fortran/show/Generating+C+Interfaces
https://gcc.gnu.org/onlinedocs/gcc-3.4.4/g77/C-Interfacing-Tools.html
To expand on that:
You don't actually need to write a C glue layer between D and
Fortran. All you need to do is make your Fortran functions
accessible for C code. As I'm not familiar with Fortran, I
don't know how exactly that works, but it could involve telling
the compiler to use the right calling convention, and use the
right name mangling.
On the D side, you can then declare and use the Fortran
functions as follows:
extern(C) float my_fortran_func(int a, int b);
void bar() {
writeln("Fortran returned: ", my_fortran_func(10, 20));
}
Here is an article that describes how to interface with C code
from D:
http://wiki.dlang.org/Bind_D_to_C
Cool. I wonder would it be possible to use inline assembly?