From: Sébastien <seb.morand@gmail.com>
Subject: Re: Access procedure to pointer
Date: Wed, 28 May 2008 09:06:37 +0000
Date: 2008-05-28T09:06:37+00:00 [thread overview]
Message-ID: <483D209D.5010408@gmail.com> (raw)
In-Reply-To:
> I would suggest a cleaner:
>
> type Callback is access procedure;
> pragma Convention (C, Callback);
>
> procedure Foo;
> pragma Convention (C, Foo);
>
> Ptr : constant Callback := Foo'Access;
>
> Callback is an equivalent to C pointer to a function.
The point was I'm not using constant.
My code looks like this:
type Signal is (SIGHUP);
for Signal use (SIGHUP => 1);
type Signal_Callback is access procedure(sig: Signal);
procedure InterceptSignal(sig: in Signal; callback: in Signal_Callback);
procedure c_signal(sig: in Signal; callback: in System.Address);
pragma Import(C, c_signal, "signal");
procedure HelloFromSignal(sig: Signal) is
begin
Put_Line("Hello from" & Signal'Image(sig));
end HelloFromSignal;
procedure Main is
begin
InterceptSignal(SIGUP, HelloFromSignal'Access);
delay 30;
end Main;
So I change the code following your instruction :
procedure c_signal(sig: in Signal; callback: in Signal_Callback);
And did add all the pragma Contention where you told me. It works fine
and looks like more portable ;-) Thanks for all your answers and help.
Moreover, I discover that sigaction and other Signal function are
implemented in Gnat 4.3 in the System.OS_Interface. Even if "signal"
itself is missing, there is some ways to do it without any C interface
in my code.
Really documentation is missing about what is available in GNAT and
examples, too bad!
Sebastien
next prev parent reply other threads:[~2008-05-28 9:06 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-27 11:19 Access procedure to pointer Sébastien
2008-05-27 12:05 ` Ludovic Brenta
2008-05-27 17:45 ` Sébastien
2008-05-27 18:26 ` Dmitry A. Kazakov
2008-05-28 9:06 ` Sébastien [this message]
2008-05-28 10:13 ` Jean-Pierre Rosen
2008-05-28 14:57 ` Sébastien
2008-05-28 15:26 ` Jean-Pierre Rosen
2008-05-28 18:16 ` Jeffrey R. Carter
2008-05-28 18:30 ` Robert A Duff
2008-05-28 21:36 ` Adam Beneschan
2008-05-28 23:02 ` Sebastien Morand
2008-05-29 0:58 ` Jeffrey R. Carter
2008-05-29 9:06 ` Sébastien
2008-05-29 20:20 ` Jeffrey R. Carter
2008-05-29 8:43 ` Jean-Pierre Rosen
2008-05-29 10:18 ` Sébastien
2008-05-29 11:34 ` Jean-Pierre Rosen
2008-05-31 5:52 ` Stephen Leake
2008-06-02 12:24 ` Sébastien
2008-06-02 12:55 ` Georg Bauhaus
2008-06-02 18:19 ` Jeffrey R. Carter
2008-06-02 18:25 ` Pascal Obry
2008-06-03 10:06 ` Sébastien Morand
2008-06-03 13:26 ` Ed Falis
2008-06-03 19:41 ` Stephen Leake
2008-06-02 15:35 ` Adam Beneschan
2008-06-02 17:11 ` Jean-Pierre Rosen
2008-06-03 19:43 ` Stephen Leake
2008-05-28 15:29 ` Sébastien
2008-05-28 17:00 ` Simon Wright
2008-05-27 20:06 ` Jeffrey R. Carter
2008-05-27 22:27 ` Adam Beneschan
2008-05-27 16:51 ` Jeffrey R. Carter
2008-05-27 17:42 ` Sébastien
2008-05-27 20:02 ` Jeffrey R. Carter
2008-05-27 20:45 ` Jacob Sparre Andersen
2008-05-28 8:48 ` Sébastien
2008-05-28 20:41 ` Jacob Sparre Andersen
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox