with Interfaces.C; use Interfaces.C; package body Foreigns is function Sin (Arg : double) return double; pragma Import (C, Sin); function Log (Arg : double) return double; pragma Import (C, Log); function Exp (Arg : double) return double; pragma Import (C, Exp); function Sqrt (Arg : double) return double; pragma Import (C, Sqrt); function Asin (Arg : double) return double; pragma Import (C, Asin); function Acos (Arg : double) return double; pragma Import (C, Acos); function Asinh (Arg : double) return double; pragma Import (C, Asinh); function Acosh (Arg : double) return double; pragma Import (C, Acosh); function Atanh (X : double) return double; pragma Import (C, Atanh); function Atan2 (X, Y : double) return double; pragma Import (C, Atan2); type String_Cacc is access constant String; type Foreign_Record is record Name : String_Cacc; Addr : Address; end record; Foreign_Arr : constant array (Natural range <>) of Foreign_Record := ( (new String'("sin"), Sin'Address), (new String'("log"), Log'Address), (new String'("exp"), Exp'Address), (new String'("sqrt"), Sqrt'Address), (new String'("asin"), Asin'Address), (new String'("acos"), Acos'Address), (new String'("asinh"), Asinh'Address), (new String'("acosh"), Acosh'Address), (new String'("atanh"), Atanh'Address), (new String'("atan2"), Atan2'Address) ); function Find_Foreign (Name : String) return Address is begin for I in Foreign_Arr'Range loop if Foreign_Arr(I).Name.all = Name then return Foreign_Arr(I).Addr; end if; end loop; return Null_Address; end Find_Foreign; end Foreigns;