Trying workaround for directx forcing
[sdlgit/SDL_perl.git] / src / SDL.xs
index 56e793b..a84d7c0 100644 (file)
@@ -1,11 +1,31 @@
+//
 // SDL.xs
 //
-// SDL Perl by David J. Goehrig <dgoehrig@cpan.org>
+// Copyright (C) 2005 David J. Goehrig <dgoehrig@cpan.org>
+//
+// ------------------------------------------------------------------------------
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// 
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+//
+// ------------------------------------------------------------------------------
 //
-// Copyright (C) 2000,2001,2002,2003,2004 David J. Goehrig 
+// Please feel free to send questions, suggestions or improvements to:
+//
+//     David J. Goehrig
+//     dgoehrig@cpan.org
 //
-// This software is under the GNU Library General Public License (LGPL)
-// see the file COPYING for terms of use
 
 #include "EXTERN.h"
 #include "perl.h"
 
 #include <SDL.h>
 
+#ifdef HAVE_GL
+#include <gl.h>
+#endif
+
+#ifdef HAVE_GLU
+#include <glu.h>
+#endif
+
 #ifdef HAVE_SDL_IMAGE
 #include <SDL_image.h>
 #endif 
 void (*mix_music_finished_cv)();
 #endif
 
-#ifdef HAVE_GL
-#include <gl.h>
-#endif
-
-#ifdef HAVE_GLU
-#include <glu.h>
+#ifdef HAVE_SDL_SOUND
+#include <SDL_sound.h>
 #endif
 
 #ifdef HAVE_SDL_NET
 #include <SDL_net.h>
 #endif
 
-#ifdef HAVE_SDL_TTF
-#include <SDL_ttf.h>
-#define TEXT_SOLID     1
-#define TEXT_SHADED    2
-#define TEXT_BLENDED   4
-#define UTF8_SOLID     8
-#define UTF8_SHADED    16      
-#define UTF8_BLENDED   32
-#define UNICODE_SOLID  64
-#define UNICODE_SHADED 128
-#define UNICODE_BLENDED        256
-#endif
-
 #ifdef HAVE_SMPEG
 #include <smpeg/smpeg.h>
 #ifdef HAVE_SDL_MIXER
@@ -65,37 +76,49 @@ static int sdl_perl_use_smpeg_audio = 0;
 #include <SDL_imageFilter.h>
 #endif
 
+#ifdef HAVE_SDL_SVG
+#include <SDL_svg.h>
+#endif
+
+#ifdef HAVE_SDL_TTF
+#include <SDL_ttf.h>
+#endif
+
 #ifdef USE_THREADS
 #define HAVE_TLS_CONTEXT
 #endif
 
-#include "defines.h"
-
-#ifdef MACOSX
-#include <CoreServices/CoreServices.h>
-void CPSEnableForegroundOperation(ProcessSerialNumber* psn);
-void NSApplicationLoad();
-void SDL_macosx_init(void) {
-    Boolean sameProc;
-    ProcessSerialNumber myProc, frProc;
-    if (GetFrontProcess(&frProc) == noErr)
-        if (GetCurrentProcess(&myProc) == noErr)
-            if (SameProcess(&frProc, &myProc, &sameProc) == noErr && sameProc == 0) {
-                /*
-                NSLog(@"creating bad autorelease pool");
-                [[NSAutoreleasePool alloc] init];
-                */
-                NSApplicationLoad();
-                CPSEnableForegroundOperation(&myProc);
-            }
-}
-void SDL_macosx_quit(void) {
-}
-#endif // MACOSX
-
+/* For windows  */
+#ifndef SDL_PERL_DEFINES_H
+#define SDL_PERL_DEFINES_H
 
+#ifdef HAVE_TLS_CONTEXT
+PerlInterpreter *parent_perl = NULL;
+extern PerlInterpreter *parent_perl;
+#define GET_TLS_CONTEXT parent_perl =  PERL_GET_CONTEXT;
+#define ENTER_TLS_CONTEXT \
+        PerlInterpreter *current_perl = PERL_GET_CONTEXT; \
+               PERL_SET_CONTEXT(parent_perl); { \
+                                       PerlInterpreter *my_perl = parent_perl;
+#define LEAVE_TLS_CONTEXT \
+                                               } PERL_SET_CONTEXT(current_perl);
+#else
+#define GET_TLS_CONTEXT         /* TLS context not enabled */
+#define ENTER_TLS_CONTEXT       /* TLS context not enabled */
+#define LEAVE_TLS_CONTEXT       /* TLS context not enabled */
+#endif
 
+#endif
 
+int
+force_directx()
+{
+#if defined WIN32 || WINDOWS 
+       fprintf( stderr, "SDL Gamma is unsupported in Windows for windib. Forcing directx. \n" );
+       SDL_putenv("SDL_VIDEODRIVER=directx");
+#endif
+       return 1;
+}
 
 Uint32 
 sdl_perl_timer_callback ( Uint32 interval, void* param )
@@ -206,13 +229,15 @@ sdl_perl_music_finished_callback ( void )
 
 #endif
 
+#define INIT_NS_APPLICATION
+#define QUIT_NS_APPLICATION
+
+
 void
 sdl_perl_atexit (void)
 {
+       QUIT_NS_APPLICATION     
        SDL_Quit();
-#ifdef MACOSX    
-        SDL_macosx_quit();
-#endif
 }
 
 void boot_SDL();
@@ -228,19 +253,18 @@ MODULE = SDL_perl PACKAGE = SDL
 PROTOTYPES : DISABLE
 
 char *
-GetError ()
+geterror ()
        CODE:
                RETVAL = SDL_GetError();
        OUTPUT:
                RETVAL
 
 int
-Init ( flags )
+init ( flags )
        Uint32 flags
        CODE:
-#ifdef MACOSX    
-               SDL_macosx_init();
-#endif
+               INIT_NS_APPLICATION
+               force_directx();
                RETVAL = SDL_Init(flags);
 #ifdef HAVE_TLS_CONTEXT
                Perl_call_atexit(PERL_GET_CONTEXT, (void*)sdl_perl_atexit,0);
@@ -251,7 +275,7 @@ Init ( flags )
                RETVAL
 
 int
-InitSubSystem ( flags )
+init_subsystem ( flags )
        Uint32 flags
        CODE:
                RETVAL = SDL_InitSubSystem(flags);
@@ -259,22 +283,19 @@ InitSubSystem ( flags )
                RETVAL
 
 void
-QuitSubSystem ( flags )
+quit_subsystem ( flags )
        Uint32 flags
        CODE:
                SDL_QuitSubSystem(flags);
 
 void
-Quit ()
+quit ()
        CODE:
+               QUIT_NS_APPLICATION
                SDL_Quit();
-#ifdef MACOSX
-               SDL_macosx_quit();
-#endif
-
 
 int
-WasInit ( flags )
+was_init ( flags )
        Uint32 flags
        CODE:
                RETVAL = SDL_WasInit(flags);
@@ -282,7 +303,7 @@ WasInit ( flags )
                RETVAL
 
 void
-Delay ( ms )
+delay ( ms )
        int ms
        CODE:
                SDL_Delay(ms);
@@ -337,6 +358,103 @@ RemoveTimer ( id )
        OUTPUT:
                RETVAL
 
+SDL_RWops*
+RWFromFile ( file, mode )
+       char* file
+       char * mode
+       CODE:
+               RETVAL = SDL_RWFromFile(file,mode);
+       OUTPUT:
+               RETVAL
+
+SDL_RWops*
+RWFromFP ( fp, autoclose )
+       FILE* fp
+       int autoclose
+       CODE:
+               RETVAL = SDL_RWFromFP(fp,autoclose);
+       OUTPUT:
+               RETVAL
+
+SDL_RWops*
+RWFromMem ( mem, size )
+       char* mem
+       int size
+       CODE:
+               RETVAL = SDL_RWFromMem((void*)mem,size);
+       OUTPUT:
+               RETVAL
+
+SDL_RWops*
+RWFromConstMem ( mem, size )
+       const char* mem
+       int size
+       CODE:
+               RETVAL = SDL_RWFromConstMem((const void*)mem,size);
+       OUTPUT:
+               RETVAL
+
+SDL_RWops*
+AllocRW ()
+       CODE:
+               RETVAL = SDL_AllocRW();
+       OUTPUT:
+               RETVAL
+
+void
+FreeRW ( rw )
+       SDL_RWops* rw
+       CODE:
+               SDL_FreeRW(rw);
+
+int
+RWseek ( rw, off, whence )
+       SDL_RWops* rw
+       int off
+       int whence
+       CODE:
+               RETVAL = SDL_RWseek(rw,off,whence);
+       OUTPUT:
+               RETVAL
+
+int
+RWtell ( rw )
+       SDL_RWops* rw
+       CODE:
+               RETVAL = SDL_RWtell(rw);
+       OUTPUT:
+               RETVAL
+
+int
+RWread ( rw, mem, size, n )
+       SDL_RWops* rw
+       char* mem
+       int size
+       int n
+       CODE:
+               RETVAL = SDL_RWread(rw,mem,size,n);
+       OUTPUT:
+               RETVAL
+
+int
+RWwrite ( rw, mem, size, n )
+       SDL_RWops* rw
+       char* mem
+       int size
+       int n
+       CODE:
+               RETVAL = SDL_RWwrite(rw,mem,size,n);
+       OUTPUT:
+               RETVAL
+
+int
+RWclose ( rw )
+       SDL_RWops* rw
+       CODE:
+               RETVAL = SDL_RWclose(rw);
+       OUTPUT:
+               RETVAL
+
 int
 CDNumDrives ()
        CODE:
@@ -619,7 +737,7 @@ KeyEventUnicode ( e )
                RETVAL
 
 Uint8
-KeyEventScanCode ( e )
+key_scancode ( e )
        SDL_Event *e
        CODE:
                RETVAL = e->key.keysym.scancode;
@@ -667,7 +785,7 @@ MouseMotionYrel ( e )
                RETVAL
 
 Uint8
-MouseButtonState ( e )
+button_state ( e )
        SDL_Event *e
        CODE:
                RETVAL = e->button.state;
@@ -675,7 +793,7 @@ MouseButtonState ( e )
                RETVAL
 
 Uint8
-MouseButton ( e )
+button ( e )
        SDL_Event *e
        CODE:
                RETVAL = e->button.button;
@@ -683,7 +801,7 @@ MouseButton ( e )
                RETVAL
 
 Uint16
-MouseButtonX ( e )
+button_x ( e )
        SDL_Event *e
        CODE:
                RETVAL = e->button.x;
@@ -691,7 +809,7 @@ MouseButtonX ( e )
                RETVAL
 
 Uint16
-MouseButtonY ( e )
+button_y ( e )
        SDL_Event *e
        CODE:
                RETVAL = e->button.y;
