Pharo-users
By thread
pharo-users@lists.pharo.org
By month
Messages by month
- ----- 2026 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
July 2016
- 72 participants
- 501 messages
Re: [Pharo-users] [Pharo-dev] Spec Tutorial First chapter
by Sven Van Caekenberghe
> On 08 Jul 2016, at 19:50, stepharo <stepharo(a)free.fr> wrote:
>
> Hi
>
> Johan Fabry is writing a great tutorial (and this is cool to see all the material I gathered or wrote with him in the past)
>
> to take such great form.
>
> I attached the first chapter. I will post the chapter one by one once I review them (so far I have nothing to do - great feeling).
>
> Well done Johan!
>
> Stef
>
> <FirstContact.pdf>
Great work, thank you !
Books make a lot of difference, even today.
July 9, 2016
Re: [Pharo-users] Spec vs Brick vs Glamour vs Morphic vs WTF?
by Stephan Eggermont
You can find it on smalltalkhub StephanEggermont/SpecGenerator. In Pharo4 you'll miss spec updates, you'll need to add at least the FastTable based list and the SelectEntity widget.
Code generation is straightforward, and should be refactored
Stephan
Verstuurd vanaf mijn iPhone
July 9, 2016
Re: [Pharo-users] [UFFI] Using a nested structure
by Merwan Ouddane
Yes I did.
Have you tried on windows ?
Merwan
On 08/07/2016 21:20, Esteban Lorenzano wrote:
> it works fine for me:
>
> Struct>>b
> "This method was automatically generated"
> ^Enum fromInteger: (handle unsignedLongAt: 5)
>
> Struct>>b: anObject
> "This method was automatically generated"
> handle unsignedLongAt: 5 put: anObject value
>
> Struct>>c
> "This method was automatically generated"
> ^Enum fromInteger: (handle unsignedLongAt: 9)
>
> Struct>>c: anObject
> "This method was automatically generated"
> handle unsignedLongAt: 9 put: anObject value
>
> question: did you initialise the Enum? before generating fields?
>
> Esteban
>
>> On 08 Jul 2016, at 20:42, Merwan Ouddane <merwanouddane(a)gmail.com
>> <mailto:merwanouddane@gmail.com>> wrote:
>>
>> Struct >> fieldsDesc
>> ^#( void* a;
>> Enum b;
>> Enum c;
>> )
>>
>> Enum >> enumDecl
>> ^ #( TEST 1 )
>>
>> I joined a .st with the struct and the enum, the package name is FFITest.
>>
>> Merwan
>>
>> On 08/07/2016 20:14, Esteban Lorenzano wrote:
>>> that still does not helps⦠show me the code!
>>>
>>> Esteban
>>>
>>>> On 08 Jul 2016, at 20:09, Merwan Ouddane <merwanouddane(a)gmail.com
>>>> <mailto:merwanouddane@gmail.com>> wrote:
>>>>
>>>> Sorry not unsigned longs but enumerations
>>>>
>>>> On Fri, Jul 8, 2016 at 10:09 AM, Esteban Lorenzano
>>>> <estebanlm(a)gmail.com <mailto:estebanlm@gmail.com>> wrote:
>>>>
>>>> how do you declare this?
>>>>
>>>>> On 08 Jul 2016, at 10:01, Merwan Ouddane
>>>>> <merwanouddane(a)gmail.com <mailto:merwanouddane@gmail.com>> wrote:
>>>>>
>>>>> I spoke too fast ^^'
>>>>>
>>>>> struct Test {
>>>>> void * ptr;
>>>>> insigned long i;
>>>>> insigned long j;
>>>>> }
>>>>>
>>>>> Real size is 12, UFFI counts 24
>>>>>
>>>>> Merwan
>>>>>
>>>>>
>>>>> Le 7 juil. 2016 10:02, "Merwan Ouddane"
>>>>> <merwanouddane(a)gmail.com <mailto:merwanouddane@gmail.com>> a
>>>>> écrit :
>>>>>
>>>>> Now it is working, thank you :)
>>>>>
>>>>> On Thu, Jul 7, 2016 at 8:42 AM, Esteban Lorenzano
>>>>> <estebanlm(a)gmail.com <mailto:estebanlm@gmail.com>> wrote:
>>>>>
>>>>> Hi,
>>>>>
>>>>> > On 07 Jul 2016, at 01:54, Ben Coman
>>>>> <btc(a)openInWorld.com <mailto:btc@openinworld.com>> wrote:
>>>>> >
>>>>> > On Thu, Jul 7, 2016 at 12:58 AM, Merwan Ouddane
>>>>> <merwanouddane(a)gmail.com
>>>>> <mailto:merwanouddane@gmail.com>> wrote:
>>>>> >> PS: for the first example, the alignment is not
>>>>> respected, the vec3
>>>>> >> structure is starting at 9 but uffi is fetching it at 5
>>>>> >
>>>>> > Hi Esteban,
>>>>> >
>>>>> > Is it possible to get a feature or a recipe to
>>>>> output the sizeof or
>>>>> > offset of fields in types as understood by the
>>>>> Image, and the same
>>>>> > from a C side - that could be used as the standard
>>>>> first step in
>>>>> > troubleshooting these kinds of issues ?
>>>>>
>>>>> FFIExternalType class>>sizeOf: ?
>>>>>
>>>>> but that does not works for complex type sizes (like
>>>>> FFIExternalArray).
>>>>>
>>>>> I donât know what the problem is here, because in my
>>>>> test (attached) it seems to be working fine.
>>>>> maybe problem is on how the Vec3 array is created, it
>>>>> should be something like this:
>>>>>
>>>>> Vec3 class>>iinitialize
>>>>> self
>>>>> type: (FFIExternalType resolveType: 'double')
>>>>> size: 3
>>>>>
>>>>> (is like that because FFITypeArray is more designed to
>>>>> be used creating anonymous types than concretes, but
>>>>> well⦠)
>>>>>
>>>>> in any case, it seems to be working for me.
>>>>>
>>>>> Now, about the useâ¦
>>>>>
>>>>> doing this:
>>>>>
>>>>> p := Position new.
>>>>> p v1 at: 1 put: 42.0.
>>>>> p v1 at: 1. âwill print 0.0"
>>>>>
>>>>> why? because it works making a copy (maybe it should
>>>>> work passing a segment, as nested structs work, but
>>>>> this is how it works now).
>>>>>
>>>>> What should work (at doesnât) in this case is this:
>>>>>
>>>>> v := Vector3 new.
>>>>> p := Position new.
>>>>> v at: 1 put: 42.0.
>>>>> p v1: v.
>>>>> p v1 at: 1. âwill print 42.0"
>>>>>
>>>>> it does not work because I made a mistake in field
>>>>> generation that I already fixed⦠so you will need to
>>>>> update UFFI (and regenerate field accessors) ;)
>>>>>
>>>>> also⦠I will provide a fix to make first case workâ¦
>>>>> just later because now Iâm going to my french lessons :)
>>>>>
>>>>> Esteban
>>>>>
>>>>> ps: for future reference, a description of: install
>>>>> this, run that, is a lot easier to understand the
>>>>> problem (is a case of âshow me the code!â) :P
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> >
>>>>> > cheers -ben
>>>>> >
>>>>> >>
>>>>> >>
>>>>> >> On 06/07/2016 17:55, Merwan Ouddane wrote:
>>>>> >>
>>>>> >> Another test:
>>>>> >> I replaced double by integer, for visibility...
>>>>> >> typedef struct vec3 {
>>>>> >> int data[3];
>>>>> >> } vec3;
>>>>> >>
>>>>> >> add a second vec3 to position:
>>>>> >>
>>>>> >> typedef struct position {
>>>>> >> int i;
>>>>> >> vec3 vec;
>>>>> >> vec3 vec2;
>>>>> >> } position;
>>>>> >>
>>>>> >> Now in pharo:
>>>>> >> Position >> fieldsDesc
>>>>> >> "self rebuildFieldAccessors"
>>>>> >> ^ #(
>>>>> >> int i;
>>>>> >> Vec3 vec;
>>>>> >> Vec3 vec2;
>>>>> >> )
>>>>> >>
>>>>> >> The size returned for each stucture is 16 instead
>>>>> of 12 that because of the
>>>>> >> "8 byte alignment"
>>>>> >>
>>>>> >> Meaning that the "position" structure is corrupted.
>>>>> >>
>>>>> >> With this function:
>>>>> >>
>>>>> >>
>>>>> >> extern "C" void DLL_EXPORT fillStruct(position
>>>>> *position)
>>>>> >> {
>>>>> >> position -> i = 19;
>>>>> >> (position -> vec).data[0] = 1;
>>>>> >> (position -> vec).data[1] = 2;
>>>>> >> (position -> vec).data[2] = 3;
>>>>> >> (position -> vec2).data[0] = 1;
>>>>> >> (position -> vec2).data[1] = 2;
>>>>> >> (position -> vec2).data[2] = 3;
>>>>> >> }
>>>>> >>
>>>>> >> We will get:
>>>>> >> position i == 19
>>>>> >> position vec at: 1 == 1
>>>>> >> position vec2 at: 1 == 2
>>>>> >>
>>>>> >>
>>>>> >> On Tue, Jul 5, 2016 at 3:12 PM, Ronie Salgado
>>>>> <roniesalg(a)gmail.com <mailto:roniesalg@gmail.com>> wrote:
>>>>> >>>
>>>>> >>> I compiled the DLL using Visual Studio 2015
>>>>> Community Edition. Later I
>>>>> >>> will check with mingw.
>>>>> >>>
>>>>> >>> 2016-07-05 14:58 GMT+02:00 Merwan Ouddane
>>>>> <merwanouddane(a)gmail.com
>>>>> <mailto:merwanouddane@gmail.com>>:
>>>>> >>>>
>>>>> >>>> Using codeblocks, mine are:
>>>>> >>>>
>>>>> >>>> mingw32-g++.exe -m32 -DBUILD_DLL -c main.cpp -o
>>>>> obj\Release\main.o
>>>>> >>>> mingw32-g++.exe -shared
>>>>> -Wl,--output-def=bin\Release\libTest.def
>>>>> >>>> -Wl,--out-implib=bin\Release\libTest.a -Wl,--dll
>>>>> obj\Release\main.o -o
>>>>> >>>> bin\Release\Test.dll -s -m32
>>>>> >>>>
>>>>> >>>>
>>>>> >>>> On Tue, Jul 5, 2016 at 2:52 PM, Merwan Ouddane
>>>>> <merwanouddane(a)gmail.com <mailto:merwanouddane@gmail.com>>
>>>>> >>>> wrote:
>>>>> >>>>>
>>>>> >>>>> I am not moving from another plateform :/
>>>>> >>>>>
>>>>> >>>>> I tried it in pharo 6 and I it didn't work either.
>>>>> >>>>>
>>>>> >>>>> It could be my dll. What is your compilation
>>>>> line for the dll ?
>>>>> >>>>>
>>>>> >>>>> Thanks you,
>>>>> >>>>> Merwan
>>>>> >>>>>
>>>>> >>>>> On Tue, Jul 5, 2016 at 2:14 PM, Ronie Salgado
>>>>> <roniesalg(a)gmail.com <mailto:roniesalg@gmail.com>>
>>>>> >>>>> wrote:
>>>>> >>>>>>
>>>>> >>>>>> Hi Merwan,
>>>>> >>>>>>
>>>>> >>>>>> I tested this on Pharo 6 and it is working in
>>>>> Windows. However, in 32
>>>>> >>>>>> bits Window doubles have an 8 byte alignment,
>>>>> unlike Linux where they have a
>>>>> >>>>>> 4 byte alignment.
>>>>> >>>>>>
>>>>> >>>>>> Can you try doing the following before
>>>>> performing the ffi call in
>>>>> >>>>>> Windows, if you are moving an image from Linux
>>>>> or OS X:
>>>>> >>>>>>
>>>>> >>>>>> Vec3 rebuildFieldAccessors.
>>>>> >>>>>> Position rebuildFieldAccessors.
>>>>> >>>>>>
>>>>> >>>>>> Best regards,
>>>>> >>>>>> Ronie
>>>>> >>>>>>
>>>>> >>>>>> 2016-07-05 11:11 GMT+02:00 Merwan Ouddane
>>>>> <merwanouddane(a)gmail.com
>>>>> <mailto:merwanouddane@gmail.com>>:
>>>>> >>>>>>>
>>>>> >>>>>>> Hi,
>>>>> >>>>>>>
>>>>> >>>>>>> I have an issue whith nested structures.
>>>>> >>>>>>>
>>>>> >>>>>>> I made some "dummy" structures in c:
>>>>> >>>>>>>
>>>>> >>>>>>>
>>>>> >>>>>>> typedef struct vec3 {
>>>>> >>>>>>> double data[3];
>>>>> >>>>>>> } vec3;
>>>>> >>>>>>>
>>>>> >>>>>>> typedef struct position {
>>>>> >>>>>>> int i;
>>>>> >>>>>>> vec3 vec;
>>>>> >>>>>>> } position;
>>>>> >>>>>>>
>>>>> >>>>>>> And a "dummy" function to fill it:
>>>>> >>>>>>> void fillStruct(position *position)
>>>>> >>>>>>> {
>>>>> >>>>>>> position -> i = 19;
>>>>> >>>>>>> (position -> vec).data[0] = 1;
>>>>> >>>>>>> (position -> vec).data[1] = 2;
>>>>> >>>>>>> (position -> vec).data[2] = 3;
>>>>> >>>>>>> }
>>>>> >>>>>>>
>>>>> >>>>>>> But I can't make the nested structure work.
>>>>> >>>>>>> The "i" is correctly set to 19 but I have
>>>>> values that doesn't make any
>>>>> >>>>>>> sense in the vec3 structure.
>>>>> >>>>>>>
>>>>> >>>>>>> In Pharo
>>>>> >>>>>>> I declared the Double3 type for the array
>>>>> inside Vec3:
>>>>> >>>>>>> Double3 := FFITypeArray ofType: 'double' size: 3
>>>>> >>>>>>>
>>>>> >>>>>>> Vec3>>fieldsDesc
>>>>> >>>>>>> ^ #(
>>>>> >>>>>>> Double3 v;
>>>>> >>>>>>> )
>>>>> >>>>>>>
>>>>> >>>>>>> And the position:
>>>>> >>>>>>> Position>>fieldsDesc
>>>>> >>>>>>> ^ #(
>>>>> >>>>>>> int i;
>>>>> >>>>>>> Vec3 vec;
>>>>> >>>>>>> )
>>>>> >>>>>>>
>>>>> >>>>>>> The ffi call:
>>>>> >>>>>>> ^ self ffiCall: #(void fillStruct(Position
>>>>> *position)) module:
>>>>> >>>>>>> 'Test.dll'
>>>>> >>>>>>>
>>>>> >>>>>>> Sorry for the long / messy mail :p
>>>>> >>>>>>>
>>>>> >>>>>>> Any clues ?
>>>>> >>>>>>>
>>>>> >>>>>>> Cheers,
>>>>> >>>>>>> Merwan
>>>>> >>>>>>
>>>>> >>>>>>
>>>>> >>>>>
>>>>> >>>>
>>>>> >>>
>>>>> >>
>>>>> >>
>>>>> >
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>
>> <FFITest.st <http://ffitest.st>>
>
July 8, 2016
Re: [Pharo-users] [UFFI] Using a nested structure
by Esteban Lorenzano
it works fine for me:
Struct>>b
"This method was automatically generated"
^Enum fromInteger: (handle unsignedLongAt: 5)
Struct>>b: anObject
"This method was automatically generated"
handle unsignedLongAt: 5 put: anObject value
Struct>>c
"This method was automatically generated"
^Enum fromInteger: (handle unsignedLongAt: 9)
Struct>>c: anObject
"This method was automatically generated"
handle unsignedLongAt: 9 put: anObject value
question: did you initialise the Enum? before generating fields?
Esteban
> On 08 Jul 2016, at 20:42, Merwan Ouddane <merwanouddane(a)gmail.com> wrote:
>
> Struct >> fieldsDesc
> ^#( void* a;
> Enum b;
> Enum c;
> )
>
> Enum >> enumDecl
> ^ #( TEST 1 )
>
> I joined a .st with the struct and the enum, the package name is FFITest.
>
> Merwan
>
> On 08/07/2016 20:14, Esteban Lorenzano wrote:
>> that still does not helps⦠show me the code!
>>
>> Esteban
>>
>>> On 08 Jul 2016, at 20:09, Merwan Ouddane <merwanouddane(a)gmail.com <mailto:merwanouddane@gmail.com>> wrote:
>>>
>>> Sorry not unsigned longs but enumerations
>>>
>>> On Fri, Jul 8, 2016 at 10:09 AM, Esteban Lorenzano <estebanlm(a)gmail.com <mailto:estebanlm@gmail.com>> wrote:
>>> how do you declare this?
>>>
>>>> On 08 Jul 2016, at 10:01, Merwan Ouddane <merwanouddane(a)gmail.com <mailto:merwanouddane@gmail.com>> wrote:
>>>>
>>>> I spoke too fast ^^'
>>>>
>>>> struct Test {
>>>> void * ptr;
>>>> insigned long i;
>>>> insigned long j;
>>>> }
>>>>
>>>> Real size is 12, UFFI counts 24
>>>>
>>>> Merwan
>>>>
>>>>
>>>> Le 7 juil. 2016 10:02, "Merwan Ouddane" <merwanouddane(a)gmail.com <mailto:merwanouddane@gmail.com>> a écrit :
>>>> Now it is working, thank you :)
>>>>
>>>> On Thu, Jul 7, 2016 at 8:42 AM, Esteban Lorenzano <estebanlm(a)gmail.com <mailto:estebanlm@gmail.com>> wrote:
>>>> Hi,
>>>>
>>>> > On 07 Jul 2016, at 01:54, Ben Coman <btc(a)openInWorld.com <mailto:btc@openinworld.com>> wrote:
>>>> >
>>>> > On Thu, Jul 7, 2016 at 12:58 AM, Merwan Ouddane <merwanouddane(a)gmail.com <mailto:merwanouddane@gmail.com>> wrote:
>>>> >> PS: for the first example, the alignment is not respected, the vec3
>>>> >> structure is starting at 9 but uffi is fetching it at 5
>>>> >
>>>> > Hi Esteban,
>>>> >
>>>> > Is it possible to get a feature or a recipe to output the sizeof or
>>>> > offset of fields in types as understood by the Image, and the same
>>>> > from a C side - that could be used as the standard first step in
>>>> > troubleshooting these kinds of issues ?
>>>>
>>>> FFIExternalType class>>sizeOf: ?
>>>>
>>>> but that does not works for complex type sizes (like FFIExternalArray).
>>>>
>>>> I donât know what the problem is here, because in my test (attached) it seems to be working fine.
>>>> maybe problem is on how the Vec3 array is created, it should be something like this:
>>>>
>>>> Vec3 class>>iinitialize
>>>> self
>>>> type: (FFIExternalType resolveType: 'double')
>>>> size: 3
>>>>
>>>> (is like that because FFITypeArray is more designed to be used creating anonymous types than concretes, but well⦠)
>>>>
>>>> in any case, it seems to be working for me.
>>>>
>>>> Now, about the useâ¦
>>>>
>>>> doing this:
>>>>
>>>> p := Position new.
>>>> p v1 at: 1 put: 42.0.
>>>> p v1 at: 1. âwill print 0.0"
>>>>
>>>> why? because it works making a copy (maybe it should work passing a segment, as nested structs work, but this is how it works now).
>>>>
>>>> What should work (at doesnât) in this case is this:
>>>>
>>>> v := Vector3 new.
>>>> p := Position new.
>>>> v at: 1 put: 42.0.
>>>> p v1: v.
>>>> p v1 at: 1. âwill print 42.0"
>>>>
>>>> it does not work because I made a mistake in field generation that I already fixed⦠so you will need to update UFFI (and regenerate field accessors) ;)
>>>>
>>>> also⦠I will provide a fix to make first case work⦠just later because now Iâm going to my french lessons :)
>>>>
>>>> Esteban
>>>>
>>>> ps: for future reference, a description of: install this, run that, is a lot easier to understand the problem (is a case of âshow me the code!â) :P
>>>>
>>>>
>>>>
>>>>
>>>> >
>>>> > cheers -ben
>>>> >
>>>> >>
>>>> >>
>>>> >> On 06/07/2016 17:55, Merwan Ouddane wrote:
>>>> >>
>>>> >> Another test:
>>>> >> I replaced double by integer, for visibility...
>>>> >> typedef struct vec3 {
>>>> >> int data[3];
>>>> >> } vec3;
>>>> >>
>>>> >> add a second vec3 to position:
>>>> >>
>>>> >> typedef struct position {
>>>> >> int i;
>>>> >> vec3 vec;
>>>> >> vec3 vec2;
>>>> >> } position;
>>>> >>
>>>> >> Now in pharo:
>>>> >> Position >> fieldsDesc
>>>> >> "self rebuildFieldAccessors"
>>>> >> ^ #(
>>>> >> int i;
>>>> >> Vec3 vec;
>>>> >> Vec3 vec2;
>>>> >> )
>>>> >>
>>>> >> The size returned for each stucture is 16 instead of 12 that because of the
>>>> >> "8 byte alignment"
>>>> >>
>>>> >> Meaning that the "position" structure is corrupted.
>>>> >>
>>>> >> With this function:
>>>> >>
>>>> >>
>>>> >> extern "C" void DLL_EXPORT fillStruct(position *position)
>>>> >> {
>>>> >> position -> i = 19;
>>>> >> (position -> vec).data[0] = 1;
>>>> >> (position -> vec).data[1] = 2;
>>>> >> (position -> vec).data[2] = 3;
>>>> >> (position -> vec2).data[0] = 1;
>>>> >> (position -> vec2).data[1] = 2;
>>>> >> (position -> vec2).data[2] = 3;
>>>> >> }
>>>> >>
>>>> >> We will get:
>>>> >> position i == 19
>>>> >> position vec at: 1 == 1
>>>> >> position vec2 at: 1 == 2
>>>> >>
>>>> >>
>>>> >> On Tue, Jul 5, 2016 at 3:12 PM, Ronie Salgado <roniesalg(a)gmail.com <mailto:roniesalg@gmail.com>> wrote:
>>>> >>>
>>>> >>> I compiled the DLL using Visual Studio 2015 Community Edition. Later I
>>>> >>> will check with mingw.
>>>> >>>
>>>> >>> 2016-07-05 14:58 GMT+02:00 Merwan Ouddane <merwanouddane(a)gmail.com <mailto:merwanouddane@gmail.com>>:
>>>> >>>>
>>>> >>>> Using codeblocks, mine are:
>>>> >>>>
>>>> >>>> mingw32-g++.exe -m32 -DBUILD_DLL -c main.cpp -o obj\Release\main.o
>>>> >>>> mingw32-g++.exe -shared -Wl,--output-def=bin\Release\libTest.def
>>>> >>>> -Wl,--out-implib=bin\Release\libTest.a -Wl,--dll obj\Release\main.o -o
>>>> >>>> bin\Release\Test.dll -s -m32
>>>> >>>>
>>>> >>>>
>>>> >>>> On Tue, Jul 5, 2016 at 2:52 PM, Merwan Ouddane <merwanouddane(a)gmail.com <mailto:merwanouddane@gmail.com>>
>>>> >>>> wrote:
>>>> >>>>>
>>>> >>>>> I am not moving from another plateform :/
>>>> >>>>>
>>>> >>>>> I tried it in pharo 6 and I it didn't work either.
>>>> >>>>>
>>>> >>>>> It could be my dll. What is your compilation line for the dll ?
>>>> >>>>>
>>>> >>>>> Thanks you,
>>>> >>>>> Merwan
>>>> >>>>>
>>>> >>>>> On Tue, Jul 5, 2016 at 2:14 PM, Ronie Salgado <roniesalg(a)gmail.com <mailto:roniesalg@gmail.com>>
>>>> >>>>> wrote:
>>>> >>>>>>
>>>> >>>>>> Hi Merwan,
>>>> >>>>>>
>>>> >>>>>> I tested this on Pharo 6 and it is working in Windows. However, in 32
>>>> >>>>>> bits Window doubles have an 8 byte alignment, unlike Linux where they have a
>>>> >>>>>> 4 byte alignment.
>>>> >>>>>>
>>>> >>>>>> Can you try doing the following before performing the ffi call in
>>>> >>>>>> Windows, if you are moving an image from Linux or OS X:
>>>> >>>>>>
>>>> >>>>>> Vec3 rebuildFieldAccessors.
>>>> >>>>>> Position rebuildFieldAccessors.
>>>> >>>>>>
>>>> >>>>>> Best regards,
>>>> >>>>>> Ronie
>>>> >>>>>>
>>>> >>>>>> 2016-07-05 11:11 GMT+02:00 Merwan Ouddane <merwanouddane(a)gmail.com <mailto:merwanouddane@gmail.com>>:
>>>> >>>>>>>
>>>> >>>>>>> Hi,
>>>> >>>>>>>
>>>> >>>>>>> I have an issue whith nested structures.
>>>> >>>>>>>
>>>> >>>>>>> I made some "dummy" structures in c:
>>>> >>>>>>>
>>>> >>>>>>>
>>>> >>>>>>> typedef struct vec3 {
>>>> >>>>>>> double data[3];
>>>> >>>>>>> } vec3;
>>>> >>>>>>>
>>>> >>>>>>> typedef struct position {
>>>> >>>>>>> int i;
>>>> >>>>>>> vec3 vec;
>>>> >>>>>>> } position;
>>>> >>>>>>>
>>>> >>>>>>> And a "dummy" function to fill it:
>>>> >>>>>>> void fillStruct(position *position)
>>>> >>>>>>> {
>>>> >>>>>>> position -> i = 19;
>>>> >>>>>>> (position -> vec).data[0] = 1;
>>>> >>>>>>> (position -> vec).data[1] = 2;
>>>> >>>>>>> (position -> vec).data[2] = 3;
>>>> >>>>>>> }
>>>> >>>>>>>
>>>> >>>>>>> But I can't make the nested structure work.
>>>> >>>>>>> The "i" is correctly set to 19 but I have values that doesn't make any
>>>> >>>>>>> sense in the vec3 structure.
>>>> >>>>>>>
>>>> >>>>>>> In Pharo
>>>> >>>>>>> I declared the Double3 type for the array inside Vec3:
>>>> >>>>>>> Double3 := FFITypeArray ofType: 'double' size: 3
>>>> >>>>>>>
>>>> >>>>>>> Vec3>>fieldsDesc
>>>> >>>>>>> ^ #(
>>>> >>>>>>> Double3 v;
>>>> >>>>>>> )
>>>> >>>>>>>
>>>> >>>>>>> And the position:
>>>> >>>>>>> Position>>fieldsDesc
>>>> >>>>>>> ^ #(
>>>> >>>>>>> int i;
>>>> >>>>>>> Vec3 vec;
>>>> >>>>>>> )
>>>> >>>>>>>
>>>> >>>>>>> The ffi call:
>>>> >>>>>>> ^ self ffiCall: #(void fillStruct(Position *position)) module:
>>>> >>>>>>> 'Test.dll'
>>>> >>>>>>>
>>>> >>>>>>> Sorry for the long / messy mail :p
>>>> >>>>>>>
>>>> >>>>>>> Any clues ?
>>>> >>>>>>>
>>>> >>>>>>> Cheers,
>>>> >>>>>>> Merwan
>>>> >>>>>>
>>>> >>>>>>
>>>> >>>>>
>>>> >>>>
>>>> >>>
>>>> >>
>>>> >>
>>>> >
>>>>
>>>>
>>>>
>>>
>>>
>>
>
> <FFITest.st>
July 8, 2016
Re: [Pharo-users] [UFFI] Using a nested structure
by Merwan Ouddane
Struct >> fieldsDesc
^#( void* a;
Enum b;
Enum c;
)
Enum >> enumDecl
^ #( TEST 1 )
I joined a .st with the struct and the enum, the package name is FFITest.
Merwan
On 08/07/2016 20:14, Esteban Lorenzano wrote:
> that still does not helps⦠show me the code!
>
> Esteban
>
>> On 08 Jul 2016, at 20:09, Merwan Ouddane <merwanouddane(a)gmail.com
>> <mailto:merwanouddane@gmail.com>> wrote:
>>
>> Sorry not unsigned longs but enumerations
>>
>> On Fri, Jul 8, 2016 at 10:09 AM, Esteban Lorenzano
>> <estebanlm(a)gmail.com <mailto:estebanlm@gmail.com>> wrote:
>>
>> how do you declare this?
>>
>>> On 08 Jul 2016, at 10:01, Merwan Ouddane
>>> <merwanouddane(a)gmail.com <mailto:merwanouddane@gmail.com>> wrote:
>>>
>>> I spoke too fast ^^'
>>>
>>> struct Test {
>>> void * ptr;
>>> insigned long i;
>>> insigned long j;
>>> }
>>>
>>> Real size is 12, UFFI counts 24
>>>
>>> Merwan
>>>
>>>
>>> Le 7 juil. 2016 10:02, "Merwan Ouddane" <merwanouddane(a)gmail.com
>>> <mailto:merwanouddane@gmail.com>> a écrit :
>>>
>>> Now it is working, thank you :)
>>>
>>> On Thu, Jul 7, 2016 at 8:42 AM, Esteban Lorenzano
>>> <estebanlm(a)gmail.com <mailto:estebanlm@gmail.com>> wrote:
>>>
>>> Hi,
>>>
>>> > On 07 Jul 2016, at 01:54, Ben Coman
>>> <btc(a)openInWorld.com <mailto:btc@openinworld.com>> wrote:
>>> >
>>> > On Thu, Jul 7, 2016 at 12:58 AM, Merwan Ouddane
>>> <merwanouddane(a)gmail.com
>>> <mailto:merwanouddane@gmail.com>> wrote:
>>> >> PS: for the first example, the alignment is not
>>> respected, the vec3
>>> >> structure is starting at 9 but uffi is fetching it at 5
>>> >
>>> > Hi Esteban,
>>> >
>>> > Is it possible to get a feature or a recipe to output
>>> the sizeof or
>>> > offset of fields in types as understood by the Image,
>>> and the same
>>> > from a C side - that could be used as the standard
>>> first step in
>>> > troubleshooting these kinds of issues ?
>>>
>>> FFIExternalType class>>sizeOf: ?
>>>
>>> but that does not works for complex type sizes (like
>>> FFIExternalArray).
>>>
>>> I donât know what the problem is here, because in my
>>> test (attached) it seems to be working fine.
>>> maybe problem is on how the Vec3 array is created, it
>>> should be something like this:
>>>
>>> Vec3 class>>iinitialize
>>> self
>>> type: (FFIExternalType resolveType:
>>> 'double')
>>> size: 3
>>>
>>> (is like that because FFITypeArray is more designed to
>>> be used creating anonymous types than concretes, but well⦠)
>>>
>>> in any case, it seems to be working for me.
>>>
>>> Now, about the useâ¦
>>>
>>> doing this:
>>>
>>> p := Position new.
>>> p v1 at: 1 put: 42.0.
>>> p v1 at: 1. âwill print 0.0"
>>>
>>> why? because it works making a copy (maybe it should
>>> work passing a segment, as nested structs work, but this
>>> is how it works now).
>>>
>>> What should work (at doesnât) in this case is this:
>>>
>>> v := Vector3 new.
>>> p := Position new.
>>> v at: 1 put: 42.0.
>>> p v1: v.
>>> p v1 at: 1. âwill print 42.0"
>>>
>>> it does not work because I made a mistake in field
>>> generation that I already fixed⦠so you will need to
>>> update UFFI (and regenerate field accessors) ;)
>>>
>>> also⦠I will provide a fix to make first case work⦠just
>>> later because now Iâm going to my french lessons :)
>>>
>>> Esteban
>>>
>>> ps: for future reference, a description of: install
>>> this, run that, is a lot easier to understand the
>>> problem (is a case of âshow me the code!â) :P
>>>
>>>
>>>
>>>
>>> >
>>> > cheers -ben
>>> >
>>> >>
>>> >>
>>> >> On 06/07/2016 17:55, Merwan Ouddane wrote:
>>> >>
>>> >> Another test:
>>> >> I replaced double by integer, for visibility...
>>> >> typedef struct vec3 {
>>> >> int data[3];
>>> >> } vec3;
>>> >>
>>> >> add a second vec3 to position:
>>> >>
>>> >> typedef struct position {
>>> >> int i;
>>> >> vec3 vec;
>>> >> vec3 vec2;
>>> >> } position;
>>> >>
>>> >> Now in pharo:
>>> >> Position >> fieldsDesc
>>> >> "self rebuildFieldAccessors"
>>> >> ^ #(
>>> >> int i;
>>> >> Vec3 vec;
>>> >> Vec3 vec2;
>>> >> )
>>> >>
>>> >> The size returned for each stucture is 16 instead of
>>> 12 that because of the
>>> >> "8 byte alignment"
>>> >>
>>> >> Meaning that the "position" structure is corrupted.
>>> >>
>>> >> With this function:
>>> >>
>>> >>
>>> >> extern "C" void DLL_EXPORT fillStruct(position *position)
>>> >> {
>>> >> position -> i = 19;
>>> >> (position -> vec).data[0] = 1;
>>> >> (position -> vec).data[1] = 2;
>>> >> (position -> vec).data[2] = 3;
>>> >> (position -> vec2).data[0] = 1;
>>> >> (position -> vec2).data[1] = 2;
>>> >> (position -> vec2).data[2] = 3;
>>> >> }
>>> >>
>>> >> We will get:
>>> >> position i == 19
>>> >> position vec at: 1 == 1
>>> >> position vec2 at: 1 == 2
>>> >>
>>> >>
>>> >> On Tue, Jul 5, 2016 at 3:12 PM, Ronie Salgado
>>> <roniesalg(a)gmail.com <mailto:roniesalg@gmail.com>> wrote:
>>> >>>
>>> >>> I compiled the DLL using Visual Studio 2015
>>> Community Edition. Later I
>>> >>> will check with mingw.
>>> >>>
>>> >>> 2016-07-05 14:58 GMT+02:00 Merwan Ouddane
>>> <merwanouddane(a)gmail.com <mailto:merwanouddane@gmail.com>>:
>>> >>>>
>>> >>>> Using codeblocks, mine are:
>>> >>>>
>>> >>>> mingw32-g++.exe -m32 -DBUILD_DLL -c main.cpp -o
>>> obj\Release\main.o
>>> >>>> mingw32-g++.exe -shared
>>> -Wl,--output-def=bin\Release\libTest.def
>>> >>>> -Wl,--out-implib=bin\Release\libTest.a -Wl,--dll
>>> obj\Release\main.o -o
>>> >>>> bin\Release\Test.dll -s -m32
>>> >>>>
>>> >>>>
>>> >>>> On Tue, Jul 5, 2016 at 2:52 PM, Merwan Ouddane
>>> <merwanouddane(a)gmail.com <mailto:merwanouddane@gmail.com>>
>>> >>>> wrote:
>>> >>>>>
>>> >>>>> I am not moving from another plateform :/
>>> >>>>>
>>> >>>>> I tried it in pharo 6 and I it didn't work either.
>>> >>>>>
>>> >>>>> It could be my dll. What is your compilation line
>>> for the dll ?
>>> >>>>>
>>> >>>>> Thanks you,
>>> >>>>> Merwan
>>> >>>>>
>>> >>>>> On Tue, Jul 5, 2016 at 2:14 PM, Ronie Salgado
>>> <roniesalg(a)gmail.com <mailto:roniesalg@gmail.com>>
>>> >>>>> wrote:
>>> >>>>>>
>>> >>>>>> Hi Merwan,
>>> >>>>>>
>>> >>>>>> I tested this on Pharo 6 and it is working in
>>> Windows. However, in 32
>>> >>>>>> bits Window doubles have an 8 byte alignment,
>>> unlike Linux where they have a
>>> >>>>>> 4 byte alignment.
>>> >>>>>>
>>> >>>>>> Can you try doing the following before performing
>>> the ffi call in
>>> >>>>>> Windows, if you are moving an image from Linux or
>>> OS X:
>>> >>>>>>
>>> >>>>>> Vec3 rebuildFieldAccessors.
>>> >>>>>> Position rebuildFieldAccessors.
>>> >>>>>>
>>> >>>>>> Best regards,
>>> >>>>>> Ronie
>>> >>>>>>
>>> >>>>>> 2016-07-05 11:11 GMT+02:00 Merwan Ouddane
>>> <merwanouddane(a)gmail.com <mailto:merwanouddane@gmail.com>>:
>>> >>>>>>>
>>> >>>>>>> Hi,
>>> >>>>>>>
>>> >>>>>>> I have an issue whith nested structures.
>>> >>>>>>>
>>> >>>>>>> I made some "dummy" structures in c:
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>> typedef struct vec3 {
>>> >>>>>>> double data[3];
>>> >>>>>>> } vec3;
>>> >>>>>>>
>>> >>>>>>> typedef struct position {
>>> >>>>>>> int i;
>>> >>>>>>> vec3 vec;
>>> >>>>>>> } position;
>>> >>>>>>>
>>> >>>>>>> And a "dummy" function to fill it:
>>> >>>>>>> void fillStruct(position *position)
>>> >>>>>>> {
>>> >>>>>>> position -> i = 19;
>>> >>>>>>> (position -> vec).data[0] = 1;
>>> >>>>>>> (position -> vec).data[1] = 2;
>>> >>>>>>> (position -> vec).data[2] = 3;
>>> >>>>>>> }
>>> >>>>>>>
>>> >>>>>>> But I can't make the nested structure work.
>>> >>>>>>> The "i" is correctly set to 19 but I have values
>>> that doesn't make any
>>> >>>>>>> sense in the vec3 structure.
>>> >>>>>>>
>>> >>>>>>> In Pharo
>>> >>>>>>> I declared the Double3 type for the array inside
>>> Vec3:
>>> >>>>>>> Double3 := FFITypeArray ofType: 'double' size: 3
>>> >>>>>>>
>>> >>>>>>> Vec3>>fieldsDesc
>>> >>>>>>> ^ #(
>>> >>>>>>> Double3 v;
>>> >>>>>>> )
>>> >>>>>>>
>>> >>>>>>> And the position:
>>> >>>>>>> Position>>fieldsDesc
>>> >>>>>>> ^ #(
>>> >>>>>>> int i;
>>> >>>>>>> Vec3 vec;
>>> >>>>>>> )
>>> >>>>>>>
>>> >>>>>>> The ffi call:
>>> >>>>>>> ^ self ffiCall: #(void fillStruct(Position
>>> *position)) module:
>>> >>>>>>> 'Test.dll'
>>> >>>>>>>
>>> >>>>>>> Sorry for the long / messy mail :p
>>> >>>>>>>
>>> >>>>>>> Any clues ?
>>> >>>>>>>
>>> >>>>>>> Cheers,
>>> >>>>>>> Merwan
>>> >>>>>>
>>> >>>>>>
>>> >>>>>
>>> >>>>
>>> >>>
>>> >>
>>> >>
>>> >
>>>
>>>
>>>
>>
>>
>
July 8, 2016
Re: [Pharo-users] Database band reports...
by anonyme
Ok, thanks you for responses. A band report is more than a PDF
generator... It's a queries manager with varaible management facilities
: details queries connect to master query, and you can manage sub report
bottlenek into other master reports. The band report generator has the
ability to manage page organisation, and editor add text styled... I
can't use samlltalk database without a good band report component.
But argos band report displayed under look to be fine, if there is a
possibility to use it with smaltalk... It looks like argos is a server.
But what about interfaces with smalltalk ?
cheers - Patrick
Le 08/07/2016 à 16:08, Ben Coman a écrit :
> On Fri, Jul 8, 2016 at 5:45 PM, stepharo <stepharo(a)free.fr> wrote:
>> Hi patrick
>>
>> What is a band report?
> http://webhelp.evisions.com/HelpFiles/Argos/4.2/en/Content/10101001.html
>
> Sorry Patrick. Pharo has such a GUI report generator. But Artefact
> seems to provide similar features via code...
> https://ci.inria.fr/pharo-contribution/view/Books/job/EnterprisePharoBook/l…
>
> cheers -ben
>
>> Did you check Artefact because you can generate pdf with Artefact.
>>
>> Stef
>>
>>
>>
>>> Hi,
>>>
>>> My previous message stayed without responses, so I published it agin...
>>> I'm
>>> looking for a database band report component. The goal is to build quickly
>>> a
>>> PDF report from SQL requests. An exemple is Lazreport, this is a tutorial
>>> <http://wiki.lazarus.freepascal.org/LazReport_Tutorial> .
>>>
>>>
>>>
>>> --
>>> View this message in context:
>>> http://forum.world.st/Database-band-reports-tp4905523.html
>>> Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.
>>>
>>>
>>
>
July 8, 2016
Re: [Pharo-users] [UFFI] Using a nested structure
by Esteban Lorenzano
that still does not helps⦠show me the code!
Esteban
> On 08 Jul 2016, at 20:09, Merwan Ouddane <merwanouddane(a)gmail.com> wrote:
>
> Sorry not unsigned longs but enumerations
>
> On Fri, Jul 8, 2016 at 10:09 AM, Esteban Lorenzano <estebanlm(a)gmail.com <mailto:estebanlm@gmail.com>> wrote:
> how do you declare this?
>
>> On 08 Jul 2016, at 10:01, Merwan Ouddane <merwanouddane(a)gmail.com <mailto:merwanouddane@gmail.com>> wrote:
>>
>> I spoke too fast ^^'
>>
>> struct Test {
>> void * ptr;
>> insigned long i;
>> insigned long j;
>> }
>>
>> Real size is 12, UFFI counts 24
>>
>> Merwan
>>
>>
>> Le 7 juil. 2016 10:02, "Merwan Ouddane" <merwanouddane(a)gmail.com <mailto:merwanouddane@gmail.com>> a écrit :
>> Now it is working, thank you :)
>>
>> On Thu, Jul 7, 2016 at 8:42 AM, Esteban Lorenzano <estebanlm(a)gmail.com <mailto:estebanlm@gmail.com>> wrote:
>> Hi,
>>
>> > On 07 Jul 2016, at 01:54, Ben Coman <btc(a)openInWorld.com <mailto:btc@openinworld.com>> wrote:
>> >
>> > On Thu, Jul 7, 2016 at 12:58 AM, Merwan Ouddane <merwanouddane(a)gmail.com <mailto:merwanouddane@gmail.com>> wrote:
>> >> PS: for the first example, the alignment is not respected, the vec3
>> >> structure is starting at 9 but uffi is fetching it at 5
>> >
>> > Hi Esteban,
>> >
>> > Is it possible to get a feature or a recipe to output the sizeof or
>> > offset of fields in types as understood by the Image, and the same
>> > from a C side - that could be used as the standard first step in
>> > troubleshooting these kinds of issues ?
>>
>> FFIExternalType class>>sizeOf: ?
>>
>> but that does not works for complex type sizes (like FFIExternalArray).
>>
>> I donât know what the problem is here, because in my test (attached) it seems to be working fine.
>> maybe problem is on how the Vec3 array is created, it should be something like this:
>>
>> Vec3 class>>iinitialize
>> self
>> type: (FFIExternalType resolveType: 'double')
>> size: 3
>>
>> (is like that because FFITypeArray is more designed to be used creating anonymous types than concretes, but well⦠)
>>
>> in any case, it seems to be working for me.
>>
>> Now, about the useâ¦
>>
>> doing this:
>>
>> p := Position new.
>> p v1 at: 1 put: 42.0.
>> p v1 at: 1. âwill print 0.0"
>>
>> why? because it works making a copy (maybe it should work passing a segment, as nested structs work, but this is how it works now).
>>
>> What should work (at doesnât) in this case is this:
>>
>> v := Vector3 new.
>> p := Position new.
>> v at: 1 put: 42.0.
>> p v1: v.
>> p v1 at: 1. âwill print 42.0"
>>
>> it does not work because I made a mistake in field generation that I already fixed⦠so you will need to update UFFI (and regenerate field accessors) ;)
>>
>> also⦠I will provide a fix to make first case work⦠just later because now Iâm going to my french lessons :)
>>
>> Esteban
>>
>> ps: for future reference, a description of: install this, run that, is a lot easier to understand the problem (is a case of âshow me the code!â) :P
>>
>>
>>
>>
>> >
>> > cheers -ben
>> >
>> >>
>> >>
>> >> On 06/07/2016 17:55, Merwan Ouddane wrote:
>> >>
>> >> Another test:
>> >> I replaced double by integer, for visibility...
>> >> typedef struct vec3 {
>> >> int data[3];
>> >> } vec3;
>> >>
>> >> add a second vec3 to position:
>> >>
>> >> typedef struct position {
>> >> int i;
>> >> vec3 vec;
>> >> vec3 vec2;
>> >> } position;
>> >>
>> >> Now in pharo:
>> >> Position >> fieldsDesc
>> >> "self rebuildFieldAccessors"
>> >> ^ #(
>> >> int i;
>> >> Vec3 vec;
>> >> Vec3 vec2;
>> >> )
>> >>
>> >> The size returned for each stucture is 16 instead of 12 that because of the
>> >> "8 byte alignment"
>> >>
>> >> Meaning that the "position" structure is corrupted.
>> >>
>> >> With this function:
>> >>
>> >>
>> >> extern "C" void DLL_EXPORT fillStruct(position *position)
>> >> {
>> >> position -> i = 19;
>> >> (position -> vec).data[0] = 1;
>> >> (position -> vec).data[1] = 2;
>> >> (position -> vec).data[2] = 3;
>> >> (position -> vec2).data[0] = 1;
>> >> (position -> vec2).data[1] = 2;
>> >> (position -> vec2).data[2] = 3;
>> >> }
>> >>
>> >> We will get:
>> >> position i == 19
>> >> position vec at: 1 == 1
>> >> position vec2 at: 1 == 2
>> >>
>> >>
>> >> On Tue, Jul 5, 2016 at 3:12 PM, Ronie Salgado <roniesalg(a)gmail.com <mailto:roniesalg@gmail.com>> wrote:
>> >>>
>> >>> I compiled the DLL using Visual Studio 2015 Community Edition. Later I
>> >>> will check with mingw.
>> >>>
>> >>> 2016-07-05 14:58 GMT+02:00 Merwan Ouddane <merwanouddane(a)gmail.com <mailto:merwanouddane@gmail.com>>:
>> >>>>
>> >>>> Using codeblocks, mine are:
>> >>>>
>> >>>> mingw32-g++.exe -m32 -DBUILD_DLL -c main.cpp -o obj\Release\main.o
>> >>>> mingw32-g++.exe -shared -Wl,--output-def=bin\Release\libTest.def
>> >>>> -Wl,--out-implib=bin\Release\libTest.a -Wl,--dll obj\Release\main.o -o
>> >>>> bin\Release\Test.dll -s -m32
>> >>>>
>> >>>>
>> >>>> On Tue, Jul 5, 2016 at 2:52 PM, Merwan Ouddane <merwanouddane(a)gmail.com <mailto:merwanouddane@gmail.com>>
>> >>>> wrote:
>> >>>>>
>> >>>>> I am not moving from another plateform :/
>> >>>>>
>> >>>>> I tried it in pharo 6 and I it didn't work either.
>> >>>>>
>> >>>>> It could be my dll. What is your compilation line for the dll ?
>> >>>>>
>> >>>>> Thanks you,
>> >>>>> Merwan
>> >>>>>
>> >>>>> On Tue, Jul 5, 2016 at 2:14 PM, Ronie Salgado <roniesalg(a)gmail.com <mailto:roniesalg@gmail.com>>
>> >>>>> wrote:
>> >>>>>>
>> >>>>>> Hi Merwan,
>> >>>>>>
>> >>>>>> I tested this on Pharo 6 and it is working in Windows. However, in 32
>> >>>>>> bits Window doubles have an 8 byte alignment, unlike Linux where they have a
>> >>>>>> 4 byte alignment.
>> >>>>>>
>> >>>>>> Can you try doing the following before performing the ffi call in
>> >>>>>> Windows, if you are moving an image from Linux or OS X:
>> >>>>>>
>> >>>>>> Vec3 rebuildFieldAccessors.
>> >>>>>> Position rebuildFieldAccessors.
>> >>>>>>
>> >>>>>> Best regards,
>> >>>>>> Ronie
>> >>>>>>
>> >>>>>> 2016-07-05 11:11 GMT+02:00 Merwan Ouddane <merwanouddane(a)gmail.com <mailto:merwanouddane@gmail.com>>:
>> >>>>>>>
>> >>>>>>> Hi,
>> >>>>>>>
>> >>>>>>> I have an issue whith nested structures.
>> >>>>>>>
>> >>>>>>> I made some "dummy" structures in c:
>> >>>>>>>
>> >>>>>>>
>> >>>>>>> typedef struct vec3 {
>> >>>>>>> double data[3];
>> >>>>>>> } vec3;
>> >>>>>>>
>> >>>>>>> typedef struct position {
>> >>>>>>> int i;
>> >>>>>>> vec3 vec;
>> >>>>>>> } position;
>> >>>>>>>
>> >>>>>>> And a "dummy" function to fill it:
>> >>>>>>> void fillStruct(position *position)
>> >>>>>>> {
>> >>>>>>> position -> i = 19;
>> >>>>>>> (position -> vec).data[0] = 1;
>> >>>>>>> (position -> vec).data[1] = 2;
>> >>>>>>> (position -> vec).data[2] = 3;
>> >>>>>>> }
>> >>>>>>>
>> >>>>>>> But I can't make the nested structure work.
>> >>>>>>> The "i" is correctly set to 19 but I have values that doesn't make any
>> >>>>>>> sense in the vec3 structure.
>> >>>>>>>
>> >>>>>>> In Pharo
>> >>>>>>> I declared the Double3 type for the array inside Vec3:
>> >>>>>>> Double3 := FFITypeArray ofType: 'double' size: 3
>> >>>>>>>
>> >>>>>>> Vec3>>fieldsDesc
>> >>>>>>> ^ #(
>> >>>>>>> Double3 v;
>> >>>>>>> )
>> >>>>>>>
>> >>>>>>> And the position:
>> >>>>>>> Position>>fieldsDesc
>> >>>>>>> ^ #(
>> >>>>>>> int i;
>> >>>>>>> Vec3 vec;
>> >>>>>>> )
>> >>>>>>>
>> >>>>>>> The ffi call:
>> >>>>>>> ^ self ffiCall: #(void fillStruct(Position *position)) module:
>> >>>>>>> 'Test.dll'
>> >>>>>>>
>> >>>>>>> Sorry for the long / messy mail :p
>> >>>>>>>
>> >>>>>>> Any clues ?
>> >>>>>>>
>> >>>>>>> Cheers,
>> >>>>>>> Merwan
>> >>>>>>
>> >>>>>>
>> >>>>>
>> >>>>
>> >>>
>> >>
>> >>
>> >
>>
>>
>>
>
>
July 8, 2016
Re: [Pharo-users] [UFFI] Using a nested structure
by Merwan Ouddane
Sorry not unsigned longs but enumerations
On Fri, Jul 8, 2016 at 10:09 AM, Esteban Lorenzano <estebanlm(a)gmail.com>
wrote:
> how do you declare this?
>
> On 08 Jul 2016, at 10:01, Merwan Ouddane <merwanouddane(a)gmail.com> wrote:
>
> I spoke too fast ^^'
>
> struct Test {
> void * ptr;
> insigned long i;
> insigned long j;
> }
>
> Real size is 12, UFFI counts 24
>
> Merwan
>
> Le 7 juil. 2016 10:02, "Merwan Ouddane" <merwanouddane(a)gmail.com> a
> écrit :
>
>> Now it is working, thank you :)
>>
>> On Thu, Jul 7, 2016 at 8:42 AM, Esteban Lorenzano <estebanlm(a)gmail.com>
>> wrote:
>>
>>> Hi,
>>>
>>> > On 07 Jul 2016, at 01:54, Ben Coman <btc(a)openInWorld.com
>>> <btc(a)openinworld.com>> wrote:
>>> >
>>> > On Thu, Jul 7, 2016 at 12:58 AM, Merwan Ouddane <
>>> merwanouddane(a)gmail.com> wrote:
>>> >> PS: for the first example, the alignment is not respected, the vec3
>>> >> structure is starting at 9 but uffi is fetching it at 5
>>> >
>>> > Hi Esteban,
>>> >
>>> > Is it possible to get a feature or a recipe to output the sizeof or
>>> > offset of fields in types as understood by the Image, and the same
>>> > from a C side - that could be used as the standard first step in
>>> > troubleshooting these kinds of issues ?
>>>
>>> FFIExternalType class>>sizeOf: ?
>>>
>>> but that does not works for complex type sizes (like FFIExternalArray).
>>>
>>> I donât know what the problem is here, because in my test (attached) it
>>> seems to be working fine.
>>> maybe problem is on how the Vec3 array is created, it should be
>>> something like this:
>>>
>>> Vec3 class>>iinitialize
>>> self
>>> type: (FFIExternalType resolveType: 'double')
>>> size: 3
>>>
>>> (is like that because FFITypeArray is more designed to be used creating
>>> anonymous types than concretes, but well⦠)
>>>
>>> in any case, it seems to be working for me.
>>>
>>> Now, about the useâ¦
>>>
>>> doing this:
>>>
>>> p := Position new.
>>> p v1 at: 1 put: 42.0.
>>> p v1 at: 1. âwill print 0.0"
>>>
>>> why? because it works making a copy (maybe it should work passing a
>>> segment, as nested structs work, but this is how it works now).
>>>
>>> What should work (at doesnât) in this case is this:
>>>
>>> v := Vector3 new.
>>> p := Position new.
>>> v at: 1 put: 42.0.
>>> p v1: v.
>>> p v1 at: 1. âwill print 42.0"
>>>
>>> it does not work because I made a mistake in field generation that I
>>> already fixed⦠so you will need to update UFFI (and regenerate field
>>> accessors) ;)
>>>
>>> also⦠I will provide a fix to make first case work⦠just later because
>>> now Iâm going to my french lessons :)
>>>
>>> Esteban
>>>
>>> ps: for future reference, a description of: install this, run that, is a
>>> lot easier to understand the problem (is a case of âshow me the code!â) :P
>>>
>>>
>>>
>>>
>>> >
>>> > cheers -ben
>>> >
>>> >>
>>> >>
>>> >> On 06/07/2016 17:55, Merwan Ouddane wrote:
>>> >>
>>> >> Another test:
>>> >> I replaced double by integer, for visibility...
>>> >> typedef struct vec3 {
>>> >> int data[3];
>>> >> } vec3;
>>> >>
>>> >> add a second vec3 to position:
>>> >>
>>> >> typedef struct position {
>>> >> int i;
>>> >> vec3 vec;
>>> >> vec3 vec2;
>>> >> } position;
>>> >>
>>> >> Now in pharo:
>>> >> Position >> fieldsDesc
>>> >> "self rebuildFieldAccessors"
>>> >> ^ #(
>>> >> int i;
>>> >> Vec3 vec;
>>> >> Vec3 vec2;
>>> >> )
>>> >>
>>> >> The size returned for each stucture is 16 instead of 12 that because
>>> of the
>>> >> "8 byte alignment"
>>> >>
>>> >> Meaning that the "position" structure is corrupted.
>>> >>
>>> >> With this function:
>>> >>
>>> >>
>>> >> extern "C" void DLL_EXPORT fillStruct(position *position)
>>> >> {
>>> >> position -> i = 19;
>>> >> (position -> vec).data[0] = 1;
>>> >> (position -> vec).data[1] = 2;
>>> >> (position -> vec).data[2] = 3;
>>> >> (position -> vec2).data[0] = 1;
>>> >> (position -> vec2).data[1] = 2;
>>> >> (position -> vec2).data[2] = 3;
>>> >> }
>>> >>
>>> >> We will get:
>>> >> position i == 19
>>> >> position vec at: 1 == 1
>>> >> position vec2 at: 1 == 2
>>> >>
>>> >>
>>> >> On Tue, Jul 5, 2016 at 3:12 PM, Ronie Salgado <roniesalg(a)gmail.com>
>>> wrote:
>>> >>>
>>> >>> I compiled the DLL using Visual Studio 2015 Community Edition. Later
>>> I
>>> >>> will check with mingw.
>>> >>>
>>> >>> 2016-07-05 14:58 GMT+02:00 Merwan Ouddane <merwanouddane(a)gmail.com>:
>>> >>>>
>>> >>>> Using codeblocks, mine are:
>>> >>>>
>>> >>>> mingw32-g++.exe -m32 -DBUILD_DLL -c main.cpp -o obj\Release\main.o
>>> >>>> mingw32-g++.exe -shared -Wl,--output-def=bin\Release\libTest.def
>>> >>>> -Wl,--out-implib=bin\Release\libTest.a -Wl,--dll
>>> obj\Release\main.o -o
>>> >>>> bin\Release\Test.dll -s -m32
>>> >>>>
>>> >>>>
>>> >>>> On Tue, Jul 5, 2016 at 2:52 PM, Merwan Ouddane <
>>> merwanouddane(a)gmail.com>
>>> >>>> wrote:
>>> >>>>>
>>> >>>>> I am not moving from another plateform :/
>>> >>>>>
>>> >>>>> I tried it in pharo 6 and I it didn't work either.
>>> >>>>>
>>> >>>>> It could be my dll. What is your compilation line for the dll ?
>>> >>>>>
>>> >>>>> Thanks you,
>>> >>>>> Merwan
>>> >>>>>
>>> >>>>> On Tue, Jul 5, 2016 at 2:14 PM, Ronie Salgado <roniesalg(a)gmail.com
>>> >
>>> >>>>> wrote:
>>> >>>>>>
>>> >>>>>> Hi Merwan,
>>> >>>>>>
>>> >>>>>> I tested this on Pharo 6 and it is working in Windows. However,
>>> in 32
>>> >>>>>> bits Window doubles have an 8 byte alignment, unlike Linux where
>>> they have a
>>> >>>>>> 4 byte alignment.
>>> >>>>>>
>>> >>>>>> Can you try doing the following before performing the ffi call in
>>> >>>>>> Windows, if you are moving an image from Linux or OS X:
>>> >>>>>>
>>> >>>>>> Vec3 rebuildFieldAccessors.
>>> >>>>>> Position rebuildFieldAccessors.
>>> >>>>>>
>>> >>>>>> Best regards,
>>> >>>>>> Ronie
>>> >>>>>>
>>> >>>>>> 2016-07-05 11:11 GMT+02:00 Merwan Ouddane <
>>> merwanouddane(a)gmail.com>:
>>> >>>>>>>
>>> >>>>>>> Hi,
>>> >>>>>>>
>>> >>>>>>> I have an issue whith nested structures.
>>> >>>>>>>
>>> >>>>>>> I made some "dummy" structures in c:
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>> typedef struct vec3 {
>>> >>>>>>> double data[3];
>>> >>>>>>> } vec3;
>>> >>>>>>>
>>> >>>>>>> typedef struct position {
>>> >>>>>>> int i;
>>> >>>>>>> vec3 vec;
>>> >>>>>>> } position;
>>> >>>>>>>
>>> >>>>>>> And a "dummy" function to fill it:
>>> >>>>>>> void fillStruct(position *position)
>>> >>>>>>> {
>>> >>>>>>> position -> i = 19;
>>> >>>>>>> (position -> vec).data[0] = 1;
>>> >>>>>>> (position -> vec).data[1] = 2;
>>> >>>>>>> (position -> vec).data[2] = 3;
>>> >>>>>>> }
>>> >>>>>>>
>>> >>>>>>> But I can't make the nested structure work.
>>> >>>>>>> The "i" is correctly set to 19 but I have values that doesn't
>>> make any
>>> >>>>>>> sense in the vec3 structure.
>>> >>>>>>>
>>> >>>>>>> In Pharo
>>> >>>>>>> I declared the Double3 type for the array inside Vec3:
>>> >>>>>>> Double3 := FFITypeArray ofType: 'double' size: 3
>>> >>>>>>>
>>> >>>>>>> Vec3>>fieldsDesc
>>> >>>>>>> ^ #(
>>> >>>>>>> Double3 v;
>>> >>>>>>> )
>>> >>>>>>>
>>> >>>>>>> And the position:
>>> >>>>>>> Position>>fieldsDesc
>>> >>>>>>> ^ #(
>>> >>>>>>> int i;
>>> >>>>>>> Vec3 vec;
>>> >>>>>>> )
>>> >>>>>>>
>>> >>>>>>> The ffi call:
>>> >>>>>>> ^ self ffiCall: #(void fillStruct(Position *position)) module:
>>> >>>>>>> 'Test.dll'
>>> >>>>>>>
>>> >>>>>>> Sorry for the long / messy mail :p
>>> >>>>>>>
>>> >>>>>>> Any clues ?
>>> >>>>>>>
>>> >>>>>>> Cheers,
>>> >>>>>>> Merwan
>>> >>>>>>
>>> >>>>>>
>>> >>>>>
>>> >>>>
>>> >>>
>>> >>
>>> >>
>>> >
>>>
>>>
>>>
>>
>
July 8, 2016
Spec Tutorial First chapter
by stepharo
Hi
Johan Fabry is writing a great tutorial (and this is cool to see all the
material I gathered or wrote with him in the past)
to take such great form.
I attached the first chapter. I will post the chapter one by one once I
review them (so far I have nothing to do - great feeling).
Well done Johan!
Stef
July 8, 2016
Re: [Pharo-users] Database band reports...
by Ben Coman
On Fri, Jul 8, 2016 at 5:45 PM, stepharo <stepharo(a)free.fr> wrote:
> Hi patrick
>
> What is a band report?
http://webhelp.evisions.com/HelpFiles/Argos/4.2/en/Content/10101001.html
Sorry Patrick. Pharo has such a GUI report generator. But Artefact
seems to provide similar features via code...
https://ci.inria.fr/pharo-contribution/view/Books/job/EnterprisePharoBook/l…
cheers -ben
>
> Did you check Artefact because you can generate pdf with Artefact.
>
> Stef
>
>
>
>> Hi,
>>
>> My previous message stayed without responses, so I published it agin...
>> I'm
>> looking for a database band report component. The goal is to build quickly
>> a
>> PDF report from SQL requests. An exemple is Lazreport, this is a tutorial
>> <http://wiki.lazarus.freepascal.org/LazReport_Tutorial> .
>>
>>
>>
>> --
>> View this message in context:
>> http://forum.world.st/Database-band-reports-tp4905523.html
>> Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.
>>
>>
>
>
July 8, 2016