Interfaces

Ada Programming · Wikibooks

0%

Contents

    Text

    Size
    100%
    Theme
    Typeface
    Line length
    Spacing

    From Wikibooks, under CC BY-SA 4.0, as the source states it. This page at Wikibooks.

    Interfaces

    Ada. Time-tested, safe and secure.
    Ada. Time-tested, safe and secure.

    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

    As 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 ctest is
       use  Interfaces.C;
     
       type int_array is array (size_t range <>) of aliased int with Pack;
     
       package Int_Pointers is 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 int
       with Import => True, Convention => C, External_Name => "setupterm";
     
       -- int tigetnum (char *name);
       function Get_Numeric_Value (name : Interfaces.C.Strings.chars_ptr) return int
       with Import => True, Convention => C, External_Name => "tigetnum";
     
       function Format (value : int) return String is
         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) = 0 then
         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

    See also

    Wikibook

    Ada Reference Manual

    Ada 95

    Ada 2005