File : i-fortra.ads


   1 ------------------------------------------------------------------------------
   2 --                                                                          --
   3 --                         GNAT COMPILER COMPONENTS                         --
   4 --                                                                          --
   5 --                   I N T E R F A C E S . F O R T R A N                    --
   6 --                                                                          --
   7 --                                 S p e c                                  --
   8 --                                                                          --
   9 -- This specification is derived from the Ada Reference Manual for use with --
  10 -- GNAT.  In accordance with the copyright of that document, you can freely --
  11 -- copy and modify this specification,  provided that if you redistribute a --
  12 -- modified version,  any changes that you have made are clearly indicated. --
  13 --                                                                          --
  14 ------------------------------------------------------------------------------
  15 
  16 with Ada.Numerics.Generic_Complex_Types;
  17 pragma Elaborate_All (Ada.Numerics.Generic_Complex_Types);
  18 
  19 package Interfaces.Fortran is
  20    pragma Pure;
  21 
  22    type Fortran_Integer  is new Integer;
  23    type Real             is new Float;
  24    type Double_Precision is new Long_Float;
  25 
  26    type Logical is new Boolean;
  27    for Logical'Size use Integer'Size;
  28    pragma Convention (Fortran, Logical);
  29    --  As required by Fortran standard, logical allocates same space as
  30    --  an integer. The convention is important, since in Fortran, Booleans
  31    --  are implemented with zero/non-zero semantics for False/True, and the
  32    --  pragma Convention (Fortran) activates the special handling required
  33    --  in this case.
  34 
  35    package Single_Precision_Complex_Types is
  36       new Ada.Numerics.Generic_Complex_Types (Real);
  37 
  38    package Double_Precision_Complex_Types is
  39       new Ada.Numerics.Generic_Complex_Types (Double_Precision);
  40 
  41    type Complex is new Single_Precision_Complex_Types.Complex;
  42 
  43    type Double_Complex is new Double_Precision_Complex_Types.Complex;
  44 
  45    subtype Imaginary is Single_Precision_Complex_Types.Imaginary;
  46    i : Imaginary renames Single_Precision_Complex_Types.i;
  47    j : Imaginary renames Single_Precision_Complex_Types.j;
  48 
  49    type Character_Set is new Character;
  50 
  51    type Fortran_Character is array (Positive range <>) of Character_Set;
  52 
  53    --  Additional declarations as permitted by Ada 2012, p.608, paragraph 21.
  54    --  Interoperability with Fortran 77's vendor extension using star
  55    --  notation and Fortran 90's intrinsic types with kind=n parameter.
  56    --  The following assumes that `n' matches the byte size, which
  57    --  most Fortran compiler, including GCC's follow.
  58 
  59    type Integer_Star_1  is new Integer_8;
  60    type Integer_Kind_1  is new Integer_8;
  61    type Integer_Star_2  is new Integer_16;
  62    type Integer_Kind_2  is new Integer_16;
  63    type Integer_Star_4  is new Integer_32;
  64    type Integer_Kind_4  is new Integer_32;
  65    type Integer_Star_8  is new Integer_64;
  66    type Integer_Kind_8  is new Integer_64;
  67 
  68    type Logical_Star_1  is new Boolean with Convention => Fortran, Size =>  8;
  69    type Logical_Star_2  is new Boolean with Convention => Fortran, Size => 16;
  70    type Logical_Star_4  is new Boolean with Convention => Fortran, Size => 32;
  71    type Logical_Star_8  is new Boolean with Convention => Fortran, Size => 64;
  72    type Logical_Kind_1  is new Boolean with Convention => Fortran, Size =>  8;
  73    type Logical_Kind_2  is new Boolean with Convention => Fortran, Size => 16;
  74    type Logical_Kind_4  is new Boolean with Convention => Fortran, Size => 32;
  75    type Logical_Kind_8  is new Boolean with Convention => Fortran, Size => 64;
  76 
  77    type Real_Star_4  is new Float;
  78    type Real_Kind_4  is new Float;
  79    type Real_Star_8  is new Long_Float;
  80    type Real_Kind_8  is new Long_Float;
  81    --  In the kind syntax, n is the same as the associated real kind
  82 
  83    type Complex_Star_8  is new Complex;
  84    type Complex_Kind_4  is new Complex;
  85    type Complex_Star_16 is new Double_Complex;
  86    type Complex_Kind_8  is new Double_Complex;
  87    --  In the star syntax, n is twice as large (real+imaginary size)
  88 
  89    type Character_Kind_n is new Fortran_Character;
  90 
  91    function To_Fortran (Item : Character)     return Character_Set;
  92    function To_Ada     (Item : Character_Set) return Character;
  93 
  94    function To_Fortran (Item : String)            return Fortran_Character;
  95    function To_Ada     (Item : Fortran_Character) return String;
  96 
  97    procedure To_Fortran
  98      (Item   : String;
  99       Target : out Fortran_Character;
 100       Last   : out Natural);
 101 
 102    procedure To_Ada
 103      (Item   : Fortran_Character;
 104       Target : out String;
 105       Last   : out Natural);
 106 
 107 end Interfaces.Fortran;