@@ -735,29 +853,29 @@ SetModState ( state )
                SDL_SetModState(state);
 
 char *
-GetKeyName ( sym )
+get_key_name ( sym )
        int sym
        CODE:
                RETVAL = SDL_GetKeyName(sym);
        OUTPUT:
                RETVAL
 
+#ifdef HAVE_SDL_IMAGE
+
 SDL_Surface *
-CreateRGBSurface (flags, width, height, depth, Rmask, Gmask, Bmask, Amask )
-       Uint32 flags
-       int width
-       int height
-       int depth
-       Uint32 Rmask
-       Uint32 Gmask
-       Uint32 Bmask
-       Uint32 Amask
+IMG_Load ( filename )
+       char *filename
        CODE:
-               RETVAL = SDL_CreateRGBSurface ( flags, width, height,
-                               depth, Rmask, Gmask, Bmask, Amask );
-       OUTPUT: 
+               char* CLASS = "SDL::Surface";
+               RETVAL = IMG_Load(filename);
+       OUTPUT:
                RETVAL
 
+#endif
+
+=for comment
+
+Comment out for now as it does not compile
 
 SDL_Surface *
 CreateRGBSurfaceFrom (pixels, width, height, depth, pitch, Rmask, Gmask, Bmask, Amask )
@@ -780,18 +898,6 @@ CreateRGBSurfaceFrom (pixels, width, height, depth, pitch, Rmask, Gmask, Bmask,
        OUTPUT: 
                RETVAL
 
-#ifdef HAVE_SDL_IMAGE
-
-SDL_Surface *
-IMGLoad ( fname )
-       char *fname
-       CODE:
-               RETVAL = IMG_Load(fname);
-       OUTPUT:
-               RETVAL
-
-#endif
-
 SDL_Surface*
 SurfaceCopy ( surface )
        SDL_Surface *surface
@@ -963,6 +1069,12 @@ SurfacePixels ( surface )
        OUTPUT:
                RETVAL
 
+=cut
+
+=for comment
+
+Comment out for now as it does not compile
+
 SDL_Color*
 SurfacePixel ( surface, x, y, ... )
        SDL_Surface *surface
@@ -1056,6 +1168,7 @@ GetVideoSurface ()
        OUTPUT:
                RETVAL
 
+=cut
 
 HV *
 VideoInfo ()
@@ -1089,63 +1202,6 @@ VideoInfo ()
        OUTPUT:
                RETVAL
 
-SDL_Rect *
-NewRect ( x, y, w, h )
-       Sint16 x
-       Sint16 y
-       Uint16 w
-       Uint16 h
-       CODE:
-               RETVAL = (SDL_Rect *) safemalloc (sizeof(SDL_Rect));
-               RETVAL->x = x;
-               RETVAL->y = y;
-               RETVAL->w = w;
-               RETVAL->h = h;
-       OUTPUT:
-               RETVAL
-
-void
-FreeRect ( rect )
-       SDL_Rect *rect
-       CODE:
-               safefree(rect);
-
-Sint16
-RectX ( rect, ... )
-       SDL_Rect *rect
-       CODE:
-               if (items > 1 ) rect->x = SvIV(ST(1)); 
-               RETVAL = rect->x;
-       OUTPUT:
-               RETVAL
-
-Sint16
-RectY ( rect, ... )
-       SDL_Rect *rect
-       CODE:
-               if (items > 1 ) rect->y = SvIV(ST(1)); 
-               RETVAL = rect->y;
-       OUTPUT:
-               RETVAL
-
-Uint16
-RectW ( rect, ... )
-       SDL_Rect *rect
-       CODE:
-               if (items > 1 ) rect->w = SvIV(ST(1)); 
-               RETVAL = rect->w;
-       OUTPUT:
-               RETVAL
-
-Uint16
-RectH ( rect, ... )
-       SDL_Rect *rect
-       CODE:
-               if (items > 1 ) rect->h = SvIV(ST(1)); 
-               RETVAL = rect->h;
-       OUTPUT:
-               RETVAL
-
 AV*
 ListModes ( format, flags )
        Uint32 flags
@@ -1165,53 +1221,7 @@ ListModes ( format, flags )
                }
        OUTPUT:
                RETVAL
-
-
-SDL_Color *
-NewColor ( r, g, b )
-       Uint8 r
-       Uint8 g
-       Uint8 b
-       CODE:
-               RETVAL = (SDL_Color *) safemalloc(sizeof(SDL_Color));
-               RETVAL->r = r;
-               RETVAL->g = g;
-               RETVAL->b = b;
-       OUTPUT:
-               RETVAL
-
-Uint8
-ColorR ( color, ... )
-       SDL_Color *color
-       CODE:
-               if (items > 1 ) color->r = SvIV(ST(1)); 
-               RETVAL = color->r;
-       OUTPUT:
-               RETVAL
-
-Uint8
-ColorG ( color, ... )
-       SDL_Color *color
-       CODE:
-               if (items > 1 ) color->g = SvIV(ST(1)); 
-               RETVAL = color->g;
-       OUTPUT:
-               RETVAL
-
-Uint8
-ColorB ( color, ... )
-       SDL_Color *color
-       CODE:
-               if (items > 1 ) color->b = SvIV(ST(1)); 
-               RETVAL = color->b;
-       OUTPUT:
-               RETVAL
-
-void
-FreeColor ( color )
-       SDL_Color *color
-       CODE:
-               return; safefree(color);
+=skip
 
 SDL_Palette *
 NewPalette ( number )
@@ -1223,6 +1233,7 @@ NewPalette ( number )
                RETVAL->ncolors = number;
        OUTPUT:
                RETVAL
+=cut
 
 int
 PaletteNColors ( palette, ... )
@@ -1233,39 +1244,47 @@ PaletteNColors ( palette, ... )
        OUTPUT:
                RETVAL
 
-SDL_Color *
-PaletteColors ( palette, index, ... )
-       SDL_Palette *palette
-       int index
-       CODE:
-               if ( items > 2 ) {
-                       palette->colors[index].r = SvUV(ST(2)); 
-                       palette->colors[index].g = SvUV(ST(3)); 
-                       palette->colors[index].b = SvUV(ST(4)); 
-               }
-               RETVAL = (SDL_Color *)(palette->colors + index);
-       OUTPUT:
-               RETVAL
+SDL_Surface *
+SetVideoMode ( width, height, bpp, flags )
 
-int
-VideoModeOK ( width, height, bpp, flags )
        int width
        int height
        int bpp
        Uint32 flags
+
        CODE:
-               RETVAL = SDL_VideoModeOK(width,height,bpp,flags);
+               char *CLASS = "SDL::Surface";
+               RETVAL = SDL_SetVideoMode(width,height,bpp,flags);
        OUTPUT:
                RETVAL
 
-SDL_Surface *
-SetVideoMode ( width, height, bpp, flags )
-       int width
-       int height
-       int bpp
-       Uint32 flags
+int
+Flip ( surface )
+       SDL_Surface *surface
        CODE:
-               RETVAL = SDL_SetVideoMode(width,height,bpp,flags);
+               RETVAL = SDL_Flip(surface);
+       OUTPUT:
+               RETVAL
+
+int
+BlitSurface ( src, src_rect, dest, dest_rect )
+       SDL_Surface *src
+       SDL_Surface *dest
+       SDL_Rect *src_rect
+       SDL_Rect *dest_rect
+       CODE:
+               RETVAL = SDL_BlitSurface(src,src_rect,dest,dest_rect);
+       OUTPUT:
+               RETVAL
+
+Uint32
+MapRGB ( pixel_format, r, g, b )
+       SDL_PixelFormat *pixel_format
+       Uint8 r
+       Uint8 g
+       Uint8 b
+       CODE:
+               RETVAL = SDL_MapRGB(pixel_format,r,g,b);
        OUTPUT:
                RETVAL
 
@@ -1279,32 +1298,72 @@ UpdateRect ( surface, x, y, w ,h )
        CODE:
                SDL_UpdateRect(surface,x,y,w,h);
 
+SDL_Surface *
+DisplayFormat ( surface )
+       SDL_Surface *surface
+       CODE:
+               char* CLASS = "SDL::Surface";
+               RETVAL = SDL_DisplayFormat(surface);
+       OUTPUT:
+               RETVAL
+
+SDL_Surface *
+DisplayFormatAlpha ( surface )
+       SDL_Surface *surface
+       CODE:
+               char* CLASS = "SDL::Surface";
+               RETVAL = SDL_DisplayFormatAlpha(surface);
+       OUTPUT:
+               RETVAL
+
 void
 UpdateRects ( surface, ... )
        SDL_Surface *surface
        CODE:
-               SDL_Rect *rects, *temp;
+               SDL_Rect *rects;
                int num_rects,i;
                if ( items < 2 ) return;
-               num_rects = items - 1;  
+               num_rects = items - 1;
                rects = (SDL_Rect *)safemalloc(sizeof(SDL_Rect)*items);
                for(i=0;i<num_rects;i++) {
-                       temp = (SDL_Rect *)SvIV(ST(i+1));
-                       rects[i].x = temp->x;
-                       rects[i].y = temp->y;
-                       rects[i].w = temp->w;
-                       rects[i].h = temp->h;
-               } 
+                       rects[i] = *(SDL_Rect *)SvIV((SV*)SvRV( ST(i + 1) ));
+               }
                SDL_UpdateRects(surface,num_rects,rects);
                safefree(rects);
 
-int
-Flip ( surface )
-       SDL_Surface *surface
-       CODE:
-               RETVAL = SDL_Flip(surface);
-       OUTPUT:
-               RETVAL
+=for comment
+
+Comment out for now as it does not compile
+
+int
+VideoModeOK ( width, height, bpp, flags )
+       int width
+       int height
+       int bpp
+       Uint32 flags
+       CODE:
+               RETVAL = SDL_VideoModeOK(width,height,bpp,flags);
+       OUTPUT:
+               RETVAL
+
+SDL_Surface *
+SetVideoMode ( width, height, bpp, flags )
+       int width
+       int height
+       int bpp
+       Uint32 flags
+       CODE:
+               RETVAL = SDL_SetVideoMode(width,height,bpp,flags);
+       OUTPUT:
+               RETVAL
+
+int
+Flip ( surface )
+       SDL_Surface *surface
+       CODE:
+               RETVAL = SDL_Flip(surface);
+       OUTPUT:
+               RETVAL
 
 int
 SetColors ( surface, start, ... )
@@ -1329,17 +1388,6 @@ all_done:
                RETVAL
 
 Uint32
-MapRGB ( surface, r, g, b )
-       SDL_Surface *surface
-       Uint8 r
-       Uint8 g
-       Uint8 b
-       CODE:
-               RETVAL = SDL_MapRGB(surface->format,r,g,b);
-       OUTPUT:
-               RETVAL
-
-Uint32
 MapRGBA ( surface, r, g, b, a )
        SDL_Surface *surface
        Uint8 r
