Chromatic <[EMAIL PROTECTED]> wrote:
> Hi all,
> There are a couple of bugs, however. First, I had to add some C-type
> conversion code to classes/unmanagedstruct.pmc. It's almost certainly
> wrong, but without it, I wouldn't have gone as far.
enum_type_char was already there, uint8 is the same case. Fixed.
> ... This may be related
> to why it requires r 255, g 0, b 255 to draw a blue rectangle.
/Me thinks, that setting colors with the struct doesn't work. I've
change your sample to:
# blue_color = _new_SDL_Color( 255, 255, 255 )
.local int blue
.local int red
.local int green
blue = 255 << 0
red = 255 << 16
green = 255 << 8
Passing one of these colors works fine (SDL_FillRect takes an UInt32
color value, not a pointer to a struct). But it probably should use
SDL_MapRGB() to be endian safe.
> Second, my PIR is undoubtedly funky. Still, the results speak for
> themselves.
Some typos and returning from _init was missing - not too bad :)
> I've attached my patch to classes/unmanagedstruct.pmc and
> src/call_list.txt as well as the library files and my demo PIR.
> Enhancements and bug fixes welcome.
Applied with little fuzz.
> Be sure to run this in a directory containing "datatypes.pasm" or else
> fix it to find the copy with Parrot (I tried).
Such include files are searched in the current dir and in
runtime/parrot/include. If you aren't working inside parrot root,
setting a link helps (on OS that know, what a symlink is ;)
Below is the diff of the sample code (should that get checked in?)
leo
--- /home/lt/blue_rectangle.imc Sat Jan 31 15:18:02 2004
+++ blue_rectangle.imc Sat Jan 31 15:17:36 2004
@@ -10,6 +10,8 @@
.pcc_sub _init prototyped
.include "library/sdl.pasm"
_init_SDL_types()
+ .pcc_begin_return
+ .pcc_end_return
.end
.sub _MAIN
@@ -29,7 +31,6 @@
new_SDL_Rect = global "new_SDL_Rect"
.pcc_begin prototyped
- .arg 255
.arg 65535
.nci_call SDL_Init
.pcc_end
@@ -37,20 +38,26 @@
.pcc_begin prototyped
.arg 640
.arg 480
- .arg 16
+ .arg 0
.arg 0
.nci_call SetVideoMode
.result screen
.pcc_end
.local object blue_rect
- .local object blue_color
- .local Sub new_rect
- .local Sub new_color
- .local Sub update_rect
+ #.local object blue_color
blue_rect = _new_SDL_Rect()
- blue_color = _new_SDL_Color( 255, 0, 255 )
+ # blue_color = _new_SDL_Color( 255, 255, 255 )
+ .local int blue
+ .local int red
+ .local int green
+ blue = 255 << 0
+ red = 255 << 16
+ green = 255 << 8
+ print "blue = "
+ print blue
+ print "\n"
set blue_rect['w'], 100
set blue_rect['h'], 100
@@ -60,10 +67,13 @@
.pcc_begin prototyped
.arg screen
.arg blue_rect
- .arg blue_color
+ .arg blue
.nci_call SDL_FillRect
+ .local int ok
+ .result ok
.pcc_end
+ # update full screen (all 0 arguments)
.pcc_begin prototyped
.arg screen
.arg 0
@@ -73,8 +83,7 @@
.nci_call SDL_UpdateRect
.pcc_end
- set $I0, 2
- sleep $I0
+ sleep 2
.pcc_begin prototyped
.nci_call SDL_Quit