This section shows the code generated by bfort with various command-line switches.
The command bfort add.c produces
/* add.c */ /* Fortran interface file for sun4 */ int add_( a1, a2) int*a1,*a2; { return Add(*a1,*a2); }The command bfort -anyname add.c produces
/* add.c */ /* Fortran interface file */ #ifdef FORTRANCAPS #define add_ ADD #elif !defined(FORTRANUNDERSCORE) && !defined(FORTRANDOUBLEUNDERSCORE) #define add_ add #endif int add_( a1, a2) int*a1,*a2; { return Add(*a1,*a2); }The command bfort -ansiheader foo.c produces
/* add.c */ extern int Add ANSI_ARGS((int, int ));For a more sophisticated example, here is the result of bfort -ferr -mpi -mnative -mapptr -ptrprefix MPIR_ -anyname -I pubinc send.c for the MPI routine MPI_Send (implemented in the file send.c, from the MPICH implementation). The file pubinc contains the single line #include "mpiimpl.h".
/* send.c */ /* Fortran interface file */ #include "mpiimpl.h" #ifdef POINTER_64_BITS extern void *MPIR_ToPointer(); extern int MPIR_FromPointer(); extern void MPIR_RmPointer(); #else #define MPIR_ToPointer(a) (a) #define MPIR_FromPointer(a) (int)(a) #define MPIR_RmPointer(a) #endif #ifdef MPI_BUILD_PROFILING #ifdef FORTRANCAPS #define mpi_send_ PMPI_SEND #elif defined(FORTRANDOUBLEUNDERSCORE) #define mpi_send_ pmpi_send__ #elif !defined(FORTRANUNDERSCORE) #define mpi_send_ pmpi_send #else #define mpi_send_ pmpi_send_ #endif #else #ifdef FORTRANCAPS #define mpi_send_ MPI_SEND #elif defined(FORTRANDOUBLEUNDERSCORE) #define mpi_send_ mpi_send__ #elif !defined(FORTRANUNDERSCORE) #define mpi_send_ mpi_send #endif #endif void mpi_send_( buf, count, datatype, dest, tag, comm, __ierr ) void *buf; int*count,*dest,*tag; MPI_Datatype datatype; MPI_Comm comm; int *__ierr; { *__ierr = MPI_Send(buf,*count, (MPI_Datatype)MPIR_ToPointer( *(int*)(datatype) ),*dest,*tag, (MPI_Comm)MPIR_ToPointer( *(int*)(comm) )); }Note that the -mapptr option has caused the generated code to call routines to convert the integers in Fortran to valid pointers. The option -ptrprefix changed the names of the routines to be MPIR_ToPointer and MPIR_FromPointer. The option -mpi informed bfort that MPI_Datatype and MPI_Comm were pointers rather than nonpointers. The option -ferr converted a routine MPI_Send that returns an error code to a Fortran subroutine that returns the error code in the last argument.