@@ -1410,22 +1458,6 @@ SetAlpha ( surface, flag, alpha )
        OUTPUT:
                RETVAL
 
-SDL_Surface *
-DisplayFormat ( surface )
-       SDL_Surface *surface
-       CODE:
-               RETVAL = SDL_DisplayFormat(surface);
-       OUTPUT:
-               RETVAL
-
-SDL_Surface*
-DisplayFormatAlpha ( surface )
-       SDL_Surface *surface
-       CODE:
-               RETVAL = SDL_DisplayFormatAlpha(surface);
-       OUTPUT:
-               RETVAL
-
 SDL_Surface*
 ConvertRGB ( surface )
        SDL_Surface * surface
@@ -1478,24 +1510,14 @@ ConvertRGBA ( surface )
        OUTPUT:
                RETVAL
 
-int
-BlitSurface ( src, src_rect, dest, dest_rect )
-       SDL_Surface *src
-       SDL_Rect *src_rect
-       SDL_Surface *dest
-       SDL_Rect *dest_rect
-       CODE:
-               RETVAL = SDL_BlitSurface(src,src_rect,dest,dest_rect);
-       OUTPUT:
-               RETVAL
+=cut
 
 int
-FillRect ( dest, dest_rect, color )
+FillRect ( dest, dest_rect, pixel )
        SDL_Surface *dest
        SDL_Rect *dest_rect
-       SDL_Color *color
+       Uint32 pixel
        CODE:
-               Uint32 pixel = SDL_MapRGB(dest->format,color->r,color->g,color->b);
                RETVAL = SDL_FillRect(dest,dest_rect,pixel);
        OUTPUT:
                RETVAL
@@ -2119,6 +2141,15 @@ MixPlayingMusic()
        OUTPUT:
                RETVAL
 
+int
+MixSetPanning ( channel, left, right )
+       int channel
+       int left
+       int right
+       CODE:
+               RETVAL = Mix_SetPanning(channel, left, right);
+       OUTPUT:
+               RETVAL
 
 void
 MixCloseAudio ()
@@ -2315,7 +2346,7 @@ JoyAxisEventAxis ( e )
         OUTPUT:
                 RETVAL
 
-Uint8
+Sint16
 JoyAxisEventValue ( e )
         SDL_Event *e
         CODE:
@@ -2410,14 +2441,12 @@ SetClipRect ( surface, rect )
        CODE:
                SDL_SetClipRect(surface,rect);
        
-SDL_Rect*
-GetClipRect ( surface )
+void
+GetClipRect ( surface, rect )
        SDL_Surface *surface
+       SDL_Rect *rect;
        CODE:
-               RETVAL = (SDL_Rect*) safemalloc(sizeof(SDL_Rect));
-               SDL_GetClipRect(surface,RETVAL);
-       OUTPUT:
-               RETVAL
+               SDL_GetClipRect(surface, rect);
 
 
 #ifdef HAVE_SDL_NET
@@ -2478,7 +2507,7 @@ NetResolveIP ( address )
 int
 NetResolveHost ( address, host, port )
        IPaddress *address
-       char *host
+       const char *host
        Uint16 port
        CODE:
                RETVAL = SDLNet_ResolveHost(address,host,port);
@@ -2755,573 +2784,207 @@ NetRead32 ( area )
 
 #endif 
 
-#ifdef HAVE_SDL_TTF
-
 int
-TTFInit ()
+LockYUVOverlay ( overlay )
+       SDL_Overlay *overlay
        CODE:
-               RETVAL = TTF_Init();
+               RETVAL = SDL_LockYUVOverlay(overlay);
        OUTPUT:
                RETVAL
 
 void
-TTFQuit ()
-       CODE:
-               TTF_Quit();
+UnlockYUVOverlay ( overlay )
+        SDL_Overlay *overlay
+        CODE:
+                SDL_UnlockYUVOverlay(overlay);
 
-TTF_Font*
-TTFOpenFont ( file, ptsize )
-       char *file
-       int ptsize
+int
+DisplayYUVOverlay ( overlay, dstrect )
+       SDL_Overlay *overlay
+       SDL_Rect *dstrect
        CODE:
-               RETVAL = TTF_OpenFont(file,ptsize);
+               RETVAL = SDL_DisplayYUVOverlay ( overlay, dstrect );
        OUTPUT:
                RETVAL
 
-int
-TTFGetFontStyle ( font )
-       TTF_Font *font
+Uint32
+OverlayFormat ( overlay, ... )
+       SDL_Overlay *overlay
        CODE:
-               RETVAL = TTF_GetFontStyle(font);
+               if ( items > 1 ) 
+                       overlay->format = SvIV(ST(1));
+               RETVAL = overlay->format;
        OUTPUT:
                RETVAL
 
-void
-TTFSetFontStyle ( font, style )
-       TTF_Font *font
-       int style
-       CODE:
-               TTF_SetFontStyle(font,style);
-       
-int
-TTFFontHeight ( font )
-       TTF_Font *font
+int 
+OverlayW ( overlay, ... )
+       SDL_Overlay *overlay
        CODE:
-               RETVAL = TTF_FontHeight(font);
+               if ( items > 1 ) 
+                       overlay->w = SvIV(ST(1));
+               RETVAL = overlay->w;
        OUTPUT:
                RETVAL
 
 int
-TTFFontAscent ( font )
-       TTF_Font *font
+OverlayH ( overlay, ... )
+       SDL_Overlay *overlay
        CODE:
-               RETVAL = TTF_FontAscent(font);
+               if ( items > 1 )
+                       overlay->h = SvIV(ST(1));
+               RETVAL = overlay->h;
        OUTPUT:
-               RETVAL
+               RETVAL 
 
 int
-TTFFontDescent ( font )
-       TTF_Font *font
+OverlayPlanes ( overlay, ... )
+        SDL_Overlay *overlay
+        CODE:
+                if ( items > 1 )
+                        overlay->planes = SvIV(ST(1));
+                RETVAL = overlay->planes;
+        OUTPUT:
+                RETVAL
+
+Uint32
+OverlayHW ( overlay )
+       SDL_Overlay *overlay
        CODE:
-               RETVAL = TTF_FontDescent(font);
+               RETVAL = overlay->hw_overlay;
        OUTPUT:
                RETVAL
 
-int
-TTFFontLineSkip ( font )
-       TTF_Font *font
+Uint16*
+OverlayPitches ( overlay )
+       SDL_Overlay *overlay
        CODE:
-               RETVAL = TTF_FontLineSkip(font);
+               RETVAL = overlay->pitches;
        OUTPUT:
                RETVAL
 
-AV*
-TTFGlyphMetrics ( font, ch )
-       TTF_Font *font
-       Uint16 ch
+Uint8**
+OverlayPixels ( overlay )
+       SDL_Overlay *overlay
        CODE:
-               int minx, miny, maxx, maxy, advance;
-               RETVAL = newAV();
-               TTF_GlyphMetrics(font, ch, &minx, &miny, &maxx, &maxy, &advance);
-               av_push(RETVAL,newSViv(minx));
-               av_push(RETVAL,newSViv(miny));
-               av_push(RETVAL,newSViv(maxx));
-               av_push(RETVAL,newSViv(maxy));
-               av_push(RETVAL,newSViv(advance));
+               RETVAL = overlay->pixels;
        OUTPUT:
                RETVAL
 
-AV*
-TTFSizeText ( font, text )
-       TTF_Font *font
-       char *text
+int
+WMToggleFullScreen ( surface )
+       SDL_Surface *surface
        CODE:
-               int w,h;
-               RETVAL = newAV();
-               TTF_SizeText(font,text,&w,&h);
-               av_push(RETVAL,newSViv(w));
-               av_push(RETVAL,newSViv(h));
+               RETVAL = SDL_WM_ToggleFullScreen(surface);
        OUTPUT:
                RETVAL
 
-AV*
-TTFSizeUTF8 ( font, text )
-       TTF_Font *font
-       char *text
+Uint32
+WMGrabInput ( mode )
+       Uint32 mode
        CODE:
-               int w,h;
-               RETVAL = newAV();
-               TTF_SizeUTF8(font,text,&w,&h);
-               av_push(RETVAL,newSViv(w));
-               av_push(RETVAL,newSViv(h));
+               RETVAL = SDL_WM_GrabInput(mode);
        OUTPUT:
                RETVAL
 
-AV*
-TTFSizeUNICODE ( font, text )
-       TTF_Font *font
-       const Uint16 *text
+int
+WMIconifyWindow ()
        CODE:
-               int w,h;
-               RETVAL = newAV();
-               TTF_SizeUNICODE(font,text,&w,&h);
-               av_push(RETVAL,newSViv(w));
-               av_push(RETVAL,newSViv(h));
+               RETVAL = SDL_WM_IconifyWindow();
        OUTPUT:
                RETVAL
 
-SDL_Surface*
-TTFRenderTextSolid ( font, text, fg )
-       TTF_Font *font
-       char *text
-       SDL_Color *fg
+int
+ResizeEventW ( e )
+       SDL_Event *e
        CODE:
-               RETVAL = TTF_RenderText_Solid(font,text,*fg);
+               RETVAL = e->resize.w;
        OUTPUT:
                RETVAL
 
-SDL_Surface*
-TTFRenderUTF8Solid ( font, text, fg )
-       TTF_Font *font
-       char *text
-       SDL_Color *fg
+int
+ResizeEventH ( e )
+       SDL_Event *e
        CODE:
-               RETVAL = TTF_RenderUTF8_Solid(font,text,*fg);
+               RETVAL = e->resize.h;
        OUTPUT:
                RETVAL
 
-SDL_Surface*
-TTFRenderUNICODESolid ( font, text, fg )
-       TTF_Font *font
-       const Uint16 *text
-       SDL_Color *fg
+char*
+AudioDriverName ()
        CODE:
-               RETVAL = TTF_RenderUNICODE_Solid(font,text,*fg);
+               char name[32];
+               RETVAL = SDL_AudioDriverName(name,32);
        OUTPUT:
                RETVAL
 
-SDL_Surface*
-TTFRenderGlyphSolid ( font, ch, fg )
-       TTF_Font *font
-       Uint16 ch
-       SDL_Color *fg
+Uint32
+GetKeyState ( k )
+       SDLKey k
        CODE:
-               RETVAL = TTF_RenderGlyph_Solid(font,ch,*fg);
+               if (k >= SDLK_LAST) Perl_croak (aTHX_ "Key out of range");      
+               RETVAL = SDL_GetKeyState(NULL)[k];
        OUTPUT:
                RETVAL
 
