On Thu, May 7, 2015 at 1:06 AM, Nicolai Hess <nicolaih...@web.de> wrote:

>
>
> 2015-05-06 22:47 GMT+02:00 Henrik Sperre Johansen <
> henrik.s.johan...@veloxit.no>:
>
>> A few easily fixed Type/pointers to Types mixups, and a slipup where two
>> different classes are confused for the same aside, the real show stopper,
>> if I haven't missed something entirely, is that the struct parser/NB in
>> general does not handle const sized arrays*, which is used in a few of the
>> required structs.
>>
>> Extending the parser should be relatively straight forward, along the
>> lines of adding
>> stream peek: #'[' ifTrue: [stream next.
>>    type := SizedExternalArrayType type: type size: stream next.
>>    stream next = #']' ifFalse: [self error: 'Missing closing bracket for
>> ', type printString]]
>> to NBExtenralStructureFields >> #parseFields:... after the name is read.
>>
>> Coding SizedExternalArrayType is a bit more work though...
>>
>> Cheers,
>> Henry
>>
>>
>> *The end goal would be to be able to generate accessors/read/write for a
>> simple test-struct such as
>> #fieldsDesc
>> ^#(
>>       char   ip[MyClassVar +2];
>> )
>>
>
> Yes, a parser for this would be great.
>
> I tried it with a little hack
>
> NBExternalStructure subclass: #Char_260 ...
>
> Char_260 class>>#fieldDesc
> ^ #(char data)
>
> Char_260 class>>instanceSize
> ^ 260
>
> You need another accessor for accessing the data, otherwise you'll only
> get the first char. AND I don't know how
> the external memory is handle, probably it is never freed :)
>
> Now a complete example (attached code) call it with
> GetMacWin32 getMacAddress
>


Code loads fine on my 3.0

But hiccup on:

resolveType: aTypeName
" a type name could be
 - a class variable name
- a class name
- a type name
- a type name, followed by arbitrary number pointer chars - $*"

| name newName resolver binding ptrArity |
 newName := aTypeName.
ptrArity := 0.
"resolve aliases and pointers"
[
name := newName trimRight.     <<<--------------- HERE - as newName is a
subclass of NBExternalStructure, so no trimRight
newName := self aliasForType: name.
newName last = $* ifTrue: [
ptrArity := ptrArity + 1.
newName := newName allButLast ].
name = newName ] whileFalse.

I changed to name := newName asString trimRight.

Call worked then but output gives this:

GetMacWin32 getMacAddress 'BYTE_8 (
data: $¼  <-- some weird string here
)'

Also, I wonder why you call the primGet... twice

getMacAddressOf: iInterface
| ptr ptr2 nul ret |
ptr := NativeBoost allocate: 4.
nul := NativeBoost allocate: 0.
ptr nbUInt32AtOffset: 0 put: 0.
ret := self primGetAdaptersInfo: nul length: ptr.
ret = 111 "ERROR_BUFFER_OVERFLOW"
ifTrue: [
| size |
size := ptr nbUInt32AtOffset: 0.
ptr2 := NativeBoost allocate: size.
ret := self primGetAdaptersInfo: ptr2 length: ptr.
ret = 0 "NO_ERROR"
ifTrue: [
| pip numberOfInterfaces|
   numberOfInterfaces := size / IpAdapterInfo instanceSize.
   (iInterface between:1 and: numberOfInterfaces)  ifFalse:[ ^ nil].
pip := (NBExternalArray ofType: IpAdapterInfo) onAddress: ptr2 size:
numberOfInterfaces.
^ (pip at:iInterface ) Address asString]].
^ nil

Phil





