comp.lang.ada
 help / color / mirror / Atom feed
* Re: Strange problem
       [not found] <vhi3dsodsya.fsf@grotte.ifi.uio.no>
@ 1999-12-30  0:00 ` Jerry van Dijk
  2000-01-04  0:00   ` Matthew Heaney
  0 siblings, 1 reply; 2+ messages in thread
From: Jerry van Dijk @ 1999-12-30  0:00 UTC (permalink / raw)


In article <vhi3dsodsya.fsf@grotte.ifi.uio.no> jankr@nntp.ifi.uio.no writes:

>Why use words when you got code:

Ok. :-)

C:

        #include <stdio.h>

        void c_func (char *s, size_t len)
        {
                printf ("String: %s\n", s);
                printf ("Lenght: %d\n", len);
        }


Ada:

        with Interfaces.C.Strings;

        procedure Demo is

           package C  renames Interfaces.C;
           package CS renames Interfaces.C.Strings;

           procedure C_Func (s : CS.chars_ptr; len : C.size_t);
           pragma Import (C, C_Func, "c_func");

           Test_String : constant String := "Hello, world!";

           Str_Len : C.size_t     := 0;
           Str_Ptr : CS.chars_ptr := CS.Null_Ptr;

        begin

           Str_Ptr := CS.New_String (Test_String);
           Str_Len := CS.Strlen (Str_Ptr);

           C_Func (Str_Ptr, Str_Len);

           CS.Free (Str_Ptr);

        end Demo;

--
--  Jerry van Dijk  | email: jdijk@acm.org
--  Team-Ada        | www:   stad.dsl.nl/~jvandyk
--  Paris, France   | Leiden, Holland





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

* Re: Strange problem
  1999-12-30  0:00 ` Strange problem Jerry van Dijk
@ 2000-01-04  0:00   ` Matthew Heaney
  0 siblings, 0 replies; 2+ messages in thread
From: Matthew Heaney @ 2000-01-04  0:00 UTC (permalink / raw)


In article <946581540.11snx@jvdsys.stuyts.nl> , jerry@jvdsys.stuyts.nl 
(Jerry van Dijk) wrote:

> In article <vhi3dsodsya.fsf@grotte.ifi.uio.no> jankr@nntp.ifi.uio.no writes:
>
> Ada:
>
>         with Interfaces.C.Strings;
>
>         procedure Demo is ...

Here's an alternative implementation that does not require the use of
heap:


        with Interfaces.C;

        procedure Demo is

           package C  renames Interfaces.C;
           use type C.size_t;

           procedure C_Func (s : C.char_array; len : C.size_t);
           pragma Import (C, C_Func, "c_func");

           Str : constant C.char_array := C.To_C ("Hello, world!");

        begin

           C_Func (Str, Str'Length - 1);

        end Demo;




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

end of thread, other threads:[~2000-01-04  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] <vhi3dsodsya.fsf@grotte.ifi.uio.no>
1999-12-30  0:00 ` Strange problem Jerry van Dijk
2000-01-04  0:00   ` Matthew Heaney

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