home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / gnat-2.06-src.tgz / tar.out / fsf / gnat / ada / i-c.ads < prev    next >
Text File  |  1996-09-28  |  6KB  |  174 lines

  1. -----------------------------------------------------------------------------
  2. --                                                                          --
  3. --                         GNAT COMPILER COMPONENTS                         --
  4. --                                                                          --
  5. --                         I N T E R F A C E S . C                          --
  6. --                                                                          --
  7. --                                 S p e c                                  --
  8. --                                                                          --
  9. --                            $Revision: 1.13 $                              --
  10. --                                                                          --
  11. -- This specification is adapted from the Ada Reference Manual for use with --
  12. -- GNAT.  In accordance with the copyright of that document, you can freely --
  13. -- copy and modify this specification,  provided that if you redistribute a --
  14. -- modified version,  any changes that you have made are clearly indicated. --
  15. --                                                                          --
  16. ------------------------------------------------------------------------------
  17.  
  18. with Unchecked_Conversion;
  19.  
  20. package Interfaces.C is
  21. pragma Pure (C);
  22.  
  23.    --  Declaration's based on C's <limits.h>
  24.  
  25.    CHAR_BIT  : constant := 8;
  26.    SCHAR_MIN : constant := -128;
  27.    SCHAR_MAX : constant := 127;
  28.    UCHAR_MAX : constant := 255;
  29.  
  30.    --  Signed and Unsigned Integers. Note that in GNAT, we have ensured that
  31.    --  the standard predefined Ada types correspond to the standard C types
  32.  
  33.    type int   is new Integer;
  34.    type short is new Short_Integer;
  35.    type long  is new Long_Integer;
  36.  
  37.    type signed_char is range SCHAR_MIN .. SCHAR_MAX;
  38.    for signed_char'Size use CHAR_BIT;
  39.  
  40.    type unsigned       is mod 2 ** Integer'Size;
  41.    type unsigned_short is mod 2 ** Short_Integer'Size;
  42.    type unsigned_long  is mod 2 ** Long_Integer'Size;
  43.  
  44.    type unsigned_char is mod (UCHAR_MAX + 1);
  45.    for unsigned_char'Size use CHAR_BIT;
  46.  
  47.    subtype plain_char is unsigned_char; -- ??? should be parametrized
  48.  
  49.    --  Are parametrizations below valid ???
  50.  
  51.    type ptrdiff_t is
  52.      range -(2 ** (Standard'Address_Size - 1)) ..
  53.            +(2 ** (Standard'Address_Size - 1) - 1);
  54.  
  55.    type size_t is mod 2 ** Standard'Address_Size;
  56.  
  57.    --  Floating-Point
  58.  
  59.    type C_float     is new Float;
  60.    type double      is new Standard.Long_Float;
  61.    type long_double is new Standard.Long_Long_Float;
  62.  
  63.    ----------------------------
  64.    -- Characters and Strings --
  65.    ----------------------------
  66.  
  67.    type char is new Character;
  68.  
  69.    nul : constant char := char'First;
  70.  
  71.    function To_C   (Item : Character) return char;
  72.    function To_Ada (Item : char)      return Character;
  73.  
  74.    type char_array is array (size_t range <>) of aliased char;
  75.    for char_array'Component_Size use CHAR_BIT;
  76.  
  77.    function Is_Nul_Terminated (Item : in char_array) return Boolean;
  78.  
  79.    function To_C
  80.      (Item       : in String;
  81.       Append_Nul : in Boolean := True)
  82.       return       char_array;
  83.  
  84.    function To_Ada
  85.      (Item     : in char_array;
  86.       Trim_Nul : in Boolean := True)
  87.       return     String;
  88.  
  89.    procedure To_C
  90.      (Item       : in String;
  91.       Target     : out char_array;
  92.       Count      : out size_t;
  93.       Append_Nul : in Boolean := True);
  94.  
  95.    procedure To_Ada
  96.      (Item     : in char_array;
  97.       Target   : out String;
  98.       Count    : out Natural;
  99.       Trim_Nul : in Boolean := True);
  100.  
  101.    ------------------------------------
  102.    -- Wide Character and Wide String --
  103.    ------------------------------------
  104.  
  105.    type wchar_t is new Wide_Character;
  106.    wide_nul : constant wchar_t := wchar_t'First;
  107.  
  108.    function To_C   (Item : in Wide_Character) return wchar_t;
  109.    function To_Ada (Item : in wchar_t)        return Wide_Character;
  110.  
  111.    type wchar_array is array (size_t range <>) of aliased wchar_t;
  112.  
  113.    function Is_Nul_Terminated (Item : in wchar_array) return Boolean;
  114.  
  115.    function To_C
  116.      (Item       : in Wide_String;
  117.       Append_Nul : in Boolean := True)
  118.       return       wchar_array;
  119.  
  120.    function To_Ada
  121.      (Item     : in wchar_array;
  122.       Trim_Nul : in Boolean := True)
  123.       return     Wide_String;
  124.  
  125.    procedure To_C
  126.      (Item       : in Wide_String;
  127.       Target     : out wchar_array;
  128.       Count      : out size_t;
  129.       Append_Nul : in Boolean := True);
  130.  
  131.    procedure To_Ada
  132.      (Item     : in wchar_array;
  133.       Target   : out Wide_String;
  134.       Count    : out Natural;
  135.       Trim_Nul : in Boolean := True);
  136.  
  137.    Terminator_Error : exception;
  138.  
  139. private
  140.    --  The following instantiations of unchecked conversion are used to
  141.    --  provide functions for the renamings which appear below. We can't
  142.    --  use direct instantiations of unchecked conversions for functions
  143.    --  like To_Ada, since we would have the wrong formal parameter names.
  144.  
  145.    function Character_To_char is new
  146.      Unchecked_Conversion (Character, char);
  147.  
  148.    function char_To_Character is new
  149.      Unchecked_Conversion (char, Character);
  150.  
  151.    function wchar_t_To_Wide_Character is new
  152.      Unchecked_Conversion (wchar_t, Wide_Character);
  153.  
  154.    function Wide_Character_To_wchar_t is new
  155.      Unchecked_Conversion (Wide_Character, wchar_t);
  156.  
  157.    --  The following declarations don't work, because of a bug in renaming
  158.    --  intrinsic functions. For now we have made separate bodies pending
  159.    --  resolution of this bug ???.
  160.  
  161. --   function To_C (Item : Character) return char
  162. --     renames Character_To_char;
  163.  
  164. --   function To_Ada (Item : char) return Character
  165. --     renames char_To_Character;
  166.  
  167. --   function To_C (Item : in Wide_Character) return wchar_t
  168. --     renames Wide_Character_To_wchar_t;
  169.  
  170. --   function To_Ada (Item : in wchar_t) return Wide_Character
  171. --     renames wchar_t_To_Wide_Character;
  172.  
  173. end Interfaces.C;
  174.