1. Passing pointer to c array
- Posted by Irv Mullins <irv at ELLIJAY.COM> Jul 21, 1999
- 312 views
I need to create a null-terminated array of strings in Euphoria, and obtain a pointer to the array. In C it is: char *words[] = { "Apples", "Oranges", "Lemons", "Pineapple", NULL }; then the pointer words is passed to the listbox function.: newlistbox(words, coords, click-function) How do I do this in Euphoria? Thanks, Irv
2. Re: Passing pointer to c array
- Posted by "E. Allen Soard" <esp.software at EXCITE.COM> Jul 21, 1999
- 306 views
Irv, Hopefully noone will throw large, heavy, bladed objects at me if I'm wrong, but I believe that you can use 0 in place of null when passing to C functions. -Allen On Wed, 21 Jul 1999 12:09:49 -0400, Irv Mullins wrote: > I need to create a null-terminated array of strings in Euphoria, and obtain a > pointer to the array. > In C it is: > > char *words[] = { > "Apples", "Oranges", "Lemons", "Pineapple", NULL > }; > > then the pointer words is passed to the listbox function.: > newlistbox(words, coords, click-function) > > How do I do this in Euphoria? > Thanks, > > Irv What has the near functionality of a PDA at a tenth the cost? ...Give Up? The Game Boy DragonEagle's Gameboy Developement Page http://home.earthlink.net/~asoard/gameboy _______________________________________________________ Get your free, private email at http://mail.excite.com/
3. Re: Passing pointer to c array
- Posted by JJProg at CYBERBURY.NET Jul 21, 1999
- 302 views
EU>I need to create a null-terminated array of strings in Euphoria, and obtain EU>pointer to the array. EU>In C it is: EU>char *words[] = { EU> "Apples", "Oranges", "Lemons", "Pineapple", NULL EU> }; EU>then the pointer words is passed to the listbox function.: EU>newlistbox(words, coords, click-function) EU>How do I do this in Euphoria? EU>Thanks, EU>Irv Try: include machine.e atom apples, oranges, lemons, pineapple, array apples = allocate_string("Apples") oranges = allocate_string("Oranges") lemons = allocate_string("Lemons") pineapple = allocate_string("Pineapple") array = allocate(20) poke4(array,{apples,oranges,lemons,pineapple,0})
4. Re: Passing pointer to c array
- Posted by "Cuny, David" <David.Cuny at DSS.CA.GOV> Jul 21, 1999
- 311 views
Irv Mullins wrote: > I need to create a null-terminated array of strings in > Euphoria, and obtain a pointer to the array. WARNING: Untested Code Ahead! Note that the poke4() pokes all the addresses at once - pretty spiff! A similar trick could be done to gather the addresses if you knew how many there were (you could poke the count into the head, and advance the address past it, like a Pascal string), but it's probably not worth the effort. To allocate the string array, you could do this: function allocateStringArray( sequence s ) atom address -- allocate space for the array pointers, plus a null address = allot( length( s ) + 1 ) * 4 -- for each string in the sequence... for i = 1 to length( s ) do -- ... replace it with a pointer to itself s[i] = allocate_string( s[i] ) end for -- place an end of array marker s = append( s, 0 ) -- poke the addresses into the array. poke4( address, s ) return address end function Of course, you need to destroy the array after you've passed it to the function, or you'll just be gobbling up memory. procedure freeStringArray( atom address ) atom ptr, strPtr -- point to the beginning of the array ptr = address -- process until end of array while 1 do -- get the pointer from the array strPtr = peek4u( ptr ) -- end of array? if strPtr = 0 then exit end if -- free the pointer free( strPtr ) -- move to the next array element ptr += 4 end while -- free the array free( address ) end procedure Hope this helps! -- David Cuny
5. Re: Passing pointer to c array
- Posted by Irv Mullins <irv at ELLIJAY.COM> Jul 21, 1999
- 303 views
Thanks Dave, JJ, & Allen - I put together ideas from your replies to get the following awful simple routine, which works fine: (I know I should de-allocate the memory, I'll put it on the to-do list :) function string_array(sequence list) -- returns pointer to string array atom a sequence s s = {} for i = 1 to length(list) do s = append(s,allocate_string(list[i])) end for s = append(s,0) -- null terminator a = allocate(length(s) * 4) poke4(a,s) return a end function Now, on to the callbacks! Irv