-SDL_Surface*
-TTFRenderTextShaded ( font, text, fg, bg )
-       TTF_Font *font
-       char *text
-       SDL_Color *fg
-       SDL_Color *bg
+#ifdef HAVE_SMPEG
+
+SMPEG_Info *
+NewSMPEGInfo()
+       CODE:   
+               RETVAL = (SMPEG_Info *) safemalloc (sizeof(SMPEG_Info));
+       OUTPUT:
+               RETVAL
+
+void
+FreeSMPEGInfo ( info )
+       SMPEG_Info *info
+       CODE:   
+               safefree(info);
+
+int
+SMPEGInfoHasAudio ( info )
+       SMPEG_Info* info
        CODE:
-               RETVAL = TTF_RenderText_Shaded(font,text,*fg,*bg);
+               RETVAL = info->has_audio;
        OUTPUT:
                RETVAL
 
-SDL_Surface*
-TTFRenderUTF8Shaded( font, text, fg, bg )
-       TTF_Font *font
-       char *text
-       SDL_Color *fg
-       SDL_Color *bg
+int
+SMPEGInfoHasVideo ( info )
+       SMPEG_Info* info
        CODE:
-               RETVAL = TTF_RenderUTF8_Shaded(font,text,*fg,*bg);
+               RETVAL = info->has_video;
        OUTPUT:
                RETVAL
 
-SDL_Surface*
-TTFRenderUNICODEShaded( font, text, fg, bg )
-       TTF_Font *font
-       const Uint16 *text
-       SDL_Color *fg
-       SDL_Color *bg
+int
+SMPEGInfoWidth ( info )
+       SMPEG_Info* info
        CODE:
-               RETVAL = TTF_RenderUNICODE_Shaded(font,text,*fg,*bg);
+               RETVAL = info->width;
        OUTPUT:
                RETVAL
 
-SDL_Surface*
-TTFRenderGlyphShaded ( font, ch, fg, bg )
-       TTF_Font *font
-       Uint16 ch
-       SDL_Color *fg
-       SDL_Color *bg
+int
+SMPEGInfoHeight ( info )
+       SMPEG_Info* info
        CODE:
-               RETVAL = TTF_RenderGlyph_Shaded(font,ch,*fg,*bg);
+               RETVAL = info->height;
        OUTPUT:
                RETVAL
 
-SDL_Surface*
-TTFRenderTextBlended( font, text, fg )
-       TTF_Font *font
-       char *text
-       SDL_Color *fg
+int
+SMPEGInfoCurrentFrame ( info )
+       SMPEG_Info* info
        CODE:
-               RETVAL = TTF_RenderText_Blended(font,text,*fg);
-       OUTPUT:
-               RETVAL
-
-SDL_Surface*
-TTFRenderUTF8Blended( font, text, fg )
-       TTF_Font *font
-       char *text
-       SDL_Color *fg
-       CODE:
-               RETVAL = TTF_RenderUTF8_Blended(font,text,*fg);
-       OUTPUT:
-               RETVAL
-
-SDL_Surface*
-TTFRenderUNICODEBlended( font, text, fg )
-       TTF_Font *font
-       const Uint16 *text
-       SDL_Color *fg
-       CODE:
-               RETVAL = TTF_RenderUNICODE_Blended(font,text,*fg);
-       OUTPUT:
-               RETVAL
-
-SDL_Surface*
-TTFRenderGlyphBlended( font, ch, fg )
-       TTF_Font *font
-       Uint16 ch
-       SDL_Color *fg
-       CODE:
-               RETVAL = TTF_RenderGlyph_Blended(font,ch,*fg);
-       OUTPUT:
-               RETVAL
-
-void
-TTFCloseFont ( font )
-       TTF_Font *font
-       CODE:
-               TTF_CloseFont(font);
-
-SDL_Surface*
-TTFPutString ( font, mode, surface, x, y, fg, bg, text )
-       TTF_Font *font
-       int mode
-       SDL_Surface *surface
-       int x
-       int y
-       SDL_Color *fg
-       SDL_Color *bg
-       char *text
-       CODE:
-               SDL_Surface *img;
-               SDL_Rect dest;
-               int w,h;
-               dest.x = x;
-               dest.y = y;
-               RETVAL = NULL;
-               switch (mode) {
-                       case TEXT_SOLID:
-                               img = TTF_RenderText_Solid(font,text,*fg);
-                               TTF_SizeText(font,text,&w,&h);
-                               dest.w = w;
-                               dest.h = h;
-                               break;
-                       case TEXT_SHADED:
-                               img = TTF_RenderText_Shaded(font,text,*fg,*bg);
-                               TTF_SizeText(font,text,&w,&h);
-                               dest.w = w;
-                               dest.h = h;
-                               break;
-                       case TEXT_BLENDED:
-                               img = TTF_RenderText_Blended(font,text,*fg);
-                               TTF_SizeText(font,text,&w,&h);
-                               dest.w = w;
-                               dest.h = h;
-                               break;
-                       case UTF8_SOLID:
-                               img = TTF_RenderUTF8_Solid(font,text,*fg);
-                               TTF_SizeUTF8(font,text,&w,&h);
-                               dest.w = w;
-                               dest.h = h;
-                               break;
-                       case UTF8_SHADED:
-                               img = TTF_RenderUTF8_Shaded(font,text,*fg,*bg);
-                               TTF_SizeUTF8(font,text,&w,&h);
-                               dest.w = w;
-                               dest.h = h;
-                               break;
-                       case UTF8_BLENDED:
-                               img = TTF_RenderUTF8_Blended(font,text,*fg);
-                               TTF_SizeUTF8(font,text,&w,&h);
-                               dest.w = w;
-                               dest.h = h;
-                               break;
-                       case UNICODE_SOLID:
-                               img = TTF_RenderUNICODE_Solid(font,(Uint16*)text,*fg);
-                               TTF_SizeUNICODE(font,(Uint16*)text,&w,&h);
-                               dest.w = w;
-                               dest.h = h;
-                               break;
-                       case UNICODE_SHADED:
-                               img = TTF_RenderUNICODE_Shaded(font,(Uint16*)text,*fg,*bg);
-                               TTF_SizeUNICODE(font,(Uint16*)text,&w,&h);
-                               dest.w = w;
-                               dest.h = h;
-                               break;
-                       case UNICODE_BLENDED:
-                               img = TTF_RenderUNICODE_Blended(font,(Uint16*)text,*fg);
-                               TTF_SizeUNICODE(font,(Uint16*)text,&w,&h);
-                               dest.w = w;
-                               dest.h = h;
-                               break;
-                       default:
-                               img = TTF_RenderText_Shaded(font,text,*fg,*bg);
-                               TTF_SizeText(font,text,&w,&h);
-                               dest.w = w;
-                               dest.h = h;
-               }
-               if ( img && img->format && img->format->palette ) {
-                       SDL_Color *c = &img->format->palette->colors[0];
-                       Uint32 key = SDL_MapRGB( img->format, c->r, c->g, c->b );
-                       SDL_SetColorKey(img,SDL_SRCCOLORKEY,key );
-                       if (0 > SDL_BlitSurface(img,NULL,surface,&dest)) {
-                               SDL_FreeSurface(img);
-                               RETVAL = NULL;  
-                       } else {
-                               RETVAL = img;
-                       }
-               }
-       OUTPUT:
-               RETVAL
-
-#endif
-
-SDL_Overlay*
-CreateYUVOverlay ( width, height, format, display )
-       int width
-       int height
-       Uint32 format
-       SDL_Surface *display
-       CODE:
-               RETVAL = SDL_CreateYUVOverlay ( width, height, format, display );
-       OUTPUT:
-               RETVAL
-
-int
-LockYUVOverlay ( overlay )
-       SDL_Overlay *overlay
-       CODE:
-               RETVAL = SDL_LockYUVOverlay(overlay);
-       OUTPUT:
-               RETVAL
-
-void
-UnlockYUVOverlay ( overlay )
-        SDL_Overlay *overlay
-        CODE:
-                SDL_UnlockYUVOverlay(overlay);
-
-int
-DisplayYUVOverlay ( overlay, dstrect )
-       SDL_Overlay *overlay
-       SDL_Rect *dstrect
-       CODE:
-               RETVAL = SDL_DisplayYUVOverlay ( overlay, dstrect );
-       OUTPUT:
-               RETVAL
-
-void
-FreeYUVOverlay ( overlay )
-        SDL_Overlay *overlay
-        CODE:
-                SDL_FreeYUVOverlay ( overlay );
-
-Uint32
-OverlayFormat ( overlay, ... )
-       SDL_Overlay *overlay
-       CODE:
-               if ( items > 1 ) 
-                       overlay->format = SvIV(ST(1));
-               RETVAL = overlay->format;
-       OUTPUT:
-               RETVAL
-
-int 
-OverlayW ( overlay, ... )
-       SDL_Overlay *overlay
-       CODE:
-               if ( items > 1 ) 
-                       overlay->w = SvIV(ST(1));
-               RETVAL = overlay->w;
-       OUTPUT:
-               RETVAL
-
-int
-OverlayH ( overlay, ... )
-       SDL_Overlay *overlay
-       CODE:
-               if ( items > 1 )
-                       overlay->h = SvIV(ST(1));
-               RETVAL = overlay->h;
-       OUTPUT:
-               RETVAL 
-
-int
-OverlayPlanes ( overlay, ... )
-        SDL_Overlay *overlay
-        CODE:
-                if ( items > 1 )
-                        overlay->planes = SvIV(ST(1));
-                RETVAL = overlay->planes;
-        OUTPUT:
-                RETVAL
-
-Uint32
-OverlayHW ( overlay )
-       SDL_Overlay *overlay
-       CODE:
-               RETVAL = overlay->hw_overlay;
-       OUTPUT:
-               RETVAL
-
-Uint16*
-OverlayPitches ( overlay )
-       SDL_Overlay *overlay
-       CODE:
-               RETVAL = overlay->pitches;
-       OUTPUT:
-               RETVAL
-
-Uint8**
-OverlayPixels ( overlay )
-       SDL_Overlay *overlay
-       CODE:
-               RETVAL = overlay->pixels;
-       OUTPUT:
-               RETVAL
-
-int
-WMToggleFullScreen ( surface )
-       SDL_Surface *surface
-       CODE:
-               RETVAL = SDL_WM_ToggleFullScreen(surface);
-       OUTPUT:
-               RETVAL
-
-Uint32
-WMGrabInput ( mode )
-       Uint32 mode
-       CODE:
-               RETVAL = SDL_WM_GrabInput(mode);
-       OUTPUT:
-               RETVAL
-
-int
-WMIconifyWindow ()
-       CODE:
-               RETVAL = SDL_WM_IconifyWindow();
-       OUTPUT:
-               RETVAL
-
-int
-ResizeEventW ( e )
-       SDL_Event *e
-       CODE:
-               RETVAL = e->resize.w;
-       OUTPUT:
-               RETVAL
-
-int
-ResizeEventH ( e )
-       SDL_Event *e
-       CODE:
-               RETVAL = e->resize.h;
-       OUTPUT:
-               RETVAL
-
-char*
-AudioDriverName ()
-       CODE:
-               char name[32];
-               RETVAL = SDL_AudioDriverName(name,32);
-       OUTPUT:
-               RETVAL
-
-Uint32
-GetKeyState ( k )
-       SDLKey k
-       CODE:
-               if (k >= SDLK_LAST) Perl_croak (aTHX_ "Key out of range");      
-               RETVAL = SDL_GetKeyState(NULL)[k];
-       OUTPUT:
-               RETVAL
-
-#ifdef HAVE_SMPEG
-
-SMPEG_Info *
-NewSMPEGInfo()
-       CODE:   
-               RETVAL = (SMPEG_Info *) safemalloc (sizeof(SMPEG_Info));
-       OUTPUT:
-               RETVAL
-
-void
-FreeSMPEGInfo ( info )
-       SMPEG_Info *info;
-       CODE:   
-               safefree(info);
-
-int
-SMPEGInfoHasAudio ( info )
-       SMPEG_Info* info;
-       CODE:
-               RETVAL = info->has_audio;
-       OUTPUT:
-               RETVAL
-
-int
-SMPEGInfoHasVideo ( info )
-       SMPEG_Info* info;
-       CODE:
-               RETVAL = info->has_video;
-       OUTPUT:
-               RETVAL
-
-int
-SMPEGInfoWidth ( info )
-       SMPEG_Info* info;
-       CODE:
-               RETVAL = info->width;
-       OUTPUT:
-               RETVAL
-
-int
-SMPEGInfoHeight ( info )
-       SMPEG_Info* info;
-       CODE:
-               RETVAL = info->height;
-       OUTPUT:
-               RETVAL
-
-int
-SMPEGInfoCurrentFrame ( info )
-       SMPEG_Info* info;
-       CODE:
-               RETVAL = info->current_frame;
+               RETVAL = info->current_frame;
        OUTPUT:
                RETVAL
 
 double
 SMPEGInfoCurrentFPS ( info )
