1. c structs

I'm trying to convert some structures to eu, and I'm not sure of how 
some things are stored.

for example, here are some VB type declares:

Type POINTAPI
        x As Long
        y As Long
End Type

Type MSG
    hwnd As Long
    message As Long
    wParam As Long
    lParam As Long
    time As Long
    pt As POINTAPI
End Type

what would the struct size and offsets be? does a struct use any bytes 
itself, for sizeOf maybe?

what about c_type arrays? and fixed length strings?

Chris

new topic     » topic index » view message » categorize

2. Re: c structs

Try this:


include tk_mem.e

-- Type POINT
    ptX                 = allot( Long ),
    ptY                 = allot( Long ),
    SIZEOF_POINT       = allotted_size(),

-- Type MSG
    msgHWnd             = allot( Long ),
    msgMessage          = allot( UInt ),
    msgWParam           = allot( Long ),
    msgLParam           = allot( Long ),
    msgTime             = allot( DWord ),
    msgPtX              = allot( Long ),
    msgPtY              = allot( Long ),
    SIZEOF_MSG          = allotted_size()


You can then do something like:

    atom hPoint

    hPoint = acquire_mem(0, SIZEOF_POINT)
    store(hPoint, ptX, xvalue)
    store(hPoint, ptY, yvalue)

and

    xvalue = fetch(hPoint, ptX)
    yvalue = fetch(hPoint, ptY)


Unless you want to use the low-level access methods:



-- Type POINT
contant
    ptX                = 0,
    ptY                = 4,
    SIZEOF_POINT       = 8,

-- Type MSG
    msgHWnd             = 0,
    msgMessage          = 4,
    msgWParam           = 8,
    msgLParam           = 12,
    msgTime             = 16,
    msgPtX              = 20,
    msgPtY              = 24,
    SIZEOF_MSG          = 28


You can then do something like:

    atom hPoint

    hPoint = allocate(SIZEOF_POINT)
    poke4(hPoint + ptX, xvalue)
    poke4(hPoint + ptY, yvalue)

and

    xvalue = peek4s(hPoint+ptX)
    yvalue = peek4s(hPoint+ptY)

-----------
Derek.

----- Original Message ----- 
From: "Chris Bensler" <bensler at mail.com>
To: "EUforum" <EUforum at topica.com>
Sent: Friday, March 29, 2002 11:28 PM
Subject: c structs


> 
> I'm trying to convert some structures to eu, and I'm not sure of how 
> some things are stored.
> 
> for example, here are some VB type declares:
> 
> Type POINTAPI
>         x As Long
>         y As Long
> End Type
> 
> Type MSG
>     hwnd As Long
>     message As Long
>     wParam As Long
>     lParam As Long
>     time As Long
>     pt As POINTAPI
> End Type
> 
> what would the struct size and offsets be? does a struct use any bytes 
> itself, for sizeOf maybe?
> 
> what about c_type arrays? and fixed length strings?
> 
> Chris
> 
> 
> 
>

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

3. Re: c structs

----- Original Message -----
From: "Chris Bensler" <bensler at mail.com>
To: "EUforum" <EUforum at topica.com>
Subject: RE: c structs


>
> Thanks Derek,
>    Now I understand that much.
>
> What about arrays? and fixed length strings?
>
> EG.
>    recName1(1) As Byte
>    recName2 As String * 14
>

using tk_mem.e then

   recName1 = allot(Byte)
   recName2 = allot({14,Byte})

   store(addr, recName1, value1)
   store(addr, recName2, value2)


using low-level, then it depends on where in the structure these values are.
Using this method, you must count the offset from the start of the
structure. The field names represent an offset from the beginning of the
structure. To store and fetch data from the structure, you have to use
either poke() and peek().

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

Search



Quick Links

User menu

Not signed in.

Misc Menu