>
>
>>
>> On Wed, May 6, 2015 at 5:28 PM, Esteban Lorenzano <esteba...@gmail.com>
>> wrote:
>>
>>>
>>> On 06 May 2015, at 17:03, Nicolai Hess <nicolaih...@web.de> wrote:
>>>
>>>
>>>
>>> 2015-05-06 16:40 GMT+02:00 Esteban Lorenzano <esteba...@gmail.com>:
>>>
>>>>
>>>> On 06 May 2015, at 12:10, p...@highoctane.be wrote:
>>>>
>>>> I've loaded your package.
>>>>
>>>> A prerequisite is to load OS-Window to make it work.
>>>>
>>>>
>>>> why?
>>>> in any case, oswindow is already included in pharo4
>>>>
>>>
>>> OS-Windows (by TorstenBergmann)
>>>
>>> not
>>> OSWindow  :)
>>>
>>>
>>> ahhh. Name clash :)
>>>
>>>
>>> It is needed for the shared pool WinTypes,
>>> but without OS-Window, he can use NBWinTypes instead.
>>>
>>>
>>>
>>>>
>>>> Esteban
>>>>
>>>>
>>>> I've got the DLL call working nicely and the nativeboost with the
>>>> structure freezing.
>>>>
>>>> Now, we should all have a look at:
>>>>
>>>> https://github.com/ronsaldo/bullet-pharo
>>>>
>>>> and
>>>>
>>>> https://github.com/ronsaldo/swig
>>>>
>>>> because it looks like the way to go to wrap libraries...
>>>>
>>>> Ronie, I know you modified swig for generating Pharo code;
>>>>
>>>> Is cloning your swig repo the way to go ?
>>>>
>>>>
>>>> Phil
>>>>
>>>>
>>>>
>>>>
>>>> On Wed, May 6, 2015 at 10:39 AM, Usman Bhatti <usman.bha...@gmail.com>
>>>> wrote:
>>>>
>>>>> Hi Nicolai,
>>>>>
>>>>> Here is my package that defines the nativeboost call and associated C
>>>>> structs.
>>>>> The external C struct is self referencing and hence sometimes I get
>>>>> infinite recursion when trying to change field descriptions. That is the
>>>>> reason why the automatically generated accessors are absent (although I 
>>>>> had
>>>>> them in an earlier version).
>>>>>
>>>>> Attached also the DLL referenced in the code.
>>>>>
>>>>>
>>>>>
>>>>> On Wed, May 6, 2015 at 9:58 AM, Nicolai Hess <nicolaih...@web.de>
>>>>> wrote:
>>>>>
>>>>>>
>>>>>>
>>>>>> 2015-05-06 9:53 GMT+02:00 Usman Bhatti <usman.bha...@gmail.com>:
>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Tue, May 5, 2015 at 7:34 PM, p...@highoctane.be <
>>>>>>> p...@highoctane.be> wrote:
>>>>>>>
>>>>>>>>
>>>>>>>> On Tue, May 5, 2015 at 6:28 PM, Usman Bhatti <
>>>>>>>> usman.bha...@gmail.com> wrote:
>>>>>>>>
>>>>>>>>> I succeeded to do it by encapsulating the C routine as a DLL and
>>>>>>>>> doing an FFI call from my image (as suggested by Guille).
>>>>>>>>>
>>>>>>>>
>>>>>>>> At least there was a way!
>>>>>>>>
>>>>>>>
>>>>>>> Exactly :)
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>> Looks like this is the most controlled|debuggable way:
>>>>>>>>   - get it working with C code out of Pharo
>>>>>>>>   - make a bridge that can be used easily with FFI in a dll
>>>>>>>>   - use that from Pharo with proven FFI
>>>>>>>>
>>>>>>>> Would NativeBoost work with your dll? Should.
>>>>>>>>
>>>>>>>
>>>>>>> I have read a few resources about Nativeboost but I am still naive
>>>>>>> to know the difference between FFI and nativeboost. The FFI call I made 
>>>>>>> to
>>>>>>> invoke the DLL function looked similar to the nativeboost calls.
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> I also tried to perform the nativeboost call by creating my
>>>>>>>>> structures in Pharo. The function in Windows that can be used to 
>>>>>>>>> retrieve
>>>>>>>>> mac address in Windows: GetAdaptersInfo
>>>>>>>>> <https://msdn.microsoft.com/en-us/library/windows/desktop/aa365917%28v=vs.85%29.aspx>
>>>>>>>>>  that
>>>>>>>>> accepts a PIP_ADAPTER_INFO
>>>>>>>>> <https://msdn.microsoft.com/en-us/library/windows/desktop/aa366062(v=vs.85).aspx>
>>>>>>>>>  structure.
>>>>>>>>> I subclassed NBExternalStructure to define this struct and the other 
>>>>>>>>> used
>>>>>>>>> by it in the image but my NB call returned with 87 code (Invalid 
>>>>>>>>> parameter)
>>>>>>>>> and it was impossible to debug. However, I would like to make this 
>>>>>>>>> thing
>>>>>>>>> work to understand what went wrong.
>>>>>>>>>
>>>>>>>>
>>>>>>>> Has this something to do with 32|64 bit library complications?
>>>>>>>>
>>>>>>>
>>>>>>> Not exactly. For me, it was more related to the fact that I had to
>>>>>>> map a complex C struct in Pharo. Here is an excerpt of the definition 
>>>>>>> from
>>>>>>> MSDN:
>>>>>>>
>>>>>>> typedef struct _IP_ADAPTER_INFO {
>>>>>>>   struct _IP_ADAPTER_INFO  *Next;
>>>>>>>  ...
>>>>>>>   PIP_ADDR_STRING         CurrentIpAddress;
>>>>>>>           IP_ADDR_STRING          GatewayList;
>>>>>>> ...
>>>>>>> }
>>>>>>>
>>>>>>> So, I had to define three external structures (all names in
>>>>>>> capitals) and I did the effort but in the end I got an error code that I
>>>>>>> could not debug in the image. Hence, I gave up and opted to go in the
>>>>>>> native environment. But I would like someone knowledgable to have a 
>>>>>>> look at
>>>>>>> my nativeboost code  because the nativeboost approach is more simple
>>>>>>> (everything's in the image).
>>>>>>>
>>>>>>
>>>>>> I can have a look.
>>>>>>
>>>>>> btw. for what do you need the mac address?
>>>>>>
>>>>>>
>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> usman
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>> Phil
>>>>>>>>
>>>>>>>> With ProcessWrapper, I could not load the classes essential for
>>>>>>>> making the plugin work.
>>>>>>>>
>>>>>>>> HTH,
>>>>>>>>
>>>>>>>> Usman
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Mon, May 4, 2015 at 2:54 PM, Ben Coman <b...@openinworld.com>
>>>>>>>> wrote:
>>>>>>>> As a complete newb to VM building I found this fairly straight
>>>>>>>> forward (on a Mac btw).
>>>>>>>> https://github.com/pharo-project/pharo-vm
>>>>>>>> cheers -ben
>>>>>>>>
>>>>>>>> On Mon, May 4, 2015 at 5:28 PM, Usman Bhatti <
>>>>>>>> usman.bha...@gmail.com> wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>> On Sun, May 3, 2015 at 4:22 PM, Pierce Ng <pie...@samadhiweb.com>
>>>>>>>> wrote:
>>>>>>>> On Sat, May 02, 2015 at 03:55:47PM +0200, Usman Bhatti wrote:
>>>>>>>> > 1/ OSProcess: I tried  (PipeableOSProcess command: 'ipconfig
>>>>>>>> /all') output.
>>>>>>>>
>>>>>>>> I have used http://www.smalltalkhub.com/#!/~hernan/ProcessWrapper
>>>>>>>> successfully
>>>>>>>> back when I was on Windows using some now-ancient version of Pharo.
>>>>>>>>
>>>>>>>> I had initially discarded the idea of using this project because it
>>>>>>>> required a plugin and the information of the plugin was outdated on
>>>>>>>> squeaksource. However, having evaluated superficially the complexity of
>>>>>>>> doing it with nativeboost (because too many external c struct involved 
>>>>>>>> in
>>>>>>>> the call), I would like to see if I am better off using this wrapper.
>>>>>>>>
>>>>>>>> I loaded it with:
>>>>>>>>
>>>>>>>> Gofer it
>>>>>>>>   url: 'http://www.smalltalkhub.com/mc/hernan/ProcessWrapper/main';
>>>>>>>>   package: 'ProcessWrapper-Core';
>>>>>>>>   package: 'ProcessWrapper-Plugin';
>>>>>>>>   package: 'ProcessWrapper-Tests';
>>>>>>>>   load.
>>>>>>>>
>>>>>>>> But the plugins wont load because it requires the
>>>>>>>> class SmartSyntaxInterpreterPlugin and apparently this file is a part 
>>>>>>>> of
>>>>>>>> the VMMaker. Is there any recent config for VMMaker in Pharo because 
>>>>>>>> this
>>>>>>>> one looks outdated:
>>>>>>>>
>>>>>>>> http://pharo.gemtalksystems.com/book/Virtual-Machine/Building/VMMakerTool/
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>>
>>>>>>>>> Pierce
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>
>


-- 
---
Philippe Back
Visible Performance Improvements
Mob: +32(0) 478 650 140 | Fax: +32 (0) 70 408 027
Mail:p...@highoctane.be | Web: http://philippeback.eu
Blog: http://philippeback.be | Twitter: @philippeback
Youtube: http://www.youtube.com/user/philippeback/videos

High Octane SPRL
rue cour Boisacq 101 | 1301 Bierges | Belgium

Pharo Consortium Member - http://consortium.pharo.org/
Featured on the Software Process and Measurement Cast -
http://spamcast.libsyn.com
Sparx Systems Enterprise Architect and Ability Engineering EADocX Value
Added Reseller

Reply via email to