-       SMPEG_Info* info;
+       SMPEG_Info* info
        CODE:
                RETVAL = info->current_fps;
        OUTPUT:
@@ -3329,7 +2992,7 @@ SMPEGInfoCurrentFPS ( info )
 
 int
 SMPEGInfoCurrentAudioFrame ( info )
-       SMPEG_Info* info;
+       SMPEG_Info* info
        CODE:
                RETVAL = info->audio_current_frame;
        OUTPUT:
@@ -3337,7 +3000,7 @@ SMPEGInfoCurrentAudioFrame ( info )
 
 int
 SMPEGInfoCurrentOffset ( info )
-       SMPEG_Info* info;
+       SMPEG_Info* info
        CODE:
                RETVAL = info->current_offset;
        OUTPUT:
@@ -3345,7 +3008,7 @@ SMPEGInfoCurrentOffset ( info )
 
 int
 SMPEGInfoTotalSize ( info )
-       SMPEG_Info* info;
+       SMPEG_Info* info
        CODE:
                RETVAL = info->total_size;
        OUTPUT:
@@ -3353,7 +3016,7 @@ SMPEGInfoTotalSize ( info )
 
 double
 SMPEGInfoCurrentTime ( info )
-       SMPEG_Info* info;
+       SMPEG_Info* info
        CODE:
                RETVAL = info->current_time;
        OUTPUT:
@@ -3361,7 +3024,7 @@ SMPEGInfoCurrentTime ( info )
 
 double
 SMPEGInfoTotalTime ( info )
-       SMPEG_Info* info;
+       SMPEG_Info* info
        CODE:
                RETVAL = info->total_time;
        OUTPUT:
@@ -3369,7 +3032,7 @@ SMPEGInfoTotalTime ( info )
 
 char *
 SMPEGError ( mpeg )
-       SMPEG* mpeg ;
+       SMPEG* mpeg
        CODE:   
                RETVAL = SMPEG_error(mpeg);
        OUTPUT:
@@ -3377,8 +3040,8 @@ SMPEGError ( mpeg )
 
 SMPEG*
 NewSMPEG ( filename, info, use_audio )
-       char* filename;
-       SMPEG_Info* info;
+       char* filename
+       SMPEG_Info* info
        int use_audio
        CODE:   
 #ifdef HAVE_SDL_MIXER
@@ -3391,14 +3054,14 @@ NewSMPEG ( filename, info, use_audio )
 
 void
 FreeSMPEG ( mpeg )
-       SMPEG* mpeg;
+       SMPEG* mpeg
        CODE:
                SMPEG_delete(mpeg);
 
 void
 SMPEGEnableAudio ( mpeg , flag )
-       SMPEG* mpeg ;
-       int flag;
+       SMPEG* mpeg
+       int flag
        CODE:   
                SMPEG_enableaudio(mpeg,flag);
 #ifdef HAVE_SDL_MIXER
@@ -3407,44 +3070,44 @@ SMPEGEnableAudio ( mpeg , flag )
 
 void
 SMPEGEnableVideo ( mpeg , flag )
-       SMPEG* mpeg ;
-       int flag;
+       SMPEG* mpeg
+       int flag
        CODE:   
                SMPEG_enablevideo(mpeg,flag);
 
 void
 SMPEGSetVolume ( mpeg , volume )
-       SMPEG* mpeg ;
-       int volume;
+       SMPEG* mpeg
+       int volume
        CODE:   
                SMPEG_setvolume(mpeg,volume);
 
 void
 SMPEGSetDisplay ( mpeg, dest, surfLock )
-       SMPEG* mpeg;
-       SDL_Surface* dest;
-       SDL_mutex*  surfLock;     
+       SMPEG* mpeg
+       SDL_Surface* dest
+       SDL_mutex*  surfLock
        CODE:
                SMPEG_setdisplay(mpeg,dest,surfLock,NULL);
 
 void
 SMPEGScaleXY ( mpeg, w, h)
-       SMPEG* mpeg;
-       int w;
-       int h;
+       SMPEG* mpeg
+       int w
+       int h
        CODE:
                SMPEG_scaleXY(mpeg,w,h);
 
 void
 SMPEGScale ( mpeg, scale )
-       SMPEG* mpeg;
+       SMPEG* mpeg
        int scale
        CODE:
                SMPEG_scale(mpeg,scale);
 
 void
 SMPEGPlay ( mpeg )
-       SMPEG* mpeg;
+       SMPEG* mpeg
        CODE:
                 SDL_AudioSpec audiofmt;
                 Uint16 format;
@@ -3465,7 +3128,7 @@ SMPEGPlay ( mpeg )
 
 SMPEGstatus
 SMPEGStatus ( mpeg )
-       SMPEG* mpeg;
+       SMPEG* mpeg
        CODE:
                RETVAL = SMPEG_status(mpeg);
        OUTPUT:
@@ -3473,20 +3136,20 @@ SMPEGStatus ( mpeg )
 
 void
 SMPEGPause ( mpeg )
-       SMPEG* mpeg;
+       SMPEG* mpeg
        CODE:
                SMPEG_pause(mpeg);
 
 void
 SMPEGLoop ( mpeg, repeat )
-       SMPEG* mpeg;
+       SMPEG* mpeg
        int repeat
        CODE:
                SMPEG_loop(mpeg,repeat);
 
 void
 SMPEGStop ( mpeg )
-       SMPEG* mpeg;
+       SMPEG* mpeg
        CODE:
                SMPEG_stop(mpeg);
 #ifdef HAVE_SDL_MIXER
@@ -3495,41 +3158,41 @@ SMPEGStop ( mpeg )
 
 void
 SMPEGRewind ( mpeg )
-       SMPEG* mpeg;
+       SMPEG* mpeg
        CODE:
                SMPEG_rewind(mpeg);
 
 void
 SMPEGSeek ( mpeg, bytes )
-       SMPEG* mpeg;
-       int bytes;
+       SMPEG* mpeg
+       int bytes
        CODE:
                SMPEG_seek(mpeg,bytes);
 
 void
 SMPEGSkip ( mpeg, seconds )
-       SMPEG* mpeg;
-       float seconds;
+       SMPEG* mpeg
+       float seconds
        CODE:
                SMPEG_skip(mpeg,seconds);
 
 void
 SMPEGSetDisplayRegion ( mpeg, rect )
-       SMPEG* mpeg;
-       SDL_Rect* rect;
+       SMPEG* mpeg
+       SDL_Rect* rect
        CODE:
                SMPEG_setdisplayregion(mpeg,rect->x,rect->y,rect->w,rect->h);
 
 void
 SMPEGRenderFrame ( mpeg, frame )
-       SMPEG* mpeg;
-       int frame;
+       SMPEG* mpeg
+       int frame
        CODE:
                SMPEG_renderFrame(mpeg,frame);
 
 SMPEG_Info *
 SMPEGGetInfo ( mpeg )
-       SMPEG* mpeg;
+       SMPEG* mpeg
        CODE:
                RETVAL = (SMPEG_Info *) safemalloc (sizeof(SMPEG_Info));
                SMPEG_getinfo(mpeg,RETVAL);
@@ -3541,557 +3204,660 @@ SMPEGGetInfo ( mpeg )
 
 #ifdef HAVE_SDL_GFX
 
+=cut
+
 SDL_Surface *
 GFXRotoZoom ( src, angle, zoom, smooth)
-     SDL_Surface * src;
-     double angle;
-     double zoom;
-     int smooth;
-     CODE:
-                 RETVAL = rotozoomSurface( src, angle, zoom, smooth);
-     OUTPUT:
-                 RETVAL
+       SDL_Surface * src
+       double angle
+       double zoom
+       int smooth
+       CODE:
+               RETVAL = rotozoomSurface( src, angle, zoom, smooth);
+       OUTPUT:
+               RETVAL
 
 SDL_Surface *
 GFXZoom ( src, zoomx, zoomy, smooth)
-     SDL_Surface *src;
-     double zoomx;
-     double zoomy;
-     int smooth;
-     CODE:
-                 RETVAL = zoomSurface( src, zoomx, zoomy, smooth);
-     OUTPUT:
-                 RETVAL
+       SDL_Surface *src
+       double zoomx
+       double zoomy
+       int smooth
+       CODE:
+               RETVAL = zoomSurface( src, zoomx, zoomy, smooth);
+       OUTPUT:
+               RETVAL
 
+=cut
 
 int
 GFXPixelColor ( dst, x, y, color )
-    SDL_Surface* dst;
-    Sint16 x;
-    Sint16 y;
-    Uint32 color;
-CODE:
-     RETVAL = pixelColor( dst, x, y, color);
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x
+       Sint16 y
+       Uint32 color
+       CODE:
+               RETVAL = pixelColor( dst, x, y, color);
+       OUTPUT:
+               RETVAL
 
 int
 GFXPixelRGBA ( dst, x, y, r, g, b, a )
