TOC -- / --.-- / --.--.-- | Index | Search | Syntax | Help

- (1)
- The facilities relevant to interfacing with the Fortran language are the package Interfaces.Fortran and support for the Import, Export and Convention pragmas with convention_identifier Fortran.
- (2)
- The package Interfaces.Fortran defines Ada types whose representations are identical to the default representations of the Fortran intrinsic types Integer, Real, Double Precision, Complex, Logical, and Character in a supported Fortran implementation. These Ada types can therefore be used to pass objects between Ada and Fortran programs.

- (3)
- The library package Interfaces.Fortran has the following declaration:

(4) with Ada.Numerics.Generic_Complex_Types;-- see G.1.1pragma Elaborate_All(Ada.Numerics.Generic_Complex_Types); package Interfaces.Fortran is pragma Pure(Fortran); (5) type Fortran_Integer is range implementation-defined; (6) type Real is digits implementation-defined; type Double_Precision is digits implementation-defined; (7) type Logical is new Boolean; (8) package Single_Precision_Complex_Types is new Ada.Numerics.Generic_Complex_Types (Real); (9) type Complex is new Single_Precision_Complex_Types.Complex; (10) subtype Imaginary is Single_Precision_Complex_Types.Imaginary; i : Imaginary renames Single_Precision_Complex_Types.i; j : Imaginary renames Single_Precision_Complex_Types.j; (11) type Character_Set is implementation-defined character type; (12) type Fortran_Character is array (Positive range <>) of Character_Set; pragma Pack (Fortran_Character); (13) function To_Fortran (Item : in Character) return Character_Set; function To_Ada (Item : in Character_Set) return Character; (14) function To_Fortran (Item : in String) return Fortran_Character; function To_Ada (Item : in Fortran_Character) return String; (15) procedure To_Fortran (Item : in String; Target : out Fortran_Character; Last : out Natural); (16) procedure To_Ada (Item : in Fortran_Character; Target : out String; Last : out Natural); (17) end Interfaces.Fortran;

- (18)
- The types Fortran_Integer, Real, Double_Precision, Logical, Complex, and Fortran_Character are Fortran-compatible.
- (19)
- The To_Fortran and To_Ada functions map between the Ada type Character and the Fortran type Character_Set, and also between the Ada type String and the Fortran type Fortran_Character. The To_Fortran and To_Ada procedures have analogous effects to the string conversion subprograms found in Interfaces.COBOL.

- (20)
- An implementation shall support pragma Convention with a Fortran convention_identifier for a Fortran-eligible type (see B.1).

- (21)
- An implementation may add additional declarations to the Fortran interface packages. For example, the Fortran interface package for an implementation of Fortran 77 (ANSI X3.9-1978) that defines types like Integer*n, Real*n, Logical*n, and Complex*n may contain the declarations of types named Integer_Star_n, Real_Star_n, Logical_Star_n, and Complex_Star_n. (This convention should not apply to Character*n, for which the Ada analog is the constrained array subtype Fortran_Character (1..n).) Similarly, the Fortran interface package for an implementation of Fortran 90 that provides multiple kinds of intrinsic types, e.g. Integer (Kind=n), Real (Kind=n), Logical (Kind=n), Complex (Kind=n), and Character (Kind=n), may contain the declarations of types with the recommended names Integer_Kind_n, Real_Kind_n, Logical_Kind_n, Complex_Kind_n, and Character_Kind_n.

- (22)
- An Ada implementation should support the following interface correspondences between Ada and Fortran:
- (23)
- An Ada procedure corresponds to a Fortran subroutine.

- (24)
- An Ada function corresponds to a Fortran function.

- (25)
- An Ada parameter of an elementary, array, or record type T is passed as a T argument to a Fortran procedure, where T is the F F Fortran type corresponding to the Ada type T, and where the INTENT attribute of the corresponding dummy argument matches the Ada formal parameter mode; the Fortran implementation's parameter passing conventions are used. For elementary types, a local copy is used if necessary to ensure by-copy semantics.

- (26)
- An Ada parameter of an access-to-subprogram type is passed as a reference to a Fortran procedure whose interface corresponds to the designated subprogram's specification.

- NOTES

- (27)
- (17) An object of a Fortran-compatible record type, declared in a
library package or subprogram, can correspond to a Fortran common block;
the type also corresponds to a Fortran ``derived type''.

- (28)
*Example of Interfaces.Fortran:*

(29) with Interfaces.Fortran; use Interfaces.Fortran; procedure Ada_Application is (30) type Fortran_Matrix is array (Integer range <>, Integer range <>) of Double_Precision; pragma Convention (Fortran, Fortran_Matrix);-- stored in Fortran's-- column-major orderprocedure Invert (Rank : in Fortran_Integer; X : in out Fortran_Matrix); pragma Import (Fortran, Invert);-- a Fortran subroutine(31) Rank : constant Fortran_Integer := 100; My_Matrix : Fortran_Matrix (1 .. Rank, 1 .. Rank); (32) begin (33) ... My_Matrix := ...; ... Invert (Rank, My_Matrix); ... (34) end Ada_Application;

TOC -- / --.-- / --.--.-- | Index | Search | Syntax | Help

-- Email comments, additions, corrections, gripes, kudos, etc. to:

Magnus Kempe -- Magnus.Kempe@di.epfl.chCopyright statement

Page last generated: 95-03-12