table of contents
fortc(1) | UNIDATA UTILITIES | fortc(1) |
NAME¶
fortc - Unidata utility to generate fortran-compatible C codeSYNOPSIS¶
fortc [-L LibDir] [-O OpSys] fileDESCRIPTION¶
fortc Reads C code from ` file', transforms it into FORTRAN compatible code, and then writes the result to standard output. The transformation is operating-system dependent because there are no standards in this matter. The target operating-system can be specified in several ways. If the ` -O' option is given, then the operating-system specified by its argument is used; otherwise, if the environmental variable ` OS' exists, then the operating-system specified by it's value is used; otherwise, the default operating-system -- determined at installation time -- is used. Global names that are not function definitions but that are to be accessible from both C and FORTRAN should be enclosed by the ` FC_NAME()' macro:extern int FC_NAME(foo)(void); /* FORTRAN function */ extern struct { float f; int i; } FC_NAME(comblk); /* FORTRAN common block */ cfoo() { return FC_NAME(foo)(); /* call FORTRAN function */ }
C functions which are to be called from FORTRAN are written as follows:
int /*FORTRAN*/ foo( character pathname, /* file name of new file */ real amount, /* amount to frobdicate by */ doubleprecision dbl, /* amount to tizzle by */ void function errf, /* error routine */ integer rcode /* returned error code */) { ...
or, equivalently,
int /*FORTRAN*/ foo(char* pathname, float* amount, double* dbl, void (*errf)(), int* rcode) { ...
The points to note in writing FORTRAN-compatible functions are:
- 1.
- Functions to be transformed are marked by a proceeding `/*FORTRAN*/' comment, which must appear on the line prior to the function name. Any return-type declarations must proceed the comment.
- 2.
- The formal parameters must be declared within function parentheses and be separated by commas.
- 3.
- The formal parameters are restricted to the following types:
- character or char*
- For Fortran character-variables.
- doubleprecision or double*"
- For double-precision floating-point values.
- real or float*
- For single-precision floating-point values.
- integer or int*
- For integer values.
- type function name or type (*name)()
- For functions returning type `type'.
- 4.
- There must be nothing important after the opening brace, `{', and on the same line.
#line 1 "foo.src" unsigned int #line 2 "foo.src" foo_(pathname, amount, errf, rcode, pathname_len) char *pathname; int pathname_len; float *amount; void (*errf)(); int *rcode; { #line 9 "foo.src"
Note that 1) preprocessor line directives have been added; 2) the function name has been suffixed with an underscore; and 3) a formal parameter, ` pathname_len', has been created. Under UNICOS, the same file would become
#include <fortran.h> #line 1 "foo.src" unsigned int #line 2 "foo.src" FOO(pathnamed, amount, errf, rcode) _fcd pathnamed; float *amount; void (*errf)(); int *rcode; { char *pathname = _fcdtocp (pathnamed); unsigned pathname_len = _fcdlen (pathnamed); #line 9 "foo.src"
Note, in particular, the additional ` #include <fortran.h>' and the creation and initialization of the local variables ` pathname' and `pathname_len'. This utility is implemented as a script and uses the system-supplied utilities sed(1) and m4(1).
OPTIONS¶
- -L LibDir"
- Defines the directory containing the `fortc' library files. The default is determined at installation time.
- -O OpSys
- Defines the operating-system as OpSys. Known values include `aix', `convexos', `domainos', `hpux', `irix', `msoft', `next-absoft', `newsos', `sunos', `ultrix', `unicos', and `vms'. To allow for greater flexibility, the known values may have any suffix (e.g. `sunos_4.1').
ENVIRONMENT¶
- OS
- Defines the operating system if the `-O' option is not specified. Known values are the same as the -O option.
FILES¶
In the following, `LIBDIR' is the default library directory determined at installation time.- LIBDIR/common.m4
- An m4(1) source common to all Fortran-calling-C implementations.
- LIBDIR/*.m4
- Operating-system-specific m4(1) sources.
BUGS¶
The names of automatically generated variables might conflict with those of other, pre-existing variables.SEE ALSO¶
sed(1), m4(1).$Date: 2000/08/07 23:15:03 $ | Printed: 0-0-0 |