-    SDL_Surface* dst;
-    Sint16 x;
-    Sint16 y;
-    Uint8 r;
-    Uint8 g;
-    Uint8 b;
-    Uint8 a;
-CODE:
-     RETVAL = pixelRGBA( dst, x, y, r, g, b, a );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x
+       Sint16 y
+       Uint8 r
+       Uint8 g
+       Uint8 b
+       Uint8 a
+       CODE:
+               RETVAL = pixelRGBA( dst, x, y, r, g, b, a );
+       OUTPUT:
+               RETVAL
 
 int
 GFXHlineColor ( dst, x1, x2, y, color )
-    SDL_Surface* dst;
-    Sint16 x1;
-    Sint16 x2;
-    Sint16 y;
-    Uint32 color;
-CODE:
-     RETVAL = hlineColor( dst, x1, x2, y, color );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x1
+       Sint16 x2
+       Sint16 y
+       Uint32 color
+       CODE:
+               RETVAL = hlineColor( dst, x1, x2, y, color );
+       OUTPUT:
+               RETVAL
 
 int
 GFXHlineRGBA ( dst, x1, x2, y, r, g, b, a )
-    SDL_Surface* dst;
-    Sint16 x1;
-    Sint16 x2;
-    Sint16 y;
-    Uint8 r;
-    Uint8 g;
-    Uint8 b;
-    Uint8 a;
-CODE:
-     RETVAL = hlineRGBA( dst, x1, x2, y, r, g, b, a );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x1
+       Sint16 x2
+       Sint16 y
+       Uint8 r
+       Uint8 g
+       Uint8 b
+       Uint8 a
+       CODE:
+               RETVAL = hlineRGBA( dst, x1, x2, y, r, g, b, a );
+       OUTPUT:
+               RETVAL
 
 int
 GFXVlineColor ( dst, x, y1, y2, color )
-    SDL_Surface* dst;
-    Sint16 x;
-    Sint16 y1;
-    Sint16 y2;
-    Uint32 color;
-CODE:
-     RETVAL = vlineColor( dst, x, y1, y2, color );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x
+       Sint16 y1
+       Sint16 y2
+       Uint32 color
+       CODE:
+               RETVAL = vlineColor( dst, x, y1, y2, color );
+       OUTPUT:
+               RETVAL
 
 int
 GFXVlineRGBA ( dst, x, y1, y2, r, g, b, a )
-    SDL_Surface* dst;
-    Sint16 x;
-    Sint16 y1;
-    Sint16 y2;
-    Uint8 r;
-    Uint8 g;
-    Uint8 b;
-    Uint8 a;
-CODE:
-     RETVAL = vlineRGBA( dst, x, y1, y2, r, g, b, a );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x
+       Sint16 y1
+       Sint16 y2
+       Uint8 r
+       Uint8 g
+       Uint8 b
+       Uint8 a
+       CODE:
+               RETVAL = vlineRGBA( dst, x, y1, y2, r, g, b, a );
+       OUTPUT:
+               RETVAL
 
 int
 GFXRectangleColor ( dst, x1, y1, x2, y2, color )
-    SDL_Surface* dst;
-    Sint16 x1;
-    Sint16 y1;
-    Sint16 x2;
-    Sint16 y2;
-    Uint32 color;
-CODE:
-     RETVAL = rectangleColor( dst, x1, y1, x2, y2, color );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x1
+       Sint16 y1
+       Sint16 x2
+       Sint16 y2
+       Uint32 color
+       CODE:
+               RETVAL = rectangleColor( dst, x1, y1, x2, y2, color );
+       OUTPUT:
+               RETVAL
 
 int
 GFXRectangleRGBA ( dst, x1, y1, x2, y2, r, g, b, a )
-    SDL_Surface* dst;
-    Sint16 x1;
-    Sint16 y1;
-    Sint16 x2;
-    Sint16 y2;
-    Uint8 r;
-    Uint8 g;
-    Uint8 b;
-    Uint8 a;
-CODE:
-     RETVAL = rectangleRGBA( dst, x1, y1, x2, y2, r, g, b, a );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x1
+       Sint16 y1
+       Sint16 x2
+       Sint16 y2
+       Uint8 r
+       Uint8 g
+       Uint8 b
+       Uint8 a
+       CODE:
+               RETVAL = rectangleRGBA( dst, x1, y1, x2, y2, r, g, b, a );
+       OUTPUT:
+               RETVAL
 
 int
 GFXBoxColor ( dst, x1, y1, x2, y2, color )
-    SDL_Surface* dst;
-    Sint16 x1;
-    Sint16 y1;
-    Sint16 x2;
-    Sint16 y2;
-    Uint32 color;
-CODE:
-     RETVAL = boxColor( dst, x1, y1, x2, y2, color );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x1
+       Sint16 y1
+       Sint16 x2
+       Sint16 y2
+       Uint32 color
+       CODE:
+               RETVAL = boxColor( dst, x1, y1, x2, y2, color );
+       OUTPUT:
+               RETVAL
 
 int
 GFXBoxRGBA ( dst, x1, y1, x2, y2, r, g, b, a )
-    SDL_Surface* dst;
-    Sint16 x1;
-    Sint16 y1;
-    Sint16 x2;
-    Sint16 y2;
-    Uint8 r;
-    Uint8 g;
-    Uint8 b;
-    Uint8 a;
-CODE:
-     RETVAL = boxRGBA( dst, x1, y1, x2, y2, r, g, b, a );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst;
+       Sint16 x1
+       Sint16 y1
+       Sint16 x2
+       Sint16 y2
+       Uint8 r
+       Uint8 g
+       Uint8 b
+       Uint8 a
+       CODE:
+               RETVAL = boxRGBA( dst, x1, y1, x2, y2, r, g, b, a );
+       OUTPUT:
+               RETVAL
 
 int
 GFXLineColor ( dst, x1, y1, x2, y2, color )
-    SDL_Surface* dst;
-    Sint16 x1;
-    Sint16 y1;
-    Sint16 x2;
-    Sint16 y2;
-    Uint32 color;
-CODE:
-     RETVAL = lineColor( dst, x1, y1, x2, y2, color );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x1
+       Sint16 y1
+       Sint16 x2
+       Sint16 y2
+       Uint32 color
+       CODE:
+               RETVAL = lineColor( dst, x1, y1, x2, y2, color );
+       OUTPUT:
+               RETVAL
 
 int
 GFXLineRGBA ( dst, x1, y1, x2, y2, r, g, b, a )
-    SDL_Surface* dst;
-    Sint16 x1;
-    Sint16 y1;
-    Sint16 x2;
-    Sint16 y2;
-    Uint8 r;
-    Uint8 g;
-    Uint8 b;
-    Uint8 a;
-CODE:
-     RETVAL = lineRGBA( dst, x1, y1, x2, y2, r, g, b, a );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x1
+       Sint16 y1
+       Sint16 x2
+       Sint16 y2
+       Uint8 r
+       Uint8 g
+       Uint8 b
+       Uint8 a
+       CODE:
+               RETVAL = lineRGBA( dst, x1, y1, x2, y2, r, g, b, a );
+       OUTPUT:
+               RETVAL
 
 int
 GFXAalineColor ( dst, x1, y1, x2, y2, color )
-    SDL_Surface* dst;
-    Sint16 x1;
-    Sint16 y1;
-    Sint16 x2;
-    Sint16 y2;
-    Uint32 color;
-CODE:
-     RETVAL = aalineColor( dst, x1, y1, x2, y2, color );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x1
+       Sint16 y1
+       Sint16 x2
+       Sint16 y2
+       Uint32 color
+       CODE:
+               RETVAL = aalineColor( dst, x1, y1, x2, y2, color );
+       OUTPUT:
+               RETVAL
 
 int
 GFXAalineRGBA ( dst, x1, y1, x2, y2, r, g, b, a )
-    SDL_Surface* dst;
-    Sint16 x1;
-    Sint16 y1;
-    Sint16 x2;
-    Sint16 y2;
-    Uint8 r;
-    Uint8 g;
-    Uint8 b;
-    Uint8 a;
-CODE:
-     RETVAL = aalineRGBA( dst, x1, y1, x2, y2, r, g, b, a );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x1
+       Sint16 y1
+       Sint16 x2
+       Sint16 y2
+       Uint8 r
+       Uint8 g
+       Uint8 b
+       Uint8 a
+       CODE:
+               RETVAL = aalineRGBA( dst, x1, y1, x2, y2, r, g, b, a );
+       OUTPUT:
+               RETVAL
 
 int
 GFXCircleColor ( dst, x, y, r, color )
-    SDL_Surface* dst;
-    Sint16 x;
-    Sint16 y;
-    Sint16 r;
-    Uint32 color;
-CODE:
-     RETVAL = circleColor( dst, x, y, r, color );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x
+       Sint16 y
+       Sint16 r
+       Uint32 color
+       CODE:
+               RETVAL = circleColor( dst, x, y, r, color );
+       OUTPUT:
+               RETVAL
 
 int
 GFXCircleRGBA ( dst, x, y, rad, r, g, b, a )
-    SDL_Surface* dst;
-    Sint16 x;
-    Sint16 y;
-    Sint16 rad;
-    Uint8 r;
-    Uint8 g;
-    Uint8 b;
-    Uint8 a;
-CODE:
-     RETVAL = circleRGBA( dst, x, y, rad, r, g, b, a );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x
+       Sint16 y
+       Sint16 rad
+       Uint8 r
+       Uint8 g
+       Uint8 b
+       Uint8 a
+       CODE:
+               RETVAL = circleRGBA( dst, x, y, rad, r, g, b, a );
+       OUTPUT:
+               RETVAL
 
 int
 GFXAacircleColor ( dst, x, y, r, color )
-    SDL_Surface* dst;
-    Sint16 x;
-    Sint16 y;
-    Sint16 r;
-    Uint32 color;
-CODE:
-     RETVAL = aacircleColor( dst, x, y, r, color );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x
+       Sint16 y
+       Sint16 r
+       Uint32 color
+       CODE:
+               RETVAL = aacircleColor( dst, x, y, r, color );
+       OUTPUT:
+               RETVAL
 
 int
 GFXAacircleRGBA ( dst, x, y, rad, r, g, b, a )
-    SDL_Surface* dst;
-    Sint16 x;
-    Sint16 y;
-    Sint16 rad;
-    Uint8 r;
-    Uint8 g;
-    Uint8 b;
-    Uint8 a;
-CODE:
-     RETVAL = aacircleRGBA( dst, x, y, rad, r, g, b, a );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x
+       Sint16 y
+       Sint16 rad
+       Uint8 r
+       Uint8 g
+       Uint8 b
+       Uint8 a
+       CODE:
+               RETVAL = aacircleRGBA( dst, x, y, rad, r, g, b, a );
+       OUTPUT:
+               RETVAL
 
 int
 GFXFilledCircleColor ( dst, x, y, r, color )
