comp.lang.ada
 help / color / mirror / Atom feed
* Re: HELP: Problem with C function called in Ada
       [not found] <Pine.SOL.3.95.970207144417.11551A-100000@java>
@ 1997-02-07  0:00 ` Robert A Duff
  1997-02-07  0:00 ` Mats Weber
  1 sibling, 0 replies; 2+ messages in thread
From: Robert A Duff @ 1997-02-07  0:00 UTC (permalink / raw)



In article <Pine.SOL.3.95.970207144417.11551A-100000@java>,
Ingrid CHESSEL & David EXCOFFIER  <linfo14@univ-savoie.fr> wrote:
> procedure Get_immediate(X:character);

Surely you mean, "out Character", or more likely a function returning a
Character, or something like that.  Make sure your Ada spec matches the
C spec (at the binary level).

> pragma interface(C, Get_immediate);
> pragma interface_name(Get_immediate,"getc");

- Bob




^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: HELP: Problem with C function called in Ada
       [not found] <Pine.SOL.3.95.970207144417.11551A-100000@java>
  1997-02-07  0:00 ` HELP: Problem with C function called in Ada Robert A Duff
@ 1997-02-07  0:00 ` Mats Weber
  1 sibling, 0 replies; 2+ messages in thread
From: Mats Weber @ 1997-02-07  0:00 UTC (permalink / raw)



> procedure keys is
> 
>  X: character;
> 
>  procedure Get_immediate(X:character);

Problem: should be X : out Character if you want something back from the
call.

>  pragma interface(C, Get_immediate);
>  pragma interface_name(Get_immediate,"getc");

Another problem: in C (I am not sure, but I think) getc is a function
and you should interface it as a function:

   function Get_immediate return Character;

>  package int_io is new text_io.integer_io(integer);
>  use int_io;
> 
>  begin
>   loop
>    Get_immediate(X);
>    Put_line(Natural'Image(character'pos(X)));
>    skip_line;
>   end loop;
>  end keys;
> 
> The following problems encountered are:
> 
> when I compile this code (ada keys.a, and ada -M keys -o keys.o), i
> obtain the following warning:
> Warning: variable may not have a value.

This is normal. With your original declaration of Get_Immediate, a call
is a read of the variable X (instead of a write if the paramter has mode
out). Reading uninitialized scalar variables is forbidden.

> If I run the code, I got a "Bus Error (code dumped)" !!!

that's probably a result of not interfacing getc correctly. If it's a
function, make it a function in Ada too.

> The warning disappear if I set a "X:=' '" just after the begin.

But not the core dump, right ?
This is normal (see above).

> The Put_line(Natural'...) is to obtain the code of the key pressed
> (especially arrow keys). Is it correct?

Beware of arrow keys: they often return more than on character (escape
sequences).




^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~1997-02-07  0:00 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <Pine.SOL.3.95.970207144417.11551A-100000@java>
1997-02-07  0:00 ` HELP: Problem with C function called in Ada Robert A Duff
1997-02-07  0:00 ` Mats Weber

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox