=head1 TITLE library/sdl.imc - PIR interface to SDL =head1 SYNOPSIS .include "library/sdl.imc" # _main is the entry point of SDL apps .sub _main .local pmc screen .local pmc events # init SDL _SDL_Init( SDL_INIT_VIDEO ) # set the videomode screen = _SDL_SetVideoMode( 320, 420, 0, SDL_SWSURFACE ) # .. create your own event entries ... events = _create_events() # start the event loop _SDL_loop( events ) # shut SDL down _SDL_Quit() .pcc_begin_return .return 0 .pcc_end_return .end =head1 DESCRIPTION This wrapper provides access to the SDL library. Please also refer to the SDL documentation for more information about the functions presented here. =head1 FUNCTIONS This library provides the following functions: =over 4 =cut # this is where the execution starts .sub _init_crt _init() # call the SDL main function _main() end .end .include "library/sdl_types.imc" .include "library/sdl_constants.imc" .include "library/sdl_image.imc" .include "library/dumper.imc" .sub _init .include "library/sdl.pasm" _init_SDL_Image() .pcc_begin_return .pcc_end_return .end .const int SDL_INIT_TIMER = 0x00000001 .const int SDL_INIT_AUDIO = 0x00000010 .const int SDL_INIT_VIDEO = 0x00000020 .const int SDL_INIT_CDROM = 0x00000100 .const int SDL_INIT_JOYSTICK = 0x00000200 # Don't catch fatal signals .const int SDL_INIT_NOPARACHUTE = 0x00100000 # Not supported on all OS's .const int SDL_INIT_EVENTTHREAD = 0x01000000 .const int SDL_INIT_EVERYTHING = 0x0000FFFF =item _SDL_Init( flags ) Initializes the SDL library. =over 4 =item flags you can XOR one or more of the following constants to initialize the specific SDL subsystems: SDL_INIT_TIMER, SDL_INIT_AUDIO, SDL_INIT_VIDEO, SDL_INIT_CDROM, SDL_INIT_JOYSTICK, SDL_INIT_NOPARACHUTE, SDL_INIT_EVENTTHREAD, SDL_INIT_EVERYTHING =back Please refer to the SDL documentation for more information about the meanings of the flags. =cut .sub _SDL_Init .param int mask .local pmc nci pushp nci nci = global "SDL::Init" .pcc_begin prototyped .arg mask .nci_call nci .result mask .pcc_end popp nci .pcc_begin_return .return mask .pcc_end_return .end .const int SDL_SWSURFACE = 0x00000000 .const int SDL_HWSURFACE = 0x00000001 .const int SDL_ASYNCBLIT = 0x00000004 # Available for SDL_SetVideoMode() .const int SDL_ANYFORMAT = 0x10000000 .const int SDL_HWPALETTE = 0x20000000 .const int SDL_DOUBLEBUF = 0x40000000 .const int SDL_FULLSCREEN = 0x80000000 .const int SDL_OPENGL = 0x00000002 .const int SDL_OPENGLBLIT = 0x0000000A .const int SDL_RESIZABLE = 0x00000010 .const int SDL_NOFRAME = 0x00000020 # Used internally (read-only) .const int SDL_HWACCEL = 0x00000100 .const int SDL_SRCCOLORKEY = 0x00001000 .const int SDL_RLEACCELOK = 0x00002000 .const int SDL_RLEACCEL = 0x00004000 .const int SDL_SRCALPHA = 0x00010000 .const int SDL_PREALLOC = 0x01000000 =item _SDL_SetVideMode( width, height, bpp, flags ) Sets the video mode. You can specifiy a bpp of 0, which will use your desktop's current bit depth. The most commonly used flags are: =over 4 =item SDL_SWSURFACE Surface is in system memory =item SDL_HWSURFACE Surface is in video memory =item SDL_ASYNCBLIT Use asynchronous blits if possible =item SDL_ANYFORMAT Allow any video depth/pixel-format =item SDL_DOUBLEBUF Set up double-buffered video mode =item SDL_FULLSCREEN Surface is a full screen display =back =cut .sub _SDL_SetVideoMode .param int width .param int height .param int bpp .param int flags .local pmc screen_settings .local object screen new screen_settings, .PerlHash set screen_settings['width'], width set screen_settings['height'], height set screen_settings['bpp'], bpp set screen_settings['flags'], flags screen = _new_SDL_Screen( screen_settings ) global "MP_screen" = screen .pcc_begin_return .return screen .pcc_end_return .end =item _SDL_UpdateRect( screen, x, y, w, h ) Update the specified screen region. =cut .sub _SDL_UpdateRect .param pmc screen .param int x .param int y .param int w .param int h .local pmc nci .local pmc rect .local int ret pushp nci pushp rect nci = global "SDL::UpdateRect" new rect, .PerlHash set rect["x"], x set rect["y"], y set rect["w"], w set rect["h"], h .pcc_begin prototyped .arg screen .arg rect .nci_call nci .result ret .pcc_end popp rect popp nci .pcc_begin_return .return ret .pcc_end_return .end =item _SDL_FillRect( surface, rect, color ) Fill the specified region on the specified surface with the specified color. =cut .sub _SDL_FillRect .param pmc surface .param pmc rect .param int color .local pmc nci saveall nci = global "SDL::FillRect" .pcc_begin prototyped .arg surface .arg rect .arg color .nci_call nci .pcc_end restoreall .pcc_begin_return .pcc_end_return .end =item rect = _SDL_Rect( x, y, w, h ) Create an SDL_Rect struct and init it with the specified members. =cut .sub _SDL_Rect .param int x .param int y .param int w .param int h .local pmc ret ret = _new_SDL_Rect() set ret["width"], w set ret["height"], h set ret["x"], x set ret["y"], y .pcc_begin_return .return ret .pcc_end_return .end .sub _SDL_Quit .local pmc nci saveall nci = global "SDL::Quit" .pcc_begin prototyped .nci_call nci .pcc_end restoreall .pcc_begin_return .pcc_end_return .end =head1 AUTHOR Written and maintained by chromatic, Echromatic at wgz dot orgE, with help from Jens Rieks. Please send patches and suggestions to the Perl 6 Internals mailing list. =head1 COPYRIGHT Copyright (c) 2004, The Perl Foundation. =cut