-    SDL_Surface* dst;
-    Sint16 x;
-    Sint16 y;
-    Sint16 r;
-    Uint32 color;
-CODE:
-     RETVAL = filledCircleColor( dst, x, y, r, color );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x
+       Sint16 y
+       Sint16 r
+       Uint32 color
+       CODE:
+               RETVAL = filledCircleColor( dst, x, y, r, color );
+       OUTPUT:
+               RETVAL
 
 int
 GFXFilledCircleRGBA ( dst, x, y, rad, r, g, b, a )
-    SDL_Surface* dst;
-    Sint16 x;
-    Sint16 y;
-    Sint16 rad;
-    Uint8 r;
-    Uint8 g;
-    Uint8 b;
-    Uint8 a;
-CODE:
-     RETVAL = filledCircleRGBA( dst, x, y, rad, r, g, b, a );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x
+       Sint16 y
+       Sint16 rad
+       Uint8 r
+       Uint8 g
+       Uint8 b
+       Uint8 a
+       CODE:
+               RETVAL = filledCircleRGBA( dst, x, y, rad, r, g, b, a );
+       OUTPUT:
+               RETVAL
 
 int
 GFXEllipseColor ( dst, x, y, rx, ry, color )
-    SDL_Surface* dst;
-    Sint16 x;
-    Sint16 y;
-    Sint16 rx;
-    Sint16 ry;
-    Uint32 color;
-CODE:
-     RETVAL = ellipseColor( dst, x, y, rx, ry, color );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x
+       Sint16 y
+       Sint16 rx
+       Sint16 ry
+       Uint32 color
+       CODE:
+               RETVAL = ellipseColor( dst, x, y, rx, ry, color );
+       OUTPUT:
+               RETVAL
 
 int
 GFXEllipseRGBA ( dst, x, y, rx, ry, r, g, b, a )
-    SDL_Surface* dst;
-    Sint16 x;
-    Sint16 y;
-    Sint16 rx;
-    Sint16 ry;
-    Uint8 r;
-    Uint8 g;
-    Uint8 b;
-    Uint8 a;
-CODE:
-     RETVAL = ellipseRGBA( dst, x, y, rx, ry, r, g, b, a );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x
+       Sint16 y
+       Sint16  rx
+       Sint16 ry
+       Uint8 r
+       Uint8 g
+       Uint8 b
+       Uint8 a
+       CODE:
+               RETVAL = ellipseRGBA( dst, x, y, rx, ry, r, g, b, a );
+       OUTPUT:
+               RETVAL
 
 int
 GFXAaellipseColor ( dst, xc, yc, rx, ry, color )
-    SDL_Surface* dst;
-    Sint16 xc;
-    Sint16 yc;
-    Sint16 rx;
-    Sint16 ry;
-    Uint32 color;
-CODE:
-     RETVAL = aaellipseColor( dst, xc, yc, rx, ry, color );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 xc
+       Sint16 yc
+       Sint16 rx
+       Sint16 ry
+       Uint32 color
+       CODE:
+               RETVAL = aaellipseColor( dst, xc, yc, rx, ry, color );
+       OUTPUT:
+               RETVAL
 
 int
 GFXAaellipseRGBA ( dst, x, y, rx, ry, r, g, b, a )
-    SDL_Surface* dst;
-    Sint16 x;
-    Sint16 y;
-    Sint16 rx;
-    Sint16 ry;
-    Uint8 r;
-    Uint8 g;
-    Uint8 b;
-    Uint8 a;
-CODE:
-     RETVAL = aaellipseRGBA( dst, x, y, rx, ry, r, g, b, a );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x
+       Sint16 y
+       Sint16 rx
+       Sint16 ry
+       Uint8 r
+       Uint8 g
+       Uint8 b
+       Uint8 a
+       CODE:
+               RETVAL = aaellipseRGBA( dst, x, y, rx, ry, r, g, b, a );
+       OUTPUT:
+               RETVAL
 
 int
 GFXFilledEllipseColor ( dst, x, y, rx, ry, color )
-    SDL_Surface* dst;
-    Sint16 x;
-    Sint16 y;
-    Sint16 rx;
-    Sint16 ry;
-    Uint32 color;
-CODE:
-     RETVAL = filledEllipseColor( dst, x, y, rx, ry, color );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x
+       Sint16 y
+       Sint16 rx
+       Sint16 ry
+       Uint32 color
+       CODE:
+               RETVAL = filledEllipseColor( dst, x, y, rx, ry, color );
+       OUTPUT:
+               RETVAL
 
 int
 GFXFilledEllipseRGBA ( dst, x, y, rx, ry, r, g, b, a )
-    SDL_Surface* dst;
-    Sint16 x;
-    Sint16 y;
-    Sint16 rx;
-    Sint16 ry;
-    Uint8 r;
-    Uint8 g;
-    Uint8 b;
-    Uint8 a;
-CODE:
-     RETVAL = filledEllipseRGBA( dst, x, y, rx, ry, r, g, b, a );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x
+       Sint16 y
+       Sint16 rx
+       Sint16 ry
+       Uint8 r
+       Uint8 g
+       Uint8 b
+       Uint8 a
+       CODE:
+               RETVAL = filledEllipseRGBA( dst, x, y, rx, ry, r, g, b, a );
+       OUTPUT:
+               RETVAL
 
 int
 GFXFilledPieColor ( dst, x, y, rad, start, end, color )
-    SDL_Surface* dst;
-    Sint16 x;
-    Sint16 y;
-    Sint16 rad;
-    Sint16 start;
-    Sint16 end;
-    Uint32 color;
-CODE:
-     RETVAL = filledPieColor( dst, x, y, rad, start, end, color );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x
+       Sint16 y
+       Sint16 rad
+       Sint16 start
+       Sint16 end
+       Uint32 color
+       CODE:
+               RETVAL = filledPieColor( dst, x, y, rad, start, end, color );
+       OUTPUT:
+               RETVAL
 
 int
 GFXFilledPieRGBA ( dst, x, y, rad, start, end, r, g, b, a )
-    SDL_Surface* dst;
-    Sint16 x;
-    Sint16 y;
-    Sint16 rad;
-    Sint16 start;
-    Sint16 end;
-    Uint8 r;
-    Uint8 g;
-    Uint8 b;
-    Uint8 a;
-CODE:
-     RETVAL = filledPieRGBA( dst, x, y, rad, start, end, r, g, b, a );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x
+       Sint16 y
+       Sint16 rad
+       Sint16 start
+       Sint16 end
+       Uint8 r
+       Uint8 g
+       Uint8 b
+       Uint8 a
+       CODE:
+               RETVAL = filledPieRGBA( dst, x, y, rad, start, end, r, g, b, a );
+       OUTPUT:
+               RETVAL
 
 int
 GFXPolygonColor ( dst, vx, vy, n, color )
-    SDL_Surface* dst;
-    Sint16* vx;
-    Sint16* vy;
-    int n;
-    Uint32 color;
-CODE:
-     RETVAL = polygonColor( dst, vx, vy, n, color );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16* vx
+       Sint16* vy
+       int n
+       Uint32 color;
+       CODE:
+               RETVAL = polygonColor( dst, vx, vy, n, color );
+       OUTPUT:
+               RETVAL
 
 int
 GFXPolygonRGBA ( dst, vx, vy, n, r, g, b, a )
-    SDL_Surface* dst;
-    Sint16* vx;
-    Sint16* vy;
-    int n;
-    Uint8 r;
-    Uint8 g;
-    Uint8 b;
-    Uint8 a;
-CODE:
-     RETVAL = polygonRGBA( dst, vx, vy, n, r, g, b, a );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16* vx
+       Sint16* vy
+       int n
+       Uint8 r
+       Uint8 g
+       Uint8 b
+       Uint8 a
+       CODE:
+               RETVAL = polygonRGBA( dst, vx, vy, n, r, g, b, a );
+       OUTPUT:
+               RETVAL
 
 int
 GFXAapolygonColor ( dst, vx, vy, n, color )
-    SDL_Surface* dst;
-    Sint16* vx;
-    Sint16* vy;
-    int n;
-    Uint32 color;
-CODE:
-     RETVAL = aapolygonColor( dst, vx, vy, n, color );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16* vx
+       Sint16* vy
+       int n
+       Uint32 color
+       CODE:
+               RETVAL = aapolygonColor( dst, vx, vy, n, color );
+       OUTPUT:
+               RETVAL
 
 int
 GFXAapolygonRGBA ( dst, vx, vy, n, r, g, b, a )
-    SDL_Surface* dst;
-    Sint16* vx;
-    Sint16* vy;
-    int n;
-    Uint8 r;
-    Uint8 g;
-    Uint8 b;
-    Uint8 a;
-CODE:
-     RETVAL = aapolygonRGBA( dst, vx, vy, n, r, g, b, a );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16* vx
+       Sint16* vy
+       int n
+       Uint8 r
+       Uint8 g
+       Uint8 b
+       Uint8 a
+       CODE:
+               RETVAL = aapolygonRGBA( dst, vx, vy, n, r, g, b, a );
+       OUTPUT:
+               RETVAL
 
 int
 GFXFilledPolygonColor ( dst, vx, vy, n, color )
-    SDL_Surface* dst;
-    Sint16* vx;
-    Sint16* vy;
-    int n;
-    int color;
-CODE:
-     RETVAL = filledPolygonColor( dst, vx, vy, n, color );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16* vx
+       Sint16* vy
+       int n
+       int color
+       CODE:
+               RETVAL = filledPolygonColor( dst, vx, vy, n, color );
+       OUTPUT:
+               RETVAL
 
 int
 GFXFilledPolygonRGBA ( dst, vx, vy, n, r, g, b, a )
-    SDL_Surface* dst;
-    Sint16* vx;
-    Sint16* vy;
-    int n;
-    Uint8 r;
-    Uint8 g;
-    Uint8 b;
-    Uint8 a;
-CODE:
-     RETVAL = filledPolygonRGBA( dst, vx, vy, n, r, g, b, a );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16* vx
+       Sint16* vy
+       int n
+       Uint8 r
+       Uint8 g
+       Uint8 b
+       Uint8 a
+       CODE:
+               RETVAL = filledPolygonRGBA( dst, vx, vy, n, r, g, b, a );
+       OUTPUT:
+               RETVAL
 
 int
 GFXCharacterColor ( dst, x, y, c, color )
-    SDL_Surface* dst;
-    Sint16 x;
-    Sint16 y;
-    char c;
-    Uint32 color;
-CODE:
-     RETVAL = characterColor( dst, x, y, c, color );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x
+       Sint16 y
+       char c
+       Uint32 color
+       CODE:
+               RETVAL = characterColor( dst, x, y, c, color );
+       OUTPUT:
+               RETVAL
 
 int
 GFXCharacterRGBA ( dst, x, y, c, r, g, b, a )
