Ada Programming/Libraries/Interfaces
The Interfaces package helps in interfacing with other programming languages. Ada is one of the few languages where interfacing with other languages is part of the language standard. The language standard defines the interfaces for C, Cobol and Fortran. Of course any implementation might define further interfaces — GNAT, for example, defines an interface to C++.
Interfacing with other languages is actually provided by pragma
Export, pragma
Import and pragma
Convention.
In Ada 2012 these clauses have an alternate form using "with" in place of "pragma."
Example
editAs an example, here is a complete program that queries the terminfo (terminal information) database on Unix systems to get the dimensions of the current terminal window. It interfaces with C language functions in the ncurses package, so it must be linked with ncurses (e.g. with the -lncurses switch) when it is compiled.
with
Ada.Text_IO;with
Interfaces.C;with
Interfaces.C.Pointers;with
Interfaces.C.Strings;procedure
ctestis
use
Interfaces.C;type
int_arrayis
array
(size_trange
<>)of
aliased
intwith
Pack;package
Int_Pointersis
new
Pointers ( Index => size_t, Element => int, Element_Array => int_array, Default_Terminator => 0 ); -- int setupterm (char *term, int fildes, int *errret);function
Get_Terminal_Data ( terminal : Interfaces.C.Strings.chars_ptr; file_descriptor : int; error_code_pointer : Int_Pointers.Pointer )return
intwith
Import => True, Convention => C, External_Name => "setupterm"; -- int tigetnum (char *name);function
Get_Numeric_Value (name : Interfaces.C.Strings.chars_ptr)return
intwith
Import => True, Convention => C, External_Name => "tigetnum";function
Format (value : int)return
Stringis
result : String := int'Image (value);begin
return
(if result(1) = ' ' then result(2..result'Last) else result);end
Format; error_code :aliased
int; error_code_pointer : Int_Pointers.Pointer := error_code'Access;begin
if
Get_Terminal_Data (Interfaces.C.Strings.Null_Ptr, 1, error_code_pointer) = 0then
Ada.Text_IO.Put_Line ( "Window size: " & Format (Get_Numeric_Value (Interfaces.C.Strings.New_String ("cols"))) & "x" & Format (Get_Numeric_Value (Interfaces.C.Strings.New_String ("lines"))) );else
Ada.Text_IO.Put_Line ("Can't access terminal data");end
if
;end
ctest;
Child Packages
edit- Interfaces.C
- Interfaces.CPP (GNAT)
- Interfaces.COBOL
- Interfaces.Fortran
- Interfaces.OS2Lib (GNAT, OS/2)
- Interfaces.OS2Lib.Errors (GNAT, OS/2)
- Interfaces.OS2Lib.Synchronization (GNAT, OS/2)
- Interfaces.OS2Lib.Threads (GNAT, OS/2)
- Interfaces.Packed_Decimal (GNAT)
- Interfaces.VxWorks (GNAT, VxWorks)
- Interfaces.VxWorks.IO (GNAT, VxWorks)
See also
editWikibook
edit- Ada Programming
- Ada Programming/Libraries
- Ada Programming/Libraries/Standard
- Ada Programming/Libraries/Ada
- Ada Programming/Libraries/System