comp.lang.ada
 help / color / mirror / Atom feed
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



  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