]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - Ada95/src/terminal_interface-curses-forms-field_types.adb
ncurses 5.8 - patch 20110319
[ncurses.git] / Ada95 / src / terminal_interface-curses-forms-field_types.adb
index dccaf9d21479bbb8dfcae08e878f29e12aa209a5..cff398a97dc668e731142ff40f58f696b2eabba9 100644 (file)
@@ -7,7 +7,7 @@
 --                                 B O D Y                                  --
 --                                                                          --
 ------------------------------------------------------------------------------
--- Copyright (c) 1998 Free Software Foundation, Inc.                        --
+-- Copyright (c) 1998-2009,2011 Free Software Foundation, Inc.              --
 --                                                                          --
 -- Permission is hereby granted, free of charge, to any person obtaining a  --
 -- copy of this software and associated documentation files (the            --
 -- sale, use or other dealings in this Software without prior written       --
 -- authorization.                                                           --
 ------------------------------------------------------------------------------
---  Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
+--  Author:  Juergen Pfeifer, 1996
 --  Version Control:
---  $Revision: 1.12 $
+--  $Revision: 1.22 $
+--  $Date: 2011/03/08 01:16:49 $
 --  Binding Version 01.00
 ------------------------------------------------------------------------------
-with Interfaces.C;
 with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;
 with Ada.Unchecked_Deallocation;
 with Ada.Unchecked_Conversion;
@@ -49,11 +49,12 @@ with Ada.Unchecked_Conversion;
 --  |
 package body Terminal_Interface.Curses.Forms.Field_Types is
 
-   use type Interfaces.C.int;
    use type System.Address;
 
+   pragma Warnings (Off);
    function To_Argument_Access is new Ada.Unchecked_Conversion
      (System.Address, Argument_Access);
+   pragma Warnings (On);
 
    function Get_Fieldtype (F : Field) return C_Field_Type;
    pragma Import (C, Get_Fieldtype, "field_type");
@@ -67,7 +68,7 @@ package body Terminal_Interface.Curses.Forms.Field_Types is
    --  |
    --  |
    --  |
-   function Get_Type (Fld : in Field) return Field_Type_Access
+   function Get_Type (Fld : Field) return Field_Type_Access
    is
       Low_Level : constant C_Field_Type := Get_Fieldtype (Fld);
       Arg : Argument_Access;
@@ -91,31 +92,13 @@ package body Terminal_Interface.Curses.Forms.Field_Types is
       end if;
    end Get_Type;
 
-   function Make_Arg (Args : System.Address) return System.Address
-   is
-      --  Actually args is a double indirected pointer to the arguments
-      --  of a C variable argument list. In theory it is now quite
-      --  complicated to write portable routine that reads the arguments,
-      --  because one has to know the growth direction of the stack and
-      --  the sizes of the individual arguments.
-      --  Fortunately we are only interested in the first argument (#0),
-      --  we know its size and for the first arg we don't care about
-      --  into which stack direction we have to proceed. We simply
-      --  resolve the double indirection and thats it.
-      type V is access all System.Address;
-      function To_Access is new Ada.Unchecked_Conversion (System.Address,
-                                                          V);
-   begin
-      return To_Access (To_Access (Args).all).all;
-   end Make_Arg;
-
    function Copy_Arg (Usr : System.Address) return System.Address
    is
    begin
       return Usr;
    end Copy_Arg;
 
-   procedure Free_Arg (Usr : in System.Address)
+   procedure Free_Arg (Usr : System.Address)
    is
       procedure Free_Type is new Ada.Unchecked_Deallocation
         (Field_Type'Class, Field_Type_Access);
@@ -139,19 +122,18 @@ package body Terminal_Interface.Curses.Forms.Field_Types is
       end if;
    end Free_Arg;
 
-
    procedure Wrap_Builtin (Fld : Field;
                            Typ : Field_Type'Class;
                            Cft : C_Field_Type := C_Builtin_Router)
    is
-      Usr_Arg   : System.Address := Get_Arg (Fld);
+      Usr_Arg   : constant System.Address := Get_Arg (Fld);
       Low_Level : constant C_Field_Type := Get_Fieldtype (Fld);
       Arg : Argument_Access;
       Res : Eti_Error;
       function Set_Fld_Type (F    : Field := Fld;
                              Cf   : C_Field_Type := Cft;
                              Arg1 : Argument_Access) return C_Int;
-      pragma Import (C, Set_Fld_Type, "set_field_type");
+      pragma Import (C, Set_Fld_Type, "set_field_type_user");
 
    begin
       pragma Assert (Low_Level /= Null_Field_Type);
@@ -177,7 +159,7 @@ package body Terminal_Interface.Curses.Forms.Field_Types is
    end Wrap_Builtin;
 
    function Field_Check_Router (Fld : Field;
-                                Usr : System.Address) return C_Int
+                                Usr : System.Address) return Curses_Bool
    is
       Arg  : constant Argument_Access := To_Argument_Access (Usr);
    begin
@@ -191,7 +173,7 @@ package body Terminal_Interface.Curses.Forms.Field_Types is
    end Field_Check_Router;
 
    function Char_Check_Router (Ch  : C_Int;
-                               Usr : System.Address) return C_Int
+                               Usr : System.Address) return Curses_Bool
    is
       Arg  : constant Argument_Access := To_Argument_Access (Usr);
    begin
@@ -205,7 +187,7 @@ package body Terminal_Interface.Curses.Forms.Field_Types is
    end Char_Check_Router;
 
    function Next_Router (Fld : Field;
-                         Usr : System.Address) return C_Int
+                         Usr : System.Address) return Curses_Bool
    is
       Arg  : constant Argument_Access := To_Argument_Access (Usr);
    begin
@@ -219,7 +201,7 @@ package body Terminal_Interface.Curses.Forms.Field_Types is
    end Next_Router;
 
    function Prev_Router (Fld : Field;
-                         Usr : System.Address) return C_Int
+                         Usr : System.Address) return Curses_Bool
    is
       Arg  : constant Argument_Access := To_Argument_Access (Usr);
    begin