1. 3.2, Wrapping DLLs and Float types

I've wrapped PgSQL and used Sqlite, PCRE and Iup in 3.2 now w/no problems, once
the stack offset was fixed for gcc 4.3.0, however, none of those use the Float
type.

Now, before going further, the C examples I have created work great, and the
wrapper that I've created works identical to the C examples when executed with
Euphoria 3.1.1. However, the results are different with the same wrapper, the
same examples on the same computer when run with 3.2.

I am now wrapping LibHaru, which will be released into the archives and will
give Euphoria PDF capabilities. However, floats, I have identified what I think
is a bug, but I do not have the knowledge to track it down. The bug is this:

constant
fHPDF_Page_SetFontAndSize = define_c_func(lib, "HPDF_Page_SetFontAndSize", 
    {P, P, F}, I),
fHPDF_Page_TextOut = define_c_func(lib, "HPDF_Page_TextOut", 
    {P, F, F, P}, I)

-- P = C_POINTER, F = C_FLOAT, I = C_INT.


The parameters for TextOut are: Page, X, Y and Text. The problem is the
resulting PDF outputs for X, Y: 761 0 Td  when it should be 60 761. What that
tells PDF readers is unimportant, the part that is important is that Y is being
shifted to X's position, and Y is 0.

The parameters for SetFontAndSize are: Page, Font, Size. The Font section is
output correctly, but the size is in the PDF as: 0 Tf when it should be 12 Tf.

So, once again the Float is being lost/corrupted somehow in 3.2. Again, this all
works great in 3.1.1.

Thanks for any input.

--
Jeremy Cowgar
http://jeremy.cowgar.com

new topic     » topic index » view message » categorize

2. Re: 3.2, Wrapping DLLs and Float types

Oh, I should add, that is 3.2 is also compiled with gcc 4.3.0, so it may be
another change in 4.3.0 ?

--
Jeremy Cowgar
http://jeremy.cowgar.com

new topic     » goto parent     » topic index » view message » categorize

3. Re: 3.2, Wrapping DLLs and Float types

Jeremy Cowgar wrote:
> 
> I've wrapped PgSQL and used Sqlite, PCRE and Iup in 3.2 now w/no problems,
> once
> the stack offset was fixed for gcc 4.3.0, however, none of those use the Float
> type.
> 
> Now, before going further, the C examples I have created work great, and the
> wrapper that I've created works identical to the C examples when executed with
> Euphoria 3.1.1. However, the results are different with the same wrapper, the
> same examples on the same computer when run with 3.2.
> 
> I am now wrapping LibHaru, which will be released into the archives and will
> give Euphoria PDF capabilities. However, floats, I have identified what I
> think
> is a bug, but I do not have the knowledge to track it down. The bug is this:
> 
> }}}
<eucode>
> constant
> fHPDF_Page_SetFontAndSize = define_c_func(lib, "HPDF_Page_SetFontAndSize", 
>     {P, P, F}, I),
> fHPDF_Page_TextOut = define_c_func(lib, "HPDF_Page_TextOut", 
>     {P, F, F, P}, I)
> 
> -- P = C_POINTER, F = C_FLOAT, I = C_INT.
> </eucode>
{{{

> 
> The parameters for TextOut are: Page, X, Y and Text. The problem is the
> resulting
> PDF outputs for X, Y: 761 0 Td  when it should be 60 761. What that tells PDF
> readers is unimportant, the part that is important is that Y is being shifted
> to X's position, and Y is 0.
> 
> The parameters for SetFontAndSize are: Page, Font, Size. The Font section is
> output correctly, but the size is in the PDF as: 0 Tf when it should be 12 Tf.
> 
> So, once again the Float is being lost/corrupted somehow in 3.2. Again, this
> all works great in 3.1.1.
> 
> Thanks for any input.
> 
> --
> Jeremy Cowgar
> <a href="http://jeremy.cowgar.com">http://jeremy.cowgar.com</a>

This is getting outside of my expertise, but where there any compiler flags
different for 3.0 than from 3.2? Maybe the offset you changed was still a little
wrong but close enough to work most of the time?

I'm wondering if one of the float arguments is being passed in a register
instead of on the stack, or if it is being consumed by another function, or
whether it is being passed at all.

Also, are you sure the arguments are supposed to be floats and not doubles? I
know they're different sizes but I don't know if GCC allocates the same amount of
space on the stack for them.

--
A complex system that works is invariably found to have evolved from a simple
system that works.
--John Gall's 15th law of Systemantics.

"Premature optimization is the root of all evil in programming."
--C.A.R. Hoare

j.

new topic     » goto parent     » topic index » view message » categorize

4. Re: 3.2, Wrapping DLLs and Float types

Jason Gade wrote:
>  
> This is getting outside of my expertise, but where there any compiler flags
> different for 3.0 than from 3.2? Maybe the offset you changed was still a
> little
> wrong but close enough to work most of the time?
> 

I'm not sure either. Matt helped me find the right offsets.

<snip>

> Also, are you sure the arguments are supposed to be floats and not doubles?

Yes, I just went back and tripple checked.

HPDF_STATUS HPDF_Page_SetFontAndSize (HPDF_Page  page,
                                      HPDF_Font  font,
                                      HPDF_REAL  size);
HPDF_STATUS HPDF_Page_TextOut (HPDF_Page    page,
                               HPDF_REAL    xpos,
                               HPDF_REAL    ypos,
                              const char   *text);
In hpdf_types.h:

/*  float type (32bit IEEE754)
 */
typedef  float               HPDF_REAL;

--
Jeremy Cowgar
http://jeremy.cowgar.com

new topic     » goto parent     » topic index » view message » categorize

5. Re: 3.2, Wrapping DLLs and Float types

Ok. I installed gcc-3.3 on my computer and Euphoria 3.2/4.0 works fine, floats
and all when compiled with gcc-3.3. It works fine when compiled with gcc-4.3.0,
except when using floats.

So, the problem is with something changing in gcc. I am just not sure what. I am
going to start a new thread about Euphoria and gcc-4.3.0 compatibility. Please
comment there (so we can have proper subject titles).

--
Jeremy Cowgar
http://jeremy.cowgar.com

new topic     » goto parent     » topic index » view message » categorize

Search



Quick Links

User menu

Not signed in.

Misc Menu