-    SDL_Surface* dst;
-    Sint16 x;
-    Sint16 y;
-    char c;
-    Uint8 r;
-    Uint8 g;
-    Uint8 b;
-    Uint8 a;
-CODE:
-     RETVAL = characterRGBA( dst, x, y, c, r, g, b, a );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x
+       Sint16 y
+       char c
+       Uint8 r
+       Uint8 g
+       Uint8 b
+       Uint8 a
+       CODE:
+               RETVAL = characterRGBA( dst, x, y, c, r, g, b, a );
+       OUTPUT:
+               RETVAL
 
 int
 GFXStringColor ( dst, x, y, c, color )
-    SDL_Surface* dst;
-    Sint16 x;
-    Sint16 y;
-    char* c;
-    Uint32 color;
-CODE:
-     RETVAL = stringColor( dst, x, y, c, color );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x
+       Sint16 y
+       char* c
+       Uint32 color
+       CODE:
+               RETVAL = stringColor( dst, x, y, c, color );
+       OUTPUT:
+               RETVAL
 
 int
 GFXStringRGBA ( dst, x, y, c, r, g, b, a )
-    SDL_Surface* dst;
-    Sint16 x;
-    Sint16 y;
-    char* c;
-    Uint8 r;
-    Uint8 g;
-    Uint8 b;
-    Uint8 a;
-CODE:
-     RETVAL = stringRGBA( dst, x, y, c, r, g, b, a );
-OUTPUT:
-     RETVAL
+       SDL_Surface* dst
+       Sint16 x
+       Sint16 y
+       char* c
+       Uint8 r
+       Uint8 g
+       Uint8 b
+       Uint8 a
+       CODE:
+               RETVAL = stringRGBA( dst, x, y, c, r, g, b, a );
+       OUTPUT:
+               RETVAL
+
+#endif
+
+
+#ifdef HAVE_SDL_SVG
+
+SDL_svg_context *
+SVG_Load ( filename )
+       char* filename
+       CODE:
+               RETVAL = SVG_Load(filename);
+       OUTPUT:
+               RETVAL
+
+SDL_svg_context *
+SVG_LoadBuffer ( data, len )
+       char* data
+       int len
+       CODE:
+               RETVAL = SVG_LoadBuffer(data,len);
+       OUTPUT:
+               RETVAL
+
+int
+SVG_SetOffset ( source, xoff, yoff )
+       SDL_svg_context* source
+       double xoff
+       double yoff
+       CODE:
+               RETVAL = SVG_SetOffset(source,xoff,yoff);
+       OUTPUT:
+               RETVAL
+
+int
+SVG_SetScale ( source, xscale, yscale )
+       SDL_svg_context* source
+       double xscale
+       double yscale
+       CODE:
+               RETVAL = SVG_SetScale(source,xscale,yscale);
+       OUTPUT:
+               RETVAL
+
+int
+SVG_RenderToSurface ( source, x, y, dest )
+       SDL_svg_context* source
+       int x
+       int y
+       SDL_Surface* dest;
+       CODE:
+               RETVAL = SVG_RenderToSurface(source,x,y,dest);
+       OUTPUT:
+               RETVAL
+
+void
+SVG_Free ( source )
+       SDL_svg_context* source
+       CODE:
+               SVG_Free(source);       
+
+void
+SVG_Set_Flags ( source, flags )
+       SDL_svg_context* source
+       Uint32 flags
+       CODE:
+               SVG_Set_Flags(source,flags);
+
+float
+SVG_Width ( source )
+       SDL_svg_context* source
+       CODE:
+               RETVAL = SVG_Width(source);
+       OUTPUT:
+               RETVAL
+
+float
+SVG_HEIGHT ( source )
+       SDL_svg_context* source
+       CODE:
+               RETVAL = SVG_Height(source);
+       OUTPUT:
+               RETVAL
+
+void
+SVG_SetClipping ( source, minx, miny, maxx, maxy )
+       SDL_svg_context* source
+       int minx
+       int miny
+       int maxx
+       int maxy
+       CODE:
+               SVG_SetClipping(source,minx,miny,maxx,maxy);
+
+int
+SVG_Version ( )
+       CODE:
+               RETVAL = SVG_Version();
+       OUTPUT:
+               RETVAL
+
 
 #endif
 
@@ -4125,14 +3891,14 @@ AV*
 SoundDecoderInfoExtensions ( decoderinfo )
        Sound_DecoderInfo* decoderinfo
        CODE:
-               char **ext;
+               const char **ext;
                for ( ext = decoderinfo->extensions; *ext != NULL; ext++ ){
-                       av_push(RETVAL,sv_2mortal(newSVpv(*ext,0)));
+                       av_push(RETVAL,newSVpv(*ext,0));
                }
        OUTPUT:
                RETVAL
 
-char*
+const char*
 SoundDecoderInfoDescription ( decoderinfo )
        Sound_DecoderInfo* decoderinfo
        CODE:
@@ -4140,7 +3906,7 @@ SoundDecoderInfoDescription ( decoderinfo )
        OUTPUT:
                RETVAL
 
-char*
+const char*
 SoundDecoderInfoAuthor ( decoderinfo )
        Sound_DecoderInfo* decoderinfo
        CODE:
@@ -4148,7 +3914,7 @@ SoundDecoderInfoAuthor ( decoderinfo )
        OUTPUT:
                RETVAL
 
-char*
+const char*
 SoundDecoderInfoUrl ( decoderinfo )
        Sound_DecoderInfo* decoderinfo
        CODE:
@@ -4192,7 +3958,7 @@ Uint32
 SoundSampleBufferSize ( sample )
        Sound_Sample* sample
        CODE:
-               RETVAL = sample->buffer;
+               RETVAL = sample->buffer_size;
        OUTPUT:
                RETVAL
 
@@ -4204,7 +3970,192 @@ SoundSampleFlags ( sample )
        OUTPUT:
                RETVAL
 
+int
+Sound_Init ( )
+       CODE:
+               RETVAL = Sound_Init();
+       OUTPUT:
+               RETVAL
+
+int
+Sound_Quit ( )
+       CODE:
+               RETVAL = Sound_Quit();
+       OUTPUT:
+               RETVAL
+
+AV*
+Sound_AvailableDecoders ( )
+       CODE:
+               RETVAL = newAV();
+               const Sound_DecoderInfo** sdi;
+               sdi = Sound_AvailableDecoders();
+               if (sdi != NULL)  {
+                       for (;*sdi != NULL; ++sdi) {
+                               av_push(RETVAL,sv_2mortal(newSViv(PTR2IV(*sdi))));
+                       }
+               }
+       OUTPUT:
+               RETVAL
+
+const char*
+Sound_GetError ( )
+       CODE:
+               RETVAL = Sound_GetError();
+       OUTPUT:
+               RETVAL
+
+void
+Sound_ClearError ( )
+       CODE:
+               Sound_ClearError();
+
+Sound_Sample*
+Sound_NewSample ( rw, ext, desired, buffsize )
+       SDL_RWops* rw
+       const char* ext
+       Sound_AudioInfo* desired
+       Uint32 buffsize
+       CODE:
+               RETVAL = Sound_NewSample(rw,ext,desired,buffsize);
+       OUTPUT:
+               RETVAL
+
+Sound_Sample*
+Sound_NewSampleFromMem ( data, size, ext, desired, buffsize )
+       const Uint8 *data
+       Uint32 size
+       const char* ext
+       Sound_AudioInfo* desired
+       Uint32 buffsize
+       CODE:
+               RETVAL = Sound_NewSampleFromMem(data,size,ext,desired,buffsize);
+       OUTPUT:
+               RETVAL
+
+Sound_Sample*
+Sound_NewSampleFromFile ( fname, desired, buffsize )
+       const char* fname
+       Sound_AudioInfo* desired
+       Uint32 buffsize
+       CODE:
+               RETVAL = Sound_NewSampleFromFile(fname,desired,buffsize);
+       OUTPUT:
+               RETVAL
+
+void
+Sound_FreeSample ( sample )
+       Sound_Sample* sample
+       CODE:
+               Sound_FreeSample(sample);
+
+Sint32
+Sound_GetDuration ( sample )
+       Sound_Sample* sample
+       CODE:
+               RETVAL = Sound_GetDuration(sample);
+       OUTPUT:
+               RETVAL
+
+int
+Sound_SetBufferSize ( sample, size )
+       Sound_Sample* sample
+       Uint32 size
+       CODE:
+               RETVAL = Sound_SetBufferSize(sample,size);
+       OUTPUT:
+               RETVAL
+
+Uint32
+Sound_Decode ( sample )
+       Sound_Sample* sample
+       CODE:
+               RETVAL = Sound_Decode(sample);
+       OUTPUT:
+               RETVAL
+
+Uint32
+Sound_DecodeAll ( sample ) 
+       Sound_Sample* sample
+       CODE:
+               RETVAL = Sound_DecodeAll(sample);
+       OUTPUT:
+               RETVAL
+
+int
+Sound_Rewind ( sample )
+       Sound_Sample* sample
+       CODE:
+               RETVAL = Sound_Rewind(sample);
+       OUTPUT:
+               RETVAL
+
+int
+Sound_Seek ( sample, ms )
+       Sound_Sample* sample
+       Uint32 ms
+       CODE:
+               RETVAL = Sound_Seek(sample,ms);
+       OUTPUT:
+               RETVAL
+
+#endif
+
+#ifdef HAVE_SDL_TTF
+
+int
+TTF_Init ()
+       CODE:
+               RETVAL = TTF_Init();
+       OUTPUT:
+               RETVAL
+
+void
+TTF_Quit ()
+       CODE:
+               TTF_Quit();
+
+TTF_Font*
+TTF_OpenFont ( file, ptsize )
+       char *file
+       int ptsize
+       CODE:
+               char* CLASS = "SDL::TTF_Font";
+               RETVAL = TTF_OpenFont(file,ptsize);
+       OUTPUT:
+               RETVAL
+
+AV*
+TTF_SizeText ( font, text )
+       TTF_Font *font
+       char *text
+       CODE:
+               int w,h;
+               RETVAL = newAV();
+               if(TTF_SizeText(font,text,&w,&h))
+               {
+                       printf("TTF error at TTFSizeText: %s \n", TTF_GetError());
+                       Perl_croak (aTHX_ "TTF error \n");
+               }
+               else
+               {
+                       av_push(RETVAL,newSViv(w));
+                       av_push(RETVAL,newSViv(h));
+                       sv_2mortal((SV*)RETVAL);
+               }
+       OUTPUT:
+               RETVAL
 
+SDL_Surface*
+TTF_RenderText_Blended ( font, text, fg )
+       TTF_Font *font
+       char *text
+       SDL_Color *fg
+       CODE:
+               char* CLASS = "SDL::Surface";
+               RETVAL = TTF_RenderText_Blended(font,text,*fg);
+       OUTPUT:
+               RETVAL
 
 #endif