Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/pygame/pygame.h
diff options
context:
space:
mode:
authorolpc <olpc@xo-0D-2D-97.localdomain>2009-01-17 18:41:32 (GMT)
committer olpc <olpc@xo-0D-2D-97.localdomain>2009-01-17 18:41:32 (GMT)
commit9e64dbd7cd3093353f87e5a69006d8c449a58313 (patch)
tree8f9aa1da589d22956f59d05a2bbf4a34a7efa775 /pygame/pygame.h
parentb30efd562477d84c2820e1f18987b2a1516c6d40 (diff)
adding trimmed pygame from SVN
Diffstat (limited to 'pygame/pygame.h')
-rwxr-xr-xpygame/pygame.h651
1 files changed, 651 insertions, 0 deletions
diff --git a/pygame/pygame.h b/pygame/pygame.h
new file mode 100755
index 0000000..2f360c0
--- /dev/null
+++ b/pygame/pygame.h
@@ -0,0 +1,651 @@
+/*
+ pygame - Python Game Library
+ Copyright (C) 2000-2001 Pete Shinners
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+ Pete Shinners
+ pete@shinners.org
+*/
+
+#ifndef PYGAME_H
+#define PYGAME_H
+
+/** This header file includes all the definitions for the
+ ** base pygame extensions. This header only requires
+ ** SDL and Python includes. The reason for functions
+ ** prototyped with #define's is to allow for maximum
+ ** python portability. It also uses python as the
+ ** runtime linker, which allows for late binding. For more
+ ** information on this style of development, read the Python
+ ** docs on this subject.
+ ** http://www.python.org/doc/current/ext/using-cobjects.html
+ **
+ ** If using this to build your own derived extensions,
+ ** you'll see that the functions available here are mainly
+ ** used to help convert between python objects and SDL objects.
+ ** Since this library doesn't add a lot of functionality to
+ ** the SDL libarary, it doesn't need to offer a lot either.
+ **
+ ** When initializing your extension module, you must manually
+ ** import the modules you want to use. (this is the part about
+ ** using python as the runtime linker). Each module has its
+ ** own import_xxx() routine. You need to perform this import
+ ** after you have initialized your own module, and before
+ ** you call any routines from that module. Since every module
+ ** in pygame does this, there are plenty of examples.
+ **
+ ** The base module does include some useful conversion routines
+ ** that you are free to use in your own extension.
+ **
+ ** When making changes, it is very important to keep the
+ ** FIRSTSLOT and NUMSLOT constants up to date for each
+ ** section. Also be sure not to overlap any of the slots.
+ ** When you do make a mistake with this, it will result
+ ** is a dereferenced NULL pointer that is easier to diagnose
+ ** than it could be :]
+ **/
+#if defined(HAVE_SNPRINTF) /* defined in python.h (pyerrors.h) and SDL.h (SDL_config.h) */
+#undef HAVE_SNPRINTF /* remove GCC redefine warning */
+#endif
+
+#include <Python.h>
+
+#if defined(HAVE_SNPRINTF)
+#undef HAVE_SNPRINTF
+#endif
+
+#ifdef MS_WIN32 /*Python gives us MS_WIN32, SDL needs just WIN32*/
+#ifndef WIN32
+#define WIN32
+#endif
+#endif
+
+#include <SDL.h>
+
+/* macros used throughout the source */
+#define RAISE(x,y) (PyErr_SetString((x), (y)), (PyObject*)NULL)
+
+#if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION == 3
+# define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None
+# define Py_RETURN_TRUE return Py_INCREF(Py_True), Py_True
+# define Py_RETURN_FALSE return Py_INCREF(Py_False), Py_False
+#endif
+
+/* Py_ssize_t availability. */
+#if PY_VERSION_HEX < 0x02050000 && !defined(PY_SSIZE_T_MIN)
+typedef int Py_ssize_t;
+#define PY_SSIZE_T_MAX INT_MAX
+#define PY_SSIZE_T_MIN INT_MIN
+typedef inquiry lenfunc;
+typedef intargfunc ssizeargfunc;
+typedef intobjargproc ssizeobjargproc;
+typedef intintargfunc ssizessizeargfunc;
+typedef intintobjargproc ssizessizeobjargproc;
+typedef getreadbufferproc readbufferproc;
+typedef getwritebufferproc writebufferproc;
+typedef getsegcountproc segcountproc;
+typedef getcharbufferproc charbufferproc;
+#endif
+
+#define PyType_Init(x) (((x).ob_type) = &PyType_Type)
+#define PYGAMEAPI_LOCAL_ENTRY "_PYGAME_C_API"
+
+#ifndef MIN
+#define MIN(a,b) ((a) < (b) ? (a) : (b))
+#endif
+
+#ifndef MAX
+#define MAX(a,b) ( (a) > (b) ? (a) : (b))
+#endif
+
+#ifndef ABS
+#define ABS(a) (((a) < 0) ? -(a) : (a))
+#endif
+
+/* test sdl initializations */
+#define VIDEO_INIT_CHECK() \
+ if(!SDL_WasInit(SDL_INIT_VIDEO)) \
+ return RAISE(PyExc_SDLError, "video system not initialized")
+
+#define CDROM_INIT_CHECK() \
+ if(!SDL_WasInit(SDL_INIT_CDROM)) \
+ return RAISE(PyExc_SDLError, "cdrom system not initialized")
+
+#define JOYSTICK_INIT_CHECK() \
+ if(!SDL_WasInit(SDL_INIT_JOYSTICK)) \
+ return RAISE(PyExc_SDLError, "joystick system not initialized")
+
+/* BASE */
+#define PYGAMEAPI_BASE_FIRSTSLOT 0
+#define PYGAMEAPI_BASE_NUMSLOTS 13
+#ifndef PYGAMEAPI_BASE_INTERNAL
+#define PyExc_SDLError ((PyObject*)PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT])
+
+#define PyGame_RegisterQuit \
+ (*(void(*)(void(*)(void)))PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 1])
+
+#define IntFromObj \
+ (*(int(*)(PyObject*, int*))PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 2])
+
+#define IntFromObjIndex \
+ (*(int(*)(PyObject*, int, int*))PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 3])
+
+#define TwoIntsFromObj \
+ (*(int(*)(PyObject*, int*, int*))PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 4])
+
+#define FloatFromObj \
+ (*(int(*)(PyObject*, float*))PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 5])
+
+#define FloatFromObjIndex \
+ (*(float(*)(PyObject*, int, float*)) \
+ PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 6])
+
+#define TwoFloatsFromObj \
+ (*(int(*)(PyObject*, float*, float*)) \
+ PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 7])
+
+#define UintFromObj \
+ (*(int(*)(PyObject*, Uint32*))PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 8])
+
+#define UintFromObjIndex \
+ (*(int(*)(PyObject*, int, Uint32*)) \
+ PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 9])
+
+#define PyGame_Video_AutoQuit \
+ (*(void(*)(void))PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 10])
+
+#define PyGame_Video_AutoInit \
+ (*(int(*)(void))PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 11])
+
+#define RGBAFromObj \
+ (*(int(*)(PyObject*, Uint8*))PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 12])
+
+#define import_pygame_base() { \
+ PyObject *_module = PyImport_ImportModule("pygame.base"); \
+ if (_module != NULL) { \
+ PyObject *_dict = PyModule_GetDict(_module); \
+ PyObject *_c_api = PyDict_GetItemString(_dict, \
+ PYGAMEAPI_LOCAL_ENTRY); \
+ if(PyCObject_Check(_c_api)) { \
+ int i; void** localptr = (void**)PyCObject_AsVoidPtr(_c_api); \
+ for(i = 0; i < PYGAMEAPI_BASE_NUMSLOTS; ++i) \
+ PyGAME_C_API[i + PYGAMEAPI_BASE_FIRSTSLOT] = localptr[i]; \
+ } \
+ Py_DECREF(_module); \
+ } \
+ }
+#endif
+
+
+/* RECT */
+#define PYGAMEAPI_RECT_FIRSTSLOT \
+ (PYGAMEAPI_BASE_FIRSTSLOT + PYGAMEAPI_BASE_NUMSLOTS)
+#define PYGAMEAPI_RECT_NUMSLOTS 4
+
+typedef struct {
+ int x, y;
+ int w, h;
+}GAME_Rect;
+
+typedef struct {
+ PyObject_HEAD
+ GAME_Rect r;
+ PyObject *weakreflist;
+} PyRectObject;
+
+#define PyRect_AsRect(x) (((PyRectObject*)x)->r)
+#ifndef PYGAMEAPI_RECT_INTERNAL
+#define PyRect_Check(x) \
+ ((x)->ob_type == (PyTypeObject*)PyGAME_C_API[PYGAMEAPI_RECT_FIRSTSLOT + 0])
+#define PyRect_Type (*(PyTypeObject*)PyGAME_C_API[PYGAMEAPI_RECT_FIRSTSLOT + 0])
+#define PyRect_New \
+ (*(PyObject*(*)(SDL_Rect*))PyGAME_C_API[PYGAMEAPI_RECT_FIRSTSLOT + 1])
+#define PyRect_New4 \
+ (*(PyObject*(*)(int,int,int,int))PyGAME_C_API[PYGAMEAPI_RECT_FIRSTSLOT + 2])
+#define GameRect_FromObject \
+ (*(GAME_Rect*(*)(PyObject*, GAME_Rect*)) \
+ PyGAME_C_API[PYGAMEAPI_RECT_FIRSTSLOT + 3])
+
+#define import_pygame_rect() { \
+ PyObject *_module = PyImport_ImportModule("pygame.rect"); \
+ if (_module != NULL) { \
+ PyObject *_dict = PyModule_GetDict(_module); \
+ PyObject *_c_api = PyDict_GetItemString(_dict, \
+ PYGAMEAPI_LOCAL_ENTRY); \
+ if(PyCObject_Check(_c_api)) { \
+ int i; void** localptr = (void**)PyCObject_AsVoidPtr(_c_api); \
+ for(i = 0; i < PYGAMEAPI_RECT_NUMSLOTS; ++i) \
+ PyGAME_C_API[i + PYGAMEAPI_RECT_FIRSTSLOT] = localptr[i]; \
+ } \
+ Py_DECREF(_module); \
+ } \
+ }
+#endif
+
+
+/* CDROM */
+#define PYGAMEAPI_CDROM_FIRSTSLOT \
+ (PYGAMEAPI_RECT_FIRSTSLOT + PYGAMEAPI_RECT_NUMSLOTS)
+#define PYGAMEAPI_CDROM_NUMSLOTS 2
+
+typedef struct {
+ PyObject_HEAD
+ int id;
+} PyCDObject;
+
+#define PyCD_AsID(x) (((PyCDObject*)x)->id)
+#ifndef PYGAMEAPI_CDROM_INTERNAL
+#define PyCD_Check(x) \
+ ((x)->ob_type == (PyTypeObject*)PyGAME_C_API[PYGAMEAPI_CDROM_FIRSTSLOT + 0])
+#define PyCD_Type (*(PyTypeObject*)PyGAME_C_API[PYGAMEAPI_CDROM_FIRSTSLOT + 0])
+#define PyCD_New \
+ (*(PyObject*(*)(int))PyGAME_C_API[PYGAMEAPI_CDROM_FIRSTSLOT + 1])
+
+#define import_pygame_cd() { \
+ PyObject *_module = PyImport_ImportModule("pygame.cdrom"); \
+ if (_module != NULL) { \
+ PyObject *_dict = PyModule_GetDict(_module); \
+ PyObject *_c_api = PyDict_GetItemString(_dict, \
+ PYGAMEAPI_LOCAL_ENTRY); \
+ if(PyCObject_Check(_c_api)) { \
+ int i; void** localptr = (void**)PyCObject_AsVoidPtr(_c_api); \
+ for(i = 0; i < PYGAMEAPI_CDROM_NUMSLOTS; ++i) \
+ PyGAME_C_API[i + PYGAMEAPI_CDROM_FIRSTSLOT] = localptr[i]; \
+ } \
+ Py_DECREF(_module); \
+ } \
+ }
+#endif
+
+
+/* JOYSTICK */
+#define PYGAMEAPI_JOYSTICK_FIRSTSLOT \
+ (PYGAMEAPI_CDROM_FIRSTSLOT + PYGAMEAPI_CDROM_NUMSLOTS)
+#define PYGAMEAPI_JOYSTICK_NUMSLOTS 2
+
+typedef struct {
+ PyObject_HEAD
+ int id;
+} PyJoystickObject;
+
+#define PyJoystick_AsID(x) (((PyJoystickObject*)x)->id)
+
+#ifndef PYGAMEAPI_JOYSTICK_INTERNAL
+#define PyJoystick_Check(x) \
+ ((x)->ob_type == (PyTypeObject*) \
+ PyGAME_C_API[PYGAMEAPI_JOYSTICK_FIRSTSLOT + 0])
+
+#define PyJoystick_Type \
+ (*(PyTypeObject*)PyGAME_C_API[PYGAMEAPI_JOYSTICK_FIRSTSLOT + 0])
+#define PyJoystick_New \
+ (*(PyObject*(*)(int))PyGAME_C_API[PYGAMEAPI_JOYSTICK_FIRSTSLOT + 1])
+
+#define import_pygame_joystick() { \
+ PyObject *_module = PyImport_ImportModule("pygame.joystick"); \
+ if (_module != NULL) { \
+ PyObject *_dict = PyModule_GetDict(_module); \
+ PyObject *_c_api = PyDict_GetItemString(_dict, \
+ PYGAMEAPI_LOCAL_ENTRY); \
+ if(PyCObject_Check(_c_api)) { \
+ int i; void** localptr = (void**)PyCObject_AsVoidPtr(_c_api); \
+ for(i = 0; i < PYGAMEAPI_JOYSTICK_NUMSLOTS; ++i) \
+ PyGAME_C_API[i + PYGAMEAPI_JOYSTICK_FIRSTSLOT] = \
+ localptr[i]; \
+ } \
+ Py_DECREF(_module); \
+ } \
+ }
+#endif
+
+
+/* DISPLAY */
+#define PYGAMEAPI_DISPLAY_FIRSTSLOT \
+ (PYGAMEAPI_JOYSTICK_FIRSTSLOT + PYGAMEAPI_JOYSTICK_NUMSLOTS)
+#define PYGAMEAPI_DISPLAY_NUMSLOTS 2
+typedef struct {
+ PyObject_HEAD
+ SDL_VideoInfo info;
+} PyVidInfoObject;
+
+#define PyVidInfo_AsVidInfo(x) (((PyVidInfoObject*)x)->info)
+#ifndef PYGAMEAPI_DISPLAY_INTERNAL
+#define PyVidInfo_Check(x) \
+ ((x)->ob_type == (PyTypeObject*) \
+ PyGAME_C_API[PYGAMEAPI_DISPLAY_FIRSTSLOT + 0])
+
+#define PyVidInfo_Type \
+ (*(PyTypeObject*)PyGAME_C_API[PYGAMEAPI_SURFACE_FIRSTSLOT + 0])
+#define PyVidInfo_New \
+ (*(PyObject*(*)(SDL_VideoInfo*)) \
+ PyGAME_C_API[PYGAMEAPI_DISPLAY_FIRSTSLOT + 1])
+#define import_pygame_display() { \
+ PyObject *_module = PyImport_ImportModule("pygame.display"); \
+ if (_module != NULL) { \
+ PyObject *_dict = PyModule_GetDict(_module); \
+ PyObject *_c_api = PyDict_GetItemString(_dict, \
+ PYGAMEAPI_LOCAL_ENTRY); \
+ if(PyCObject_Check(_c_api)) { \
+ int i; void** localptr = (void**)PyCObject_AsVoidPtr(_c_api); \
+ for(i = 0; i < PYGAMEAPI_DISPLAY_NUMSLOTS; ++i) \
+ PyGAME_C_API[i + PYGAMEAPI_DISPLAY_FIRSTSLOT] = \
+ localptr[i]; \
+ } \
+ Py_DECREF(_module); \
+ } \
+ }
+#endif
+
+
+/* SURFACE */
+#define PYGAMEAPI_SURFACE_FIRSTSLOT \
+ (PYGAMEAPI_DISPLAY_FIRSTSLOT + PYGAMEAPI_DISPLAY_NUMSLOTS)
+#define PYGAMEAPI_SURFACE_NUMSLOTS 3
+typedef struct {
+ PyObject_HEAD
+ SDL_Surface* surf;
+ struct SubSurface_Data* subsurface; /*ptr to subsurface data (if a
+ * subsurface)*/
+ PyObject *weakreflist;
+ PyObject *locklist;
+ PyObject *dependency;
+} PySurfaceObject;
+#define PySurface_AsSurface(x) (((PySurfaceObject*)x)->surf)
+#ifndef PYGAMEAPI_SURFACE_INTERNAL
+#define PySurface_Check(x) \
+ ((x)->ob_type == (PyTypeObject*) \
+ PyGAME_C_API[PYGAMEAPI_SURFACE_FIRSTSLOT + 0])
+#define PySurface_Type \
+ (*(PyTypeObject*)PyGAME_C_API[PYGAMEAPI_SURFACE_FIRSTSLOT + 0])
+#define PySurface_New \
+ (*(PyObject*(*)(SDL_Surface*)) \
+ PyGAME_C_API[PYGAMEAPI_SURFACE_FIRSTSLOT + 1])
+#define PySurface_Blit \
+ (*(int(*)(PyObject*,PyObject*,SDL_Rect*,SDL_Rect*,int)) \
+ PyGAME_C_API[PYGAMEAPI_SURFACE_FIRSTSLOT + 2])
+
+#define import_pygame_surface() { \
+ PyObject *_module = PyImport_ImportModule("pygame.surface"); \
+ if (_module != NULL) { \
+ PyObject *_dict = PyModule_GetDict(_module); \
+ PyObject *_c_api = PyDict_GetItemString(_dict, \
+ PYGAMEAPI_LOCAL_ENTRY); \
+ if(PyCObject_Check(_c_api)) { \
+ int i; void** localptr = (void**)PyCObject_AsVoidPtr(_c_api); \
+ for(i = 0; i < PYGAMEAPI_SURFACE_NUMSLOTS; ++i) \
+ PyGAME_C_API[i + PYGAMEAPI_SURFACE_FIRSTSLOT] = \
+ localptr[i]; \
+ } \
+ Py_DECREF(_module); \
+ } \
+ _module = PyImport_ImportModule("pygame.surflock"); \
+ if (_module != NULL) { \
+ PyObject *_dict = PyModule_GetDict(_module); \
+ PyObject *_c_api = PyDict_GetItemString(_dict, \
+ PYGAMEAPI_LOCAL_ENTRY); \
+ if(PyCObject_Check(_c_api)) { \
+ int i; void** localptr = (void**)PyCObject_AsVoidPtr(_c_api); \
+ for(i = 0; i < PYGAMEAPI_SURFLOCK_NUMSLOTS; ++i) \
+ PyGAME_C_API[i + PYGAMEAPI_SURFLOCK_FIRSTSLOT] = \
+ localptr[i]; \
+ } \
+ Py_DECREF(_module); \
+ } \
+ }
+#endif
+
+
+/* SURFLOCK */ /*auto import/init by surface*/
+#define PYGAMEAPI_SURFLOCK_FIRSTSLOT \
+ (PYGAMEAPI_SURFACE_FIRSTSLOT + PYGAMEAPI_SURFACE_NUMSLOTS)
+#define PYGAMEAPI_SURFLOCK_NUMSLOTS 8
+struct SubSurface_Data
+{
+ PyObject* owner;
+ int pixeloffset;
+ int offsetx, offsety;
+};
+
+typedef struct
+{
+ PyObject_HEAD
+ PyObject *surface;
+ PyObject *lockobj;
+ PyObject *weakrefs;
+} PyLifetimeLock;
+
+#ifndef PYGAMEAPI_SURFLOCK_INTERNAL
+#define PyLifetimeLock_Check(x) \
+ ((x)->ob_type == (PyTypeObject*) \
+ PyGAME_C_API[PYGAMEAPI_SURFLOCK_FIRSTSLOT + 0])
+#define PySurface_Prep(x) \
+ if(((PySurfaceObject*)x)->subsurface) \
+ (*(*(void(*)(PyObject*)) \
+ PyGAME_C_API[PYGAMEAPI_SURFLOCK_FIRSTSLOT + 1]))(x)
+
+#define PySurface_Unprep(x) \
+ if(((PySurfaceObject*)x)->subsurface) \
+ (*(*(void(*)(PyObject*)) \
+ PyGAME_C_API[PYGAMEAPI_SURFLOCK_FIRSTSLOT + 2]))(x)
+
+#define PySurface_Lock \
+ (*(int(*)(PyObject*))PyGAME_C_API[PYGAMEAPI_SURFLOCK_FIRSTSLOT + 3])
+#define PySurface_Unlock \
+ (*(int(*)(PyObject*))PyGAME_C_API[PYGAMEAPI_SURFLOCK_FIRSTSLOT + 4])
+#define PySurface_LockBy \
+ (*(int(*)(PyObject*,PyObject*)) \
+ PyGAME_C_API[PYGAMEAPI_SURFLOCK_FIRSTSLOT + 5])
+#define PySurface_UnlockBy \
+ (*(int(*)(PyObject*,PyObject*)) \
+ PyGAME_C_API[PYGAMEAPI_SURFLOCK_FIRSTSLOT + 6])
+#define PySurface_LockLifetime \
+ (*(PyObject*(*)(PyObject*,PyObject*)) \
+ PyGAME_C_API[PYGAMEAPI_SURFLOCK_FIRSTSLOT + 7])
+#endif
+
+
+/* EVENT */
+#define PYGAMEAPI_EVENT_FIRSTSLOT \
+ (PYGAMEAPI_SURFLOCK_FIRSTSLOT + PYGAMEAPI_SURFLOCK_NUMSLOTS)
+#define PYGAMEAPI_EVENT_NUMSLOTS 4
+
+typedef struct {
+ PyObject_HEAD
+ int type;
+ PyObject* dict;
+} PyEventObject;
+
+#ifndef PYGAMEAPI_EVENT_INTERNAL
+#define PyEvent_Check(x) \
+ ((x)->ob_type == (PyTypeObject*)PyGAME_C_API[PYGAMEAPI_EVENT_FIRSTSLOT + 0])
+#define PyEvent_Type \
+ (*(PyTypeObject*)PyGAME_C_API[PYGAMEAPI_EVENT_FIRSTSLOT + 0])
+#define PyEvent_New \
+ (*(PyObject*(*)(SDL_Event*))PyGAME_C_API[PYGAMEAPI_EVENT_FIRSTSLOT + 1])
+#define PyEvent_New2 \
+ (*(PyObject*(*)(int, PyObject*))PyGAME_C_API[PYGAMEAPI_EVENT_FIRSTSLOT + 2])
+#define PyEvent_FillUserEvent \
+ (*(int (*)(PyEventObject*, SDL_Event*)) \
+ PyGAME_C_API[PYGAMEAPI_EVENT_FIRSTSLOT + 3])
+#define import_pygame_event() { \
+ PyObject *_module = PyImport_ImportModule("pygame.event"); \
+ if (_module != NULL) { \
+ PyObject *_dict = PyModule_GetDict(_module); \
+ PyObject *_c_api = PyDict_GetItemString(_dict, \
+ PYGAMEAPI_LOCAL_ENTRY); \
+ if(PyCObject_Check(_c_api)) { \
+ int i; void** localptr = (void**)PyCObject_AsVoidPtr(_c_api); \
+ for(i = 0; i < PYGAMEAPI_EVENT_NUMSLOTS; ++i) \
+ PyGAME_C_API[i + PYGAMEAPI_EVENT_FIRSTSLOT] = localptr[i]; \
+ } \
+ Py_DECREF(_module); \
+ } \
+ }
+#endif
+
+
+/* RWOBJECT */
+/*the rwobject are only needed for C side work, not accessable from python*/
+#define PYGAMEAPI_RWOBJECT_FIRSTSLOT \
+ (PYGAMEAPI_EVENT_FIRSTSLOT + PYGAMEAPI_EVENT_NUMSLOTS)
+#define PYGAMEAPI_RWOBJECT_NUMSLOTS 4
+#ifndef PYGAMEAPI_RWOBJECT_INTERNAL
+#define RWopsFromPython \
+ (*(SDL_RWops*(*)(PyObject*))PyGAME_C_API[PYGAMEAPI_RWOBJECT_FIRSTSLOT + 0])
+#define RWopsCheckPython \
+ (*(int(*)(SDL_RWops*))PyGAME_C_API[PYGAMEAPI_RWOBJECT_FIRSTSLOT + 1])
+#define RWopsFromPythonThreaded \
+ (*(SDL_RWops*(*)(PyObject*))PyGAME_C_API[PYGAMEAPI_RWOBJECT_FIRSTSLOT + 2])
+#define RWopsCheckPythonThreaded \
+ (*(int(*)(SDL_RWops*))PyGAME_C_API[PYGAMEAPI_RWOBJECT_FIRSTSLOT + 3])
+#define import_pygame_rwobject() { \
+ PyObject *_module = PyImport_ImportModule("pygame.rwobject"); \
+ if (_module != NULL) { \
+ PyObject *_dict = PyModule_GetDict(_module); \
+ PyObject *_c_api = PyDict_GetItemString(_dict, \
+ PYGAMEAPI_LOCAL_ENTRY); \
+ if(PyCObject_Check(_c_api)) { \
+ int i; void** localptr = (void**)PyCObject_AsVoidPtr(_c_api); \
+ for(i = 0; i < PYGAMEAPI_RWOBJECT_NUMSLOTS; ++i) \
+ PyGAME_C_API[i + PYGAMEAPI_RWOBJECT_FIRSTSLOT] = \
+ localptr[i]; \
+ } \
+ Py_DECREF(_module); \
+ } \
+ }
+#endif
+
+/* BufferProxy */
+typedef struct
+{
+ PyObject_HEAD
+ PyObject *dict; /* dict for subclassing */
+ PyObject *weakrefs; /* Weakrefs for subclassing */
+ void *buffer; /* Pointer to the buffer of the parent object. */
+ Py_ssize_t length; /* Length of the buffer. */
+ PyObject *parent; /* Parent object associated with this object. */
+ PyObject *lock; /* Lock object for the surface. */
+
+} PyBufferProxy;
+
+#define PYGAMEAPI_BUFFERPROXY_FIRSTSLOT \
+ (PYGAMEAPI_RWOBJECT_FIRSTSLOT + PYGAMEAPI_RWOBJECT_NUMSLOTS)
+#define PYGAMEAPI_BUFFERPROXY_NUMSLOTS 2
+#ifndef PYGAMEAPI_BUFFERPROXY_INTERNAL
+#define PyBufferProxy_Check(x) \
+ ((x)->ob_type == (PyTypeObject*) \
+ PyGAME_C_API[PYGAMEAPI_BUFFERPROXY_FIRSTSLOT + 0])
+#define PyBufferProxy_New \
+ (*(PyObject*(*)(PyObject*, void*, Py_ssize_t, PyObject*)) \
+ PyGAME_C_API[PYGAMEAPI_BUFFERPROXY_FIRSTSLOT + 1])
+#define import_pygame_bufferproxy() \
+ { \
+ PyObject *_module = PyImport_ImportModule ("pygame.bufferproxy");\
+ if (_module != NULL) \
+ { \
+ PyObject *_dict = PyModule_GetDict (_module); \
+ PyObject *_c_api = PyDict_GetItemString \
+ (_dict, PYGAMEAPI_LOCAL_ENTRY); \
+ if (PyCObject_Check (_c_api)) \
+ { \
+ int i; \
+ void** localptr = (void**) PyCObject_AsVoidPtr (_c_api); \
+ for (i = 0; i < PYGAMEAPI_BUFFERPROXY_NUMSLOTS; ++i) \
+ PyGAME_C_API[i + PYGAMEAPI_BUFFERPROXY_FIRSTSLOT] = \
+ localptr[i]; \
+ } \
+ Py_DECREF (_module); \
+ } \
+ }
+#endif /* PYGAMEAPI_BUFFERPROXY_INTERNAL */
+
+/* PixelArray */
+#define PYGAMEAPI_PIXELARRAY_FIRSTSLOT \
+ (PYGAMEAPI_BUFFERPROXY_FIRSTSLOT + PYGAMEAPI_BUFFERPROXY_NUMSLOTS)
+#define PYGAMEAPI_PIXELARRAY_NUMSLOTS 2
+#ifndef PYGAMEAPI_PIXELARRAY_INTERNAL
+#define PyPixelArray_Check(x) \
+ ((x)->ob_type == (PyTypeObject*) \
+ PyGAME_C_API[PYGAMEAPI_PIXELARRAY_FIRSTSLOT + 0])
+#define PyPixelArray_New \
+ (*(PyObject*(*)) PyGAME_C_API[PYGAMEAPI_PIXELARRAY_FIRSTSLOT + 1])
+#define import_pygame_pixelarray() \
+ { \
+ PyObject *_module = PyImport_ImportModule ("pygame.pixelarray"); \
+ if (_module != NULL) \
+ { \
+ PyObject *_dict = PyModule_GetDict (_module); \
+ PyObject *_c_api = PyDict_GetItemString \
+ (_dict, PYGAMEAPI_LOCAL_ENTRY); \
+ if (PyCObject_Check (_c_api)) \
+ { \
+ int i; \
+ void** localptr = (void**) PyCObject_AsVoidPtr (_c_api); \
+ for (i = 0; i < PYGAMEAPI_PIXELARRAY_NUMSLOTS; ++i) \
+ PyGAME_C_API[i + PYGAMEAPI_PIXELARRAY_FIRSTSLOT] = \
+ localptr[i]; \
+ } \
+ Py_DECREF (_module); \
+ } \
+ }
+#endif /* PYGAMEAPI_PIXELARRAY_INTERNAL */
+
+/* Color */
+#define PYGAMEAPI_COLOR_FIRSTSLOT \
+ (PYGAMEAPI_PIXELARRAY_FIRSTSLOT + PYGAMEAPI_PIXELARRAY_NUMSLOTS)
+#define PYGAMEAPI_COLOR_NUMSLOTS 3
+#ifndef PYGAMEAPI_COLOR_INTERNAL
+#define PyColor_Check(x) \
+ ((x)->ob_type == (PyTypeObject*) \
+ PyGAME_C_API[PYGAMEAPI_COLOR_FIRSTSLOT + 0])
+#define PyColor_New \
+ (*(PyObject*(*)) PyGAME_C_API[PYGAMEAPI_COLOR_FIRSTSLOT + 1])
+#define RGBAFromColorObj \
+ (*(int(*)(PyObject*, Uint8*)) PyGAME_C_API[PYGAMEAPI_COLOR_FIRSTSLOT + 2])
+#define import_pygame_color() \
+ { \
+ PyObject *_module = PyImport_ImportModule ("pygame.color"); \
+ if (_module != NULL) \
+ { \
+ PyObject *_dict = PyModule_GetDict (_module); \
+ PyObject *_c_api = PyDict_GetItemString \
+ (_dict, PYGAMEAPI_LOCAL_ENTRY); \
+ if (PyCObject_Check (_c_api)) \
+ { \
+ int i; \
+ void** localptr = (void**) PyCObject_AsVoidPtr (_c_api); \
+ for (i = 0; i < PYGAMEAPI_COLOR_NUMSLOTS; ++i) \
+ PyGAME_C_API[i + PYGAMEAPI_COLOR_FIRSTSLOT] = \
+ localptr[i]; \
+ } \
+ Py_DECREF (_module); \
+ } \
+ }
+#endif /* PYGAMEAPI_COLOR_INTERNAL */
+
+#ifndef NO_PYGAME_C_API
+#define PYGAMEAPI_TOTALSLOTS \
+ (PYGAMEAPI_COLOR_FIRSTSLOT + PYGAMEAPI_COLOR_NUMSLOTS)
+static void* PyGAME_C_API[PYGAMEAPI_TOTALSLOTS] = { NULL };
+#endif
+
+/*last platform compiler stuff*/
+#if defined(macintosh) && defined(__MWERKS__)
+#define PYGAME_EXPORT __declspec(export)
+#else
+#define PYGAME_EXPORT
+#endif
+
+#endif /* PYGAME_H */