From 1a6d89253dd0d2c2598678800af04b89a6f79b1a Mon Sep 17 00:00:00 2001 From: Lee Salzman Date: Sat, 7 Nov 2009 05:52:12 +0000 Subject: [PATCH] SDL 1.2.14 git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@4685 e016b1c5-ed68-44aa-a2f7-31cac88cffde --- bin_win32/SDL.dll | Bin 321536 -> 320512 bytes bin_win32/SDL_image.dll | Bin 40448 -> 40448 bytes source/include/SDL.h | 47 ++-- source/include/SDL_active.h | 19 +- source/include/SDL_audio.h | 237 +++++++++------- source/include/SDL_byteorder.h | 7 +- source/include/SDL_cdrom.h | 165 +++++++----- source/include/SDL_config.h | 2 +- source/include/SDL_config_macosx.h | 19 +- source/include/SDL_config_win32.h | 5 +- source/include/SDL_copying.h | 2 +- source/include/SDL_cpuinfo.h | 32 +-- source/include/SDL_endian.h | 45 ++-- source/include/SDL_error.h | 21 +- source/include/SDL_events.h | 333 ++++++++++++----------- source/include/SDL_getenv.h | 6 +- source/include/SDL_image.h | 22 +- source/include/SDL_joystick.h | 92 ++++--- source/include/SDL_keyboard.h | 92 ++++--- source/include/SDL_keysym.h | 57 ++-- source/include/SDL_loadso.h | 42 +-- source/include/SDL_main.h | 44 +-- source/include/SDL_mixer.h | 33 ++- source/include/SDL_mouse.h | 51 ++-- source/include/SDL_mutex.h | 121 +++++---- source/include/SDL_opengl.h | 15 +- source/include/SDL_platform.h | 16 +- source/include/SDL_quit.h | 37 +-- source/include/SDL_rwops.h | 59 ++-- source/include/SDL_stdinc.h | 72 +++-- source/include/SDL_syswm.h | 101 +++---- source/include/SDL_thread.h | 55 ++-- source/include/SDL_timer.h | 42 +-- source/include/SDL_types.h | 6 +- source/include/SDL_version.h | 36 +-- source/include/SDL_video.h | 416 +++++++++++++++++------------ source/include/begin_code.h | 95 ++++--- source/include/close_code.h | 15 +- source/lib/SDL.lib | Bin 42702 -> 42702 bytes source/lib/SDL_image.lib | Bin 7156 -> 8264 bytes 40 files changed, 1454 insertions(+), 1005 deletions(-) diff --git a/bin_win32/SDL.dll b/bin_win32/SDL.dll index 3ce97a59deb86e64d75443ff5bbf55a697a501ac..a5da7bbdeb488dad9412311b363c0ad1850fc044 100755 GIT binary patch delta 40185 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 delta 40642 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 delta 5319 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 VQ7=>%tJkZ)R-aJ27ksgv{BIntxuO67 diff --git a/source/include/SDL.h b/source/include/SDL.h index 60ac26ce..119ed7ff 100755 --- a/source/include/SDL.h +++ b/source/include/SDL.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -20,7 +20,9 @@ slouken@libsdl.org */ -/* Main include header for the SDL library */ +/** @file SDL.h + * Main include header for the SDL library + */ #ifndef _SDL_H #define _SDL_H @@ -47,41 +49,46 @@ extern "C" { #endif -/* As of version 0.5, SDL is loaded dynamically into the application */ +/** @file SDL.h + * @note As of version 0.5, SDL is loaded dynamically into the application + */ -/* These are the flags which may be passed to SDL_Init() -- you should - specify the subsystems which you will be using in your application. -*/ +/** @name SDL_INIT Flags + * These are the flags which may be passed to SDL_Init() -- you should + * specify the subsystems which you will be using in your application. + */ +/*@{*/ #define SDL_INIT_TIMER 0x00000001 #define SDL_INIT_AUDIO 0x00000010 #define SDL_INIT_VIDEO 0x00000020 #define SDL_INIT_CDROM 0x00000100 #define SDL_INIT_JOYSTICK 0x00000200 -#define SDL_INIT_NOPARACHUTE 0x00100000 /* Don't catch fatal signals */ -#define SDL_INIT_EVENTTHREAD 0x01000000 /* Not supported on all OS's */ +#define SDL_INIT_NOPARACHUTE 0x00100000 /**< Don't catch fatal signals */ +#define SDL_INIT_EVENTTHREAD 0x01000000 /**< Not supported on all OS's */ #define SDL_INIT_EVERYTHING 0x0000FFFF +/*@}*/ -/* This function loads the SDL dynamically linked library and initializes - * the subsystems specified by 'flags' (and those satisfying dependencies) - * Unless the SDL_INIT_NOPARACHUTE flag is set, it will install cleanup - * signal handlers for some commonly ignored fatal signals (like SIGSEGV) +/** This function loads the SDL dynamically linked library and initializes + * the subsystems specified by 'flags' (and those satisfying dependencies) + * Unless the SDL_INIT_NOPARACHUTE flag is set, it will install cleanup + * signal handlers for some commonly ignored fatal signals (like SIGSEGV) */ extern DECLSPEC int SDLCALL SDL_Init(Uint32 flags); -/* This function initializes specific SDL subsystems */ +/** This function initializes specific SDL subsystems */ extern DECLSPEC int SDLCALL SDL_InitSubSystem(Uint32 flags); -/* This function cleans up specific SDL subsystems */ +/** This function cleans up specific SDL subsystems */ extern DECLSPEC void SDLCALL SDL_QuitSubSystem(Uint32 flags); -/* This function returns mask of the specified subsystems which have - been initialized. - If 'flags' is 0, it returns a mask of all initialized subsystems. -*/ +/** This function returns mask of the specified subsystems which have + * been initialized. + * If 'flags' is 0, it returns a mask of all initialized subsystems. + */ extern DECLSPEC Uint32 SDLCALL SDL_WasInit(Uint32 flags); -/* This function cleans up all initialized subsystems and unloads the - * dynamically linked library. You should call it upon all exit conditions. +/** This function cleans up all initialized subsystems and unloads the + * dynamically linked library. You should call it upon all exit conditions. */ extern DECLSPEC void SDLCALL SDL_Quit(void); diff --git a/source/include/SDL_active.h b/source/include/SDL_active.h index 2cf474c5..0ae92f2d 100755 --- a/source/include/SDL_active.h +++ b/source/include/SDL_active.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -20,7 +20,10 @@ slouken@libsdl.org */ -/* Include file for SDL application focus event handling */ +/** + * @file SDL_active.h + * Include file for SDL application focus event handling + */ #ifndef _SDL_active_h #define _SDL_active_h @@ -34,13 +37,15 @@ extern "C" { #endif -/* The available application states */ -#define SDL_APPMOUSEFOCUS 0x01 /* The app has mouse coverage */ -#define SDL_APPINPUTFOCUS 0x02 /* The app has input focus */ -#define SDL_APPACTIVE 0x04 /* The application is active */ +/** @name The available application states */ +/*@{*/ +#define SDL_APPMOUSEFOCUS 0x01 /**< The app has mouse coverage */ +#define SDL_APPINPUTFOCUS 0x02 /**< The app has input focus */ +#define SDL_APPACTIVE 0x04 /**< The application is active */ +/*@}*/ /* Function prototypes */ -/* +/** * This function returns the current state of the application, which is a * bitwise combination of SDL_APPMOUSEFOCUS, SDL_APPINPUTFOCUS, and * SDL_APPACTIVE. If SDL_APPACTIVE is set, then the user is able to diff --git a/source/include/SDL_audio.h b/source/include/SDL_audio.h index 68ec4759..3a8e7fa8 100755 --- a/source/include/SDL_audio.h +++ b/source/include/SDL_audio.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -20,7 +20,10 @@ slouken@libsdl.org */ -/* Access to the raw audio mixing buffer for the SDL library */ +/** + * @file SDL_audio.h + * Access to the raw audio mixing buffer for the SDL library + */ #ifndef _SDL_audio_h #define _SDL_audio_h @@ -38,89 +41,11 @@ extern "C" { #endif -/* The calculated values in this structure are calculated by SDL_OpenAudio() */ -typedef struct SDL_AudioSpec { - int freq; /* DSP frequency -- samples per second */ - Uint16 format; /* Audio data format */ - Uint8 channels; /* Number of channels: 1 mono, 2 stereo */ - Uint8 silence; /* Audio buffer silence value (calculated) */ - Uint16 samples; /* Audio buffer size in samples (power of 2) */ - Uint16 padding; /* Necessary for some compile environments */ - Uint32 size; /* Audio buffer size in bytes (calculated) */ - /* This function is called when the audio device needs more data. - 'stream' is a pointer to the audio data buffer - 'len' is the length of that buffer in bytes. - Once the callback returns, the buffer will no longer be valid. - Stereo samples are stored in a LRLRLR ordering. - */ - void (SDLCALL *callback)(void *userdata, Uint8 *stream, int len); - void *userdata; -} SDL_AudioSpec; - -/* Audio format flags (defaults to LSB byte order) */ -#define AUDIO_U8 0x0008 /* Unsigned 8-bit samples */ -#define AUDIO_S8 0x8008 /* Signed 8-bit samples */ -#define AUDIO_U16LSB 0x0010 /* Unsigned 16-bit samples */ -#define AUDIO_S16LSB 0x8010 /* Signed 16-bit samples */ -#define AUDIO_U16MSB 0x1010 /* As above, but big-endian byte order */ -#define AUDIO_S16MSB 0x9010 /* As above, but big-endian byte order */ -#define AUDIO_U16 AUDIO_U16LSB -#define AUDIO_S16 AUDIO_S16LSB - -/* Native audio byte ordering */ -#if SDL_BYTEORDER == SDL_LIL_ENDIAN -#define AUDIO_U16SYS AUDIO_U16LSB -#define AUDIO_S16SYS AUDIO_S16LSB -#else -#define AUDIO_U16SYS AUDIO_U16MSB -#define AUDIO_S16SYS AUDIO_S16MSB -#endif - - -/* A structure to hold a set of audio conversion filters and buffers */ -typedef struct SDL_AudioCVT { - int needed; /* Set to 1 if conversion possible */ - Uint16 src_format; /* Source audio format */ - Uint16 dst_format; /* Target audio format */ - double rate_incr; /* Rate conversion increment */ - Uint8 *buf; /* Buffer to hold entire audio data */ - int len; /* Length of original audio buffer */ - int len_cvt; /* Length of converted audio buffer */ - int len_mult; /* buffer must be len*len_mult big */ - double len_ratio; /* Given len, final size is len*len_ratio */ - void (SDLCALL *filters[10])(struct SDL_AudioCVT *cvt, Uint16 format); - int filter_index; /* Current audio conversion function */ -} SDL_AudioCVT; - - -/* Function prototypes */ - -/* These functions are used internally, and should not be used unless you - * have a specific need to specify the audio driver you want to use. - * You should normally use SDL_Init() or SDL_InitSubSystem(). - */ -extern DECLSPEC int SDLCALL SDL_AudioInit(const char *driver_name); -extern DECLSPEC void SDLCALL SDL_AudioQuit(void); - -/* This function fills the given character buffer with the name of the - * current audio driver, and returns a pointer to it if the audio driver has - * been initialized. It returns NULL if no driver has been initialized. - */ -extern DECLSPEC char * SDLCALL SDL_AudioDriverName(char *namebuf, int maxlen); - -/* - * This function opens the audio device with the desired parameters, and - * returns 0 if successful, placing the actual hardware parameters in the - * structure pointed to by 'obtained'. If 'obtained' is NULL, the audio - * data passed to the callback function will be guaranteed to be in the - * requested format, and will be automatically converted to the hardware - * audio format if necessary. This function returns -1 if it failed - * to open the audio device, or couldn't set up the audio thread. - * +/** * When filling in the desired audio spec structure, - * 'desired->freq' should be the desired audio frequency in samples-per-second. - * 'desired->format' should be the desired audio format. - * 'desired->samples' is the desired size of the audio buffer, in samples. + * - 'desired->freq' should be the desired audio frequency in samples-per-second. + * - 'desired->format' should be the desired audio format. + * - 'desired->samples' is the desired size of the audio buffer, in samples. * This number should be a power of two, and may be adjusted by the audio * driver to a value more suitable for the hardware. Good values seem to * range between 512 and 8096 inclusive, depending on the application and @@ -130,38 +55,138 @@ extern DECLSPEC char * SDLCALL SDL_AudioDriverName(char *namebuf, int maxlen); * and left channels in LR ordering. * Note that the number of samples is directly related to time by the * following formula: ms = (samples*1000)/freq - * 'desired->size' is the size in bytes of the audio buffer, and is + * - 'desired->size' is the size in bytes of the audio buffer, and is * calculated by SDL_OpenAudio(). - * 'desired->silence' is the value used to set the buffer to silence, + * - 'desired->silence' is the value used to set the buffer to silence, * and is calculated by SDL_OpenAudio(). - * 'desired->callback' should be set to a function that will be called + * - 'desired->callback' should be set to a function that will be called * when the audio device is ready for more data. It is passed a pointer * to the audio buffer, and the length in bytes of the audio buffer. * This function usually runs in a separate thread, and so you should * protect data structures that it accesses by calling SDL_LockAudio() * and SDL_UnlockAudio() in your code. - * 'desired->userdata' is passed as the first parameter to your callback + * - 'desired->userdata' is passed as the first parameter to your callback * function. * + * @note The calculated values in this structure are calculated by SDL_OpenAudio() + * + */ +typedef struct SDL_AudioSpec { + int freq; /**< DSP frequency -- samples per second */ + Uint16 format; /**< Audio data format */ + Uint8 channels; /**< Number of channels: 1 mono, 2 stereo */ + Uint8 silence; /**< Audio buffer silence value (calculated) */ + Uint16 samples; /**< Audio buffer size in samples (power of 2) */ + Uint16 padding; /**< Necessary for some compile environments */ + Uint32 size; /**< Audio buffer size in bytes (calculated) */ + /** + * This function is called when the audio device needs more data. + * + * @param[out] stream A pointer to the audio data buffer + * @param[in] len The length of the audio buffer in bytes. + * + * Once the callback returns, the buffer will no longer be valid. + * Stereo samples are stored in a LRLRLR ordering. + */ + void (SDLCALL *callback)(void *userdata, Uint8 *stream, int len); + void *userdata; +} SDL_AudioSpec; + +/** + * @name Audio format flags + * defaults to LSB byte order + */ +/*@{*/ +#define AUDIO_U8 0x0008 /**< Unsigned 8-bit samples */ +#define AUDIO_S8 0x8008 /**< Signed 8-bit samples */ +#define AUDIO_U16LSB 0x0010 /**< Unsigned 16-bit samples */ +#define AUDIO_S16LSB 0x8010 /**< Signed 16-bit samples */ +#define AUDIO_U16MSB 0x1010 /**< As above, but big-endian byte order */ +#define AUDIO_S16MSB 0x9010 /**< As above, but big-endian byte order */ +#define AUDIO_U16 AUDIO_U16LSB +#define AUDIO_S16 AUDIO_S16LSB + +/** + * @name Native audio byte ordering + */ +/*@{*/ +#if SDL_BYTEORDER == SDL_LIL_ENDIAN +#define AUDIO_U16SYS AUDIO_U16LSB +#define AUDIO_S16SYS AUDIO_S16LSB +#else +#define AUDIO_U16SYS AUDIO_U16MSB +#define AUDIO_S16SYS AUDIO_S16MSB +#endif +/*@}*/ + +/*@}*/ + + +/** A structure to hold a set of audio conversion filters and buffers */ +typedef struct SDL_AudioCVT { + int needed; /**< Set to 1 if conversion possible */ + Uint16 src_format; /**< Source audio format */ + Uint16 dst_format; /**< Target audio format */ + double rate_incr; /**< Rate conversion increment */ + Uint8 *buf; /**< Buffer to hold entire audio data */ + int len; /**< Length of original audio buffer */ + int len_cvt; /**< Length of converted audio buffer */ + int len_mult; /**< buffer must be len*len_mult big */ + double len_ratio; /**< Given len, final size is len*len_ratio */ + void (SDLCALL *filters[10])(struct SDL_AudioCVT *cvt, Uint16 format); + int filter_index; /**< Current audio conversion function */ +} SDL_AudioCVT; + + +/* Function prototypes */ + +/** + * @name Audio Init and Quit + * These functions are used internally, and should not be used unless you + * have a specific need to specify the audio driver you want to use. + * You should normally use SDL_Init() or SDL_InitSubSystem(). + */ +/*@{*/ +extern DECLSPEC int SDLCALL SDL_AudioInit(const char *driver_name); +extern DECLSPEC void SDLCALL SDL_AudioQuit(void); +/*@}*/ + +/** + * This function fills the given character buffer with the name of the + * current audio driver, and returns a pointer to it if the audio driver has + * been initialized. It returns NULL if no driver has been initialized. + */ +extern DECLSPEC char * SDLCALL SDL_AudioDriverName(char *namebuf, int maxlen); + +/** + * This function opens the audio device with the desired parameters, and + * returns 0 if successful, placing the actual hardware parameters in the + * structure pointed to by 'obtained'. If 'obtained' is NULL, the audio + * data passed to the callback function will be guaranteed to be in the + * requested format, and will be automatically converted to the hardware + * audio format if necessary. This function returns -1 if it failed + * to open the audio device, or couldn't set up the audio thread. + * * The audio device starts out playing silence when it's opened, and should * be enabled for playing by calling SDL_PauseAudio(0) when you are ready * for your audio callback function to be called. Since the audio driver * may modify the requested size of the audio buffer, you should allocate * any local mixing buffers after you open the audio device. + * + * @sa SDL_AudioSpec */ extern DECLSPEC int SDLCALL SDL_OpenAudio(SDL_AudioSpec *desired, SDL_AudioSpec *obtained); -/* - * Get the current audio state: - */ typedef enum { SDL_AUDIO_STOPPED = 0, SDL_AUDIO_PLAYING, SDL_AUDIO_PAUSED } SDL_audiostatus; + +/** Get the current audio state */ extern DECLSPEC SDL_audiostatus SDLCALL SDL_GetAudioStatus(void); -/* +/** * This function pauses and unpauses the audio callback processing. * It should be called with a parameter of 0 after opening the audio * device to start playing sound. This is so you can safely initialize @@ -170,11 +195,11 @@ extern DECLSPEC SDL_audiostatus SDLCALL SDL_GetAudioStatus(void); */ extern DECLSPEC void SDLCALL SDL_PauseAudio(int pause_on); -/* +/** * This function loads a WAVE from the data source, automatically freeing * that source if 'freesrc' is non-zero. For example, to load a WAVE file, * you could do: - * SDL_LoadWAV_RW(SDL_RWFromFile("sample.wav", "rb"), 1, ...); + * @code SDL_LoadWAV_RW(SDL_RWFromFile("sample.wav", "rb"), 1, ...); @endcode * * If this function succeeds, it returns the given SDL_AudioSpec, * filled with the audio data format of the wave data, and sets @@ -189,27 +214,29 @@ extern DECLSPEC void SDLCALL SDL_PauseAudio(int pause_on); */ extern DECLSPEC SDL_AudioSpec * SDLCALL SDL_LoadWAV_RW(SDL_RWops *src, int freesrc, SDL_AudioSpec *spec, Uint8 **audio_buf, Uint32 *audio_len); -/* Compatibility convenience function -- loads a WAV from a file */ +/** Compatibility convenience function -- loads a WAV from a file */ #define SDL_LoadWAV(file, spec, audio_buf, audio_len) \ SDL_LoadWAV_RW(SDL_RWFromFile(file, "rb"),1, spec,audio_buf,audio_len) -/* +/** * This function frees data previously allocated with SDL_LoadWAV_RW() */ extern DECLSPEC void SDLCALL SDL_FreeWAV(Uint8 *audio_buf); -/* +/** * This function takes a source format and rate and a destination format * and rate, and initializes the 'cvt' structure with information needed * by SDL_ConvertAudio() to convert a buffer of audio data from one format * to the other. - * This function returns 0, or -1 if there was an error. + * + * @return This function returns 0, or -1 if there was an error. */ extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT *cvt, Uint16 src_format, Uint8 src_channels, int src_rate, Uint16 dst_format, Uint8 dst_channels, int dst_rate); -/* Once you have initialized the 'cvt' structure using SDL_BuildAudioCVT(), +/** + * Once you have initialized the 'cvt' structure using SDL_BuildAudioCVT(), * created an audio buffer cvt->buf, and filled it with cvt->len bytes of * audio data in the source format, this function will convert it in-place * to the desired format. @@ -219,26 +246,30 @@ extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT *cvt, */ extern DECLSPEC int SDLCALL SDL_ConvertAudio(SDL_AudioCVT *cvt); -/* + +#define SDL_MIX_MAXVOLUME 128 +/** * This takes two audio buffers of the playing audio format and mixes * them, performing addition, volume adjustment, and overflow clipping. * The volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME * for full audio volume. Note this does not change hardware volume. * This is provided for convenience -- you can mix your own audio data. */ -#define SDL_MIX_MAXVOLUME 128 extern DECLSPEC void SDLCALL SDL_MixAudio(Uint8 *dst, const Uint8 *src, Uint32 len, int volume); -/* +/** + * @name Audio Locks * The lock manipulated by these functions protects the callback function. * During a LockAudio/UnlockAudio pair, you can be guaranteed that the * callback function is not running. Do not call these from the callback * function or you will cause deadlock. */ +/*@{*/ extern DECLSPEC void SDLCALL SDL_LockAudio(void); extern DECLSPEC void SDLCALL SDL_UnlockAudio(void); +/*@}*/ -/* +/** * This function shuts down audio processing and closes the audio device. */ extern DECLSPEC void SDLCALL SDL_CloseAudio(void); diff --git a/source/include/SDL_byteorder.h b/source/include/SDL_byteorder.h index 3871cfed..9b93cd69 100755 --- a/source/include/SDL_byteorder.h +++ b/source/include/SDL_byteorder.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -20,5 +20,10 @@ slouken@libsdl.org */ +/** + * @file SDL_byteorder.h + * @deprecated Use SDL_endian.h instead + */ + /* DEPRECATED */ #include "SDL_endian.h" diff --git a/source/include/SDL_cdrom.h b/source/include/SDL_cdrom.h index 5f8f0c62..fff5cfa1 100755 --- a/source/include/SDL_cdrom.h +++ b/source/include/SDL_cdrom.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -20,7 +20,10 @@ slouken@libsdl.org */ -/* This is the CD-audio control API for Simple DirectMedia Layer */ +/** + * @file SDL_cdrom.h + * This is the CD-audio control API for Simple DirectMedia Layer + */ #ifndef _SDL_cdrom_h #define _SDL_cdrom_h @@ -34,19 +37,25 @@ extern "C" { #endif -/* In order to use these functions, SDL_Init() must have been called - with the SDL_INIT_CDROM flag. This causes SDL to scan the system - for CD-ROM drives, and load appropriate drivers. -*/ +/** + * @file SDL_cdrom.h + * In order to use these functions, SDL_Init() must have been called + * with the SDL_INIT_CDROM flag. This causes SDL to scan the system + * for CD-ROM drives, and load appropriate drivers. + */ -/* The maximum number of CD-ROM tracks on a disk */ +/** The maximum number of CD-ROM tracks on a disk */ #define SDL_MAX_TRACKS 99 -/* The types of CD-ROM track possible */ +/** @name Track Types + * The types of CD-ROM track possible + */ +/*@{*/ #define SDL_AUDIO_TRACK 0x00 #define SDL_DATA_TRACK 0x04 +/*@}*/ -/* The possible states which a CD-ROM drive can be in. */ +/** The possible states which a CD-ROM drive can be in. */ typedef enum { CD_TRAYEMPTY, CD_STOPPED, @@ -55,30 +64,35 @@ typedef enum { CD_ERROR = -1 } CDstatus; -/* Given a status, returns true if there's a disk in the drive */ +/** Given a status, returns true if there's a disk in the drive */ #define CD_INDRIVE(status) ((int)(status) > 0) typedef struct SDL_CDtrack { - Uint8 id; /* Track number */ - Uint8 type; /* Data or audio track */ + Uint8 id; /**< Track number */ + Uint8 type; /**< Data or audio track */ Uint16 unused; - Uint32 length; /* Length, in frames, of this track */ - Uint32 offset; /* Offset, in frames, from start of disk */ + Uint32 length; /**< Length, in frames, of this track */ + Uint32 offset; /**< Offset, in frames, from start of disk */ } SDL_CDtrack; -/* This structure is only current as of the last call to SDL_CDStatus() */ +/** This structure is only current as of the last call to SDL_CDStatus() */ typedef struct SDL_CD { - int id; /* Private drive identifier */ - CDstatus status; /* Current drive status */ + int id; /**< Private drive identifier */ + CDstatus status; /**< Current drive status */ - /* The rest of this structure is only valid if there's a CD in drive */ - int numtracks; /* Number of tracks on disk */ - int cur_track; /* Current track position */ - int cur_frame; /* Current frame offset within current track */ + /** The rest of this structure is only valid if there's a CD in drive */ + /*@{*/ + int numtracks; /**< Number of tracks on disk */ + int cur_track; /**< Current track position */ + int cur_frame; /**< Current frame offset within current track */ SDL_CDtrack track[SDL_MAX_TRACKS+1]; + /*@}*/ } SDL_CD; -/* Conversion functions from frames to Minute/Second/Frames and vice versa */ +/** @name Frames / MSF Conversion Functions + * Conversion functions from frames to Minute/Second/Frames and vice versa + */ +/*@{*/ #define CD_FPS 75 #define FRAMES_TO_MSF(f, M,S,F) { \ int value = f; \ @@ -89,76 +103,93 @@ typedef struct SDL_CD { *(M) = value; \ } #define MSF_TO_FRAMES(M, S, F) ((M)*60*CD_FPS+(S)*CD_FPS+(F)) +/*@}*/ /* CD-audio API functions: */ -/* Returns the number of CD-ROM drives on the system, or -1 if - SDL_Init() has not been called with the SDL_INIT_CDROM flag. +/** + * Returns the number of CD-ROM drives on the system, or -1 if + * SDL_Init() has not been called with the SDL_INIT_CDROM flag. */ extern DECLSPEC int SDLCALL SDL_CDNumDrives(void); -/* Returns a human-readable, system-dependent identifier for the CD-ROM. - Example: - "/dev/cdrom" - "E:" - "/dev/disk/ide/1/master" -*/ +/** + * Returns a human-readable, system-dependent identifier for the CD-ROM. + * Example: + * - "/dev/cdrom" + * - "E:" + * - "/dev/disk/ide/1/master" + */ extern DECLSPEC const char * SDLCALL SDL_CDName(int drive); -/* Opens a CD-ROM drive for access. It returns a drive handle on success, - or NULL if the drive was invalid or busy. This newly opened CD-ROM - becomes the default CD used when other CD functions are passed a NULL - CD-ROM handle. - Drives are numbered starting with 0. Drive 0 is the system default CD-ROM. -*/ +/** + * Opens a CD-ROM drive for access. It returns a drive handle on success, + * or NULL if the drive was invalid or busy. This newly opened CD-ROM + * becomes the default CD used when other CD functions are passed a NULL + * CD-ROM handle. + * Drives are numbered starting with 0. Drive 0 is the system default CD-ROM. + */ extern DECLSPEC SDL_CD * SDLCALL SDL_CDOpen(int drive); -/* This function returns the current status of the given drive. - If the drive has a CD in it, the table of contents of the CD and current - play position of the CD will be stored in the SDL_CD structure. -*/ +/** + * This function returns the current status of the given drive. + * If the drive has a CD in it, the table of contents of the CD and current + * play position of the CD will be stored in the SDL_CD structure. + */ extern DECLSPEC CDstatus SDLCALL SDL_CDStatus(SDL_CD *cdrom); -/* Play the given CD starting at 'start_track' and 'start_frame' for 'ntracks' - tracks and 'nframes' frames. If both 'ntrack' and 'nframe' are 0, play - until the end of the CD. This function will skip data tracks. - This function should only be called after calling SDL_CDStatus() to - get track information about the CD. - For example: - // Play entire CD: - if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) - SDL_CDPlayTracks(cdrom, 0, 0, 0, 0); - // Play last track: - if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) { - SDL_CDPlayTracks(cdrom, cdrom->numtracks-1, 0, 0, 0); - } - // Play first and second track and 10 seconds of third track: - if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) - SDL_CDPlayTracks(cdrom, 0, 0, 2, 10); - - This function returns 0, or -1 if there was an error. -*/ +/** + * Play the given CD starting at 'start_track' and 'start_frame' for 'ntracks' + * tracks and 'nframes' frames. If both 'ntrack' and 'nframe' are 0, play + * until the end of the CD. This function will skip data tracks. + * This function should only be called after calling SDL_CDStatus() to + * get track information about the CD. + * For example: + * @code + * // Play entire CD: + * if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) + * SDL_CDPlayTracks(cdrom, 0, 0, 0, 0); + * // Play last track: + * if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) { + * SDL_CDPlayTracks(cdrom, cdrom->numtracks-1, 0, 0, 0); + * } + * // Play first and second track and 10 seconds of third track: + * if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) + * SDL_CDPlayTracks(cdrom, 0, 0, 2, 10); + * @endcode + * + * @return This function returns 0, or -1 if there was an error. + */ extern DECLSPEC int SDLCALL SDL_CDPlayTracks(SDL_CD *cdrom, int start_track, int start_frame, int ntracks, int nframes); -/* Play the given CD starting at 'start' frame for 'length' frames. - It returns 0, or -1 if there was an error. -*/ +/** + * Play the given CD starting at 'start' frame for 'length' frames. + * @return It returns 0, or -1 if there was an error. + */ extern DECLSPEC int SDLCALL SDL_CDPlay(SDL_CD *cdrom, int start, int length); -/* Pause play -- returns 0, or -1 on error */ +/** Pause play + * @return returns 0, or -1 on error + */ extern DECLSPEC int SDLCALL SDL_CDPause(SDL_CD *cdrom); -/* Resume play -- returns 0, or -1 on error */ +/** Resume play + * @return returns 0, or -1 on error + */ extern DECLSPEC int SDLCALL SDL_CDResume(SDL_CD *cdrom); -/* Stop play -- returns 0, or -1 on error */ +/** Stop play + * @return returns 0, or -1 on error + */ extern DECLSPEC int SDLCALL SDL_CDStop(SDL_CD *cdrom); -/* Eject CD-ROM -- returns 0, or -1 on error */ +/** Eject CD-ROM + * @return returns 0, or -1 on error + */ extern DECLSPEC int SDLCALL SDL_CDEject(SDL_CD *cdrom); -/* Closes the handle for the CD-ROM drive */ +/** Closes the handle for the CD-ROM drive */ extern DECLSPEC void SDLCALL SDL_CDClose(SDL_CD *cdrom); diff --git a/source/include/SDL_config.h b/source/include/SDL_config.h index c82f42ad..a5081016 100644 --- a/source/include/SDL_config.h +++ b/source/include/SDL_config.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public diff --git a/source/include/SDL_config_macosx.h b/source/include/SDL_config_macosx.h index 481c22ed..295b8724 100644 --- a/source/include/SDL_config_macosx.h +++ b/source/include/SDL_config_macosx.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -90,7 +90,6 @@ /* Enable various audio drivers */ #define SDL_AUDIO_DRIVER_COREAUDIO 1 -#define SDL_AUDIO_DRIVER_SNDMGR 1 #define SDL_AUDIO_DRIVER_DISK 1 #define SDL_AUDIO_DRIVER_DUMMY 1 @@ -122,9 +121,25 @@ #else #define SDL_VIDEO_DRIVER_QUARTZ 1 #endif +#define SDL_VIDEO_DRIVER_DGA 1 +#define SDL_VIDEO_DRIVER_X11 1 +#define SDL_VIDEO_DRIVER_X11_DGAMOUSE 1 +#define SDL_VIDEO_DRIVER_X11_DYNAMIC "/usr/X11R6/lib/libX11.6.dylib" +#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT "/usr/X11R6/lib/libXext.6.dylib" +#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR "/usr/X11R6/lib/libXrandr.2.dylib" +#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XRENDER "/usr/X11R6/lib/libXrender.1.dylib" +#define SDL_VIDEO_DRIVER_X11_VIDMODE 1 +#define SDL_VIDEO_DRIVER_X11_XINERAMA 1 +#define SDL_VIDEO_DRIVER_X11_XME 1 +#define SDL_VIDEO_DRIVER_X11_XRANDR 1 +#define SDL_VIDEO_DRIVER_X11_XV 1 /* Enable OpenGL support */ #define SDL_VIDEO_OPENGL 1 +#define SDL_VIDEO_OPENGL_GLX 1 + +/* Disable screensaver */ +#define SDL_VIDEO_DISABLE_SCREENSAVER 1 /* Enable assembly routines */ #define SDL_ASSEMBLY_ROUTINES 1 diff --git a/source/include/SDL_config_win32.h b/source/include/SDL_config_win32.h index cfb44d2a..6d019a8d 100644 --- a/source/include/SDL_config_win32.h +++ b/source/include/SDL_config_win32.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -172,6 +172,9 @@ typedef unsigned int uintptr_t; #define SDL_VIDEO_OPENGL_WGL 1 #endif +/* Disable screensaver */ +#define SDL_VIDEO_DISABLE_SCREENSAVER 1 + /* Enable assembly routines (Win64 doesn't have inline asm) */ #ifndef _WIN64 #define SDL_ASSEMBLY_ROUTINES 1 diff --git a/source/include/SDL_copying.h b/source/include/SDL_copying.h index 39e122db..1bd6b84c 100755 --- a/source/include/SDL_copying.h +++ b/source/include/SDL_copying.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public diff --git a/source/include/SDL_cpuinfo.h b/source/include/SDL_cpuinfo.h index 72acbdd8..f4be8e03 100755 --- a/source/include/SDL_cpuinfo.h +++ b/source/include/SDL_cpuinfo.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -20,8 +20,10 @@ slouken@libsdl.org */ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* CPU feature detection for SDL */ +/** + * @file SDL_cpuinfo.h + * CPU feature detection for SDL + */ #ifndef _SDL_cpuinfo_h #define _SDL_cpuinfo_h @@ -34,36 +36,28 @@ extern "C" { #endif -/* This function returns true if the CPU has the RDTSC instruction - */ +/** This function returns true if the CPU has the RDTSC instruction */ extern DECLSPEC SDL_bool SDLCALL SDL_HasRDTSC(void); -/* This function returns true if the CPU has MMX features - */ +/** This function returns true if the CPU has MMX features */ extern DECLSPEC SDL_bool SDLCALL SDL_HasMMX(void); -/* This function returns true if the CPU has MMX Ext. features - */ +/** This function returns true if the CPU has MMX Ext. features */ extern DECLSPEC SDL_bool SDLCALL SDL_HasMMXExt(void); -/* This function returns true if the CPU has 3DNow features - */ +/** This function returns true if the CPU has 3DNow features */ extern DECLSPEC SDL_bool SDLCALL SDL_Has3DNow(void); -/* This function returns true if the CPU has 3DNow! Ext. features - */ +/** This function returns true if the CPU has 3DNow! Ext. features */ extern DECLSPEC SDL_bool SDLCALL SDL_Has3DNowExt(void); -/* This function returns true if the CPU has SSE features - */ +/** This function returns true if the CPU has SSE features */ extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE(void); -/* This function returns true if the CPU has SSE2 features - */ +/** This function returns true if the CPU has SSE2 features */ extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE2(void); -/* This function returns true if the CPU has AltiVec features - */ +/** This function returns true if the CPU has AltiVec features */ extern DECLSPEC SDL_bool SDLCALL SDL_HasAltiVec(void); /* Ends C function definitions when using C++ */ diff --git a/source/include/SDL_endian.h b/source/include/SDL_endian.h index 8f8db4cc..f7a2e2f8 100755 --- a/source/include/SDL_endian.h +++ b/source/include/SDL_endian.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -20,16 +20,23 @@ slouken@libsdl.org */ -/* Functions for reading and writing endian-specific values */ +/** + * @file SDL_endian.h + * Functions for reading and writing endian-specific values + */ #ifndef _SDL_endian_h #define _SDL_endian_h #include "SDL_stdinc.h" -/* The two types of endianness */ +/** @name SDL_ENDIANs + * The two types of endianness + */ +/*@{*/ #define SDL_LIL_ENDIAN 1234 #define SDL_BIG_ENDIAN 4321 +/*@}*/ #ifndef SDL_BYTEORDER /* Not defined in SDL_config.h? */ #if defined(__hppa__) || \ @@ -50,11 +57,14 @@ extern "C" { #endif -/* Use inline functions for compilers that support them, and static - functions for those that do not. Because these functions become - static for compilers that do not support inline functions, this - header should only be included in files that actually use them. -*/ +/** + * @name SDL_Swap Functions + * Use inline functions for compilers that support them, and static + * functions for those that do not. Because these functions become + * static for compilers that do not support inline functions, this + * header should only be included in files that actually use them. + */ +/*@{*/ #if defined(__GNUC__) && defined(__i386__) && \ !(__GNUC__ == 2 && __GNUC_MINOR__ <= 95 /* broken gcc version */) static __inline__ Uint16 SDL_Swap16(Uint16 x) @@ -150,9 +160,9 @@ static __inline__ Uint64 SDL_Swap64(Uint64 x) Uint32 hi, lo; /* Separate into high and low 32-bit values and swap them */ - lo = (Uint32)(x&0xFFFFFFFF); + lo = SDL_static_cast(Uint32, x & 0xFFFFFFFF); x >>= 32; - hi = (Uint32)(x&0xFFFFFFFF); + hi = SDL_static_cast(Uint32, x & 0xFFFFFFFF); x = SDL_Swap32(lo); x <<= 32; x |= SDL_Swap32(hi); @@ -161,14 +171,18 @@ static __inline__ Uint64 SDL_Swap64(Uint64 x) #endif #else /* This is mainly to keep compilers from complaining in SDL code. - If there is no real 64-bit datatype, then compilers will complain about - the fake 64-bit datatype that SDL provides when it compiles user code. -*/ + * If there is no real 64-bit datatype, then compilers will complain about + * the fake 64-bit datatype that SDL provides when it compiles user code. + */ #define SDL_Swap64(X) (X) #endif /* SDL_HAS_64BIT_TYPE */ +/*@}*/ - -/* Byteswap item from the specified endianness to the native endianness */ +/** + * @name SDL_SwapLE and SDL_SwapBE Functions + * Byteswap item from the specified endianness to the native endianness + */ +/*@{*/ #if SDL_BYTEORDER == SDL_LIL_ENDIAN #define SDL_SwapLE16(X) (X) #define SDL_SwapLE32(X) (X) @@ -184,6 +198,7 @@ static __inline__ Uint64 SDL_Swap64(Uint64 x) #define SDL_SwapBE32(X) (X) #define SDL_SwapBE64(X) (X) #endif +/*@}*/ /* Ends C function definitions when using C++ */ #ifdef __cplusplus diff --git a/source/include/SDL_error.h b/source/include/SDL_error.h index 26d6bfae..b103703a 100755 --- a/source/include/SDL_error.h +++ b/source/include/SDL_error.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -20,7 +20,10 @@ slouken@libsdl.org */ -/* Simple error message routines for SDL */ +/** + * @file SDL_error.h + * Simple error message routines for SDL + */ #ifndef _SDL_error_h #define _SDL_error_h @@ -33,12 +36,20 @@ extern "C" { #endif -/* Public functions */ +/** + * @name Public functions + */ +/*@{*/ extern DECLSPEC void SDLCALL SDL_SetError(const char *fmt, ...); extern DECLSPEC char * SDLCALL SDL_GetError(void); extern DECLSPEC void SDLCALL SDL_ClearError(void); +/*@}*/ -/* Private error message function - used internally */ +/** + * @name Private functions + * @internal Private error message function - used internally + */ +/*@{*/ #define SDL_OutOfMemory() SDL_Error(SDL_ENOMEM) #define SDL_Unsupported() SDL_Error(SDL_UNSUPPORTED) typedef enum { @@ -50,7 +61,7 @@ typedef enum { SDL_LASTERROR } SDL_errorcode; extern DECLSPEC void SDLCALL SDL_Error(SDL_errorcode code); - +/*@}*/ /* Ends C function definitions when using C++ */ #ifdef __cplusplus diff --git a/source/include/SDL_events.h b/source/include/SDL_events.h index 9fe918c7..c94a30c9 100755 --- a/source/include/SDL_events.h +++ b/source/include/SDL_events.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -20,7 +20,10 @@ slouken@libsdl.org */ -/* Include file for SDL event handling */ +/** + * @file SDL_events.h + * Include file for SDL event handling + */ #ifndef _SDL_events_h #define _SDL_events_h @@ -39,45 +42,48 @@ extern "C" { #endif -/* General keyboard/mouse state definitions */ +/** @name General keyboard/mouse state definitions */ +/*@{*/ #define SDL_RELEASED 0 #define SDL_PRESSED 1 +/*@}*/ -/* Event enumerations */ +/** Event enumerations */ typedef enum { - SDL_NOEVENT = 0, /* Unused (do not remove) */ - SDL_ACTIVEEVENT, /* Application loses/gains visibility */ - SDL_KEYDOWN, /* Keys pressed */ - SDL_KEYUP, /* Keys released */ - SDL_MOUSEMOTION, /* Mouse moved */ - SDL_MOUSEBUTTONDOWN, /* Mouse button pressed */ - SDL_MOUSEBUTTONUP, /* Mouse button released */ - SDL_JOYAXISMOTION, /* Joystick axis motion */ - SDL_JOYBALLMOTION, /* Joystick trackball motion */ - SDL_JOYHATMOTION, /* Joystick hat position change */ - SDL_JOYBUTTONDOWN, /* Joystick button pressed */ - SDL_JOYBUTTONUP, /* Joystick button released */ - SDL_QUIT, /* User-requested quit */ - SDL_SYSWMEVENT, /* System specific event */ - SDL_EVENT_RESERVEDA, /* Reserved for future use.. */ - SDL_EVENT_RESERVEDB, /* Reserved for future use.. */ - SDL_VIDEORESIZE, /* User resized video mode */ - SDL_VIDEOEXPOSE, /* Screen needs to be redrawn */ - SDL_EVENT_RESERVED2, /* Reserved for future use.. */ - SDL_EVENT_RESERVED3, /* Reserved for future use.. */ - SDL_EVENT_RESERVED4, /* Reserved for future use.. */ - SDL_EVENT_RESERVED5, /* Reserved for future use.. */ - SDL_EVENT_RESERVED6, /* Reserved for future use.. */ - SDL_EVENT_RESERVED7, /* Reserved for future use.. */ - /* Events SDL_USEREVENT through SDL_MAXEVENTS-1 are for your use */ + SDL_NOEVENT = 0, /**< Unused (do not remove) */ + SDL_ACTIVEEVENT, /**< Application loses/gains visibility */ + SDL_KEYDOWN, /**< Keys pressed */ + SDL_KEYUP, /**< Keys released */ + SDL_MOUSEMOTION, /**< Mouse moved */ + SDL_MOUSEBUTTONDOWN, /**< Mouse button pressed */ + SDL_MOUSEBUTTONUP, /**< Mouse button released */ + SDL_JOYAXISMOTION, /**< Joystick axis motion */ + SDL_JOYBALLMOTION, /**< Joystick trackball motion */ + SDL_JOYHATMOTION, /**< Joystick hat position change */ + SDL_JOYBUTTONDOWN, /**< Joystick button pressed */ + SDL_JOYBUTTONUP, /**< Joystick button released */ + SDL_QUIT, /**< User-requested quit */ + SDL_SYSWMEVENT, /**< System specific event */ + SDL_EVENT_RESERVEDA, /**< Reserved for future use.. */ + SDL_EVENT_RESERVEDB, /**< Reserved for future use.. */ + SDL_VIDEORESIZE, /**< User resized video mode */ + SDL_VIDEOEXPOSE, /**< Screen needs to be redrawn */ + SDL_EVENT_RESERVED2, /**< Reserved for future use.. */ + SDL_EVENT_RESERVED3, /**< Reserved for future use.. */ + SDL_EVENT_RESERVED4, /**< Reserved for future use.. */ + SDL_EVENT_RESERVED5, /**< Reserved for future use.. */ + SDL_EVENT_RESERVED6, /**< Reserved for future use.. */ + SDL_EVENT_RESERVED7, /**< Reserved for future use.. */ + /** Events SDL_USEREVENT through SDL_MAXEVENTS-1 are for your use */ SDL_USEREVENT = 24, - /* This last event is only for bounding internal arrays - It is the number of bits in the event mask datatype -- Uint32 + /** This last event is only for bounding internal arrays + * It is the number of bits in the event mask datatype -- Uint32 */ SDL_NUMEVENTS = 32 } SDL_EventType; -/* Predefined event masks */ +/** @name Predefined event masks */ +/*@{*/ #define SDL_EVENTMASK(X) (1<<(X)) typedef enum { SDL_ACTIVEEVENTMASK = SDL_EVENTMASK(SDL_ACTIVEEVENT), @@ -107,108 +113,109 @@ typedef enum { SDL_SYSWMEVENTMASK = SDL_EVENTMASK(SDL_SYSWMEVENT) } SDL_EventMask ; #define SDL_ALLEVENTS 0xFFFFFFFF +/*@}*/ -/* Application visibility event structure */ +/** Application visibility event structure */ typedef struct SDL_ActiveEvent { - Uint8 type; /* SDL_ACTIVEEVENT */ - Uint8 gain; /* Whether given states were gained or lost (1/0) */ - Uint8 state; /* A mask of the focus states */ + Uint8 type; /**< SDL_ACTIVEEVENT */ + Uint8 gain; /**< Whether given states were gained or lost (1/0) */ + Uint8 state; /**< A mask of the focus states */ } SDL_ActiveEvent; -/* Keyboard event structure */ +/** Keyboard event structure */ typedef struct SDL_KeyboardEvent { - Uint8 type; /* SDL_KEYDOWN or SDL_KEYUP */ - Uint8 which; /* The keyboard device index */ - Uint8 state; /* SDL_PRESSED or SDL_RELEASED */ + Uint8 type; /**< SDL_KEYDOWN or SDL_KEYUP */ + Uint8 which; /**< The keyboard device index */ + Uint8 state; /**< SDL_PRESSED or SDL_RELEASED */ SDL_keysym keysym; } SDL_KeyboardEvent; -/* Mouse motion event structure */ +/** Mouse motion event structure */ typedef struct SDL_MouseMotionEvent { - Uint8 type; /* SDL_MOUSEMOTION */ - Uint8 which; /* The mouse device index */ - Uint8 state; /* The current button state */ - Uint16 x, y; /* The X/Y coordinates of the mouse */ - Sint16 xrel; /* The relative motion in the X direction */ - Sint16 yrel; /* The relative motion in the Y direction */ + Uint8 type; /**< SDL_MOUSEMOTION */ + Uint8 which; /**< The mouse device index */ + Uint8 state; /**< The current button state */ + Uint16 x, y; /**< The X/Y coordinates of the mouse */ + Sint16 xrel; /**< The relative motion in the X direction */ + Sint16 yrel; /**< The relative motion in the Y direction */ } SDL_MouseMotionEvent; -/* Mouse button event structure */ +/** Mouse button event structure */ typedef struct SDL_MouseButtonEvent { - Uint8 type; /* SDL_MOUSEBUTTONDOWN or SDL_MOUSEBUTTONUP */ - Uint8 which; /* The mouse device index */ - Uint8 button; /* The mouse button index */ - Uint8 state; /* SDL_PRESSED or SDL_RELEASED */ - Uint16 x, y; /* The X/Y coordinates of the mouse at press time */ + Uint8 type; /**< SDL_MOUSEBUTTONDOWN or SDL_MOUSEBUTTONUP */ + Uint8 which; /**< The mouse device index */ + Uint8 button; /**< The mouse button index */ + Uint8 state; /**< SDL_PRESSED or SDL_RELEASED */ + Uint16 x, y; /**< The X/Y coordinates of the mouse at press time */ } SDL_MouseButtonEvent; -/* Joystick axis motion event structure */ +/** Joystick axis motion event structure */ typedef struct SDL_JoyAxisEvent { - Uint8 type; /* SDL_JOYAXISMOTION */ - Uint8 which; /* The joystick device index */ - Uint8 axis; /* The joystick axis index */ - Sint16 value; /* The axis value (range: -32768 to 32767) */ + Uint8 type; /**< SDL_JOYAXISMOTION */ + Uint8 which; /**< The joystick device index */ + Uint8 axis; /**< The joystick axis index */ + Sint16 value; /**< The axis value (range: -32768 to 32767) */ } SDL_JoyAxisEvent; -/* Joystick trackball motion event structure */ +/** Joystick trackball motion event structure */ typedef struct SDL_JoyBallEvent { - Uint8 type; /* SDL_JOYBALLMOTION */ - Uint8 which; /* The joystick device index */ - Uint8 ball; /* The joystick trackball index */ - Sint16 xrel; /* The relative motion in the X direction */ - Sint16 yrel; /* The relative motion in the Y direction */ + Uint8 type; /**< SDL_JOYBALLMOTION */ + Uint8 which; /**< The joystick device index */ + Uint8 ball; /**< The joystick trackball index */ + Sint16 xrel; /**< The relative motion in the X direction */ + Sint16 yrel; /**< The relative motion in the Y direction */ } SDL_JoyBallEvent; -/* Joystick hat position change event structure */ +/** Joystick hat position change event structure */ typedef struct SDL_JoyHatEvent { - Uint8 type; /* SDL_JOYHATMOTION */ - Uint8 which; /* The joystick device index */ - Uint8 hat; /* The joystick hat index */ - Uint8 value; /* The hat position value: - SDL_HAT_LEFTUP SDL_HAT_UP SDL_HAT_RIGHTUP - SDL_HAT_LEFT SDL_HAT_CENTERED SDL_HAT_RIGHT - SDL_HAT_LEFTDOWN SDL_HAT_DOWN SDL_HAT_RIGHTDOWN - Note that zero means the POV is centered. - */ + Uint8 type; /**< SDL_JOYHATMOTION */ + Uint8 which; /**< The joystick device index */ + Uint8 hat; /**< The joystick hat index */ + Uint8 value; /**< The hat position value: + * SDL_HAT_LEFTUP SDL_HAT_UP SDL_HAT_RIGHTUP + * SDL_HAT_LEFT SDL_HAT_CENTERED SDL_HAT_RIGHT + * SDL_HAT_LEFTDOWN SDL_HAT_DOWN SDL_HAT_RIGHTDOWN + * Note that zero means the POV is centered. + */ } SDL_JoyHatEvent; -/* Joystick button event structure */ +/** Joystick button event structure */ typedef struct SDL_JoyButtonEvent { - Uint8 type; /* SDL_JOYBUTTONDOWN or SDL_JOYBUTTONUP */ - Uint8 which; /* The joystick device index */ - Uint8 button; /* The joystick button index */ - Uint8 state; /* SDL_PRESSED or SDL_RELEASED */ + Uint8 type; /**< SDL_JOYBUTTONDOWN or SDL_JOYBUTTONUP */ + Uint8 which; /**< The joystick device index */ + Uint8 button; /**< The joystick button index */ + Uint8 state; /**< SDL_PRESSED or SDL_RELEASED */ } SDL_JoyButtonEvent; -/* The "window resized" event - When you get this event, you are responsible for setting a new video - mode with the new width and height. +/** The "window resized" event + * When you get this event, you are responsible for setting a new video + * mode with the new width and height. */ typedef struct SDL_ResizeEvent { - Uint8 type; /* SDL_VIDEORESIZE */ - int w; /* New width */ - int h; /* New height */ + Uint8 type; /**< SDL_VIDEORESIZE */ + int w; /**< New width */ + int h; /**< New height */ } SDL_ResizeEvent; -/* The "screen redraw" event */ +/** The "screen redraw" event */ typedef struct SDL_ExposeEvent { - Uint8 type; /* SDL_VIDEOEXPOSE */ + Uint8 type; /**< SDL_VIDEOEXPOSE */ } SDL_ExposeEvent; -/* The "quit requested" event */ +/** The "quit requested" event */ typedef struct SDL_QuitEvent { - Uint8 type; /* SDL_QUIT */ + Uint8 type; /**< SDL_QUIT */ } SDL_QuitEvent; -/* A user-defined event type */ +/** A user-defined event type */ typedef struct SDL_UserEvent { - Uint8 type; /* SDL_USEREVENT through SDL_NUMEVENTS-1 */ - int code; /* User defined event code */ - void *data1; /* User defined data pointer */ - void *data2; /* User defined data pointer */ + Uint8 type; /**< SDL_USEREVENT through SDL_NUMEVENTS-1 */ + int code; /**< User defined event code */ + void *data1; /**< User defined data pointer */ + void *data2; /**< User defined data pointer */ } SDL_UserEvent; -/* If you want to use this event, you should include SDL_syswm.h */ +/** If you want to use this event, you should include SDL_syswm.h */ struct SDL_SysWMmsg; typedef struct SDL_SysWMmsg SDL_SysWMmsg; typedef struct SDL_SysWMEvent { @@ -216,7 +223,7 @@ typedef struct SDL_SysWMEvent { SDL_SysWMmsg *msg; } SDL_SysWMEvent; -/* General event structure */ +/** General event structure */ typedef union SDL_Event { Uint8 type; SDL_ActiveEvent active; @@ -237,96 +244,108 @@ typedef union SDL_Event { /* Function prototypes */ -/* Pumps the event loop, gathering events from the input devices. - This function updates the event queue and internal input device state. - This should only be run in the thread that sets the video mode. -*/ +/** Pumps the event loop, gathering events from the input devices. + * This function updates the event queue and internal input device state. + * This should only be run in the thread that sets the video mode. + */ extern DECLSPEC void SDLCALL SDL_PumpEvents(void); -/* Checks the event queue for messages and optionally returns them. - If 'action' is SDL_ADDEVENT, up to 'numevents' events will be added to - the back of the event queue. - If 'action' is SDL_PEEKEVENT, up to 'numevents' events at the front - of the event queue, matching 'mask', will be returned and will not - be removed from the queue. - If 'action' is SDL_GETEVENT, up to 'numevents' events at the front - of the event queue, matching 'mask', will be returned and will be - removed from the queue. - This function returns the number of events actually stored, or -1 - if there was an error. This function is thread-safe. -*/ typedef enum { SDL_ADDEVENT, SDL_PEEKEVENT, SDL_GETEVENT } SDL_eventaction; -/* */ + +/** + * Checks the event queue for messages and optionally returns them. + * + * If 'action' is SDL_ADDEVENT, up to 'numevents' events will be added to + * the back of the event queue. + * If 'action' is SDL_PEEKEVENT, up to 'numevents' events at the front + * of the event queue, matching 'mask', will be returned and will not + * be removed from the queue. + * If 'action' is SDL_GETEVENT, up to 'numevents' events at the front + * of the event queue, matching 'mask', will be returned and will be + * removed from the queue. + * + * @return + * This function returns the number of events actually stored, or -1 + * if there was an error. + * + * This function is thread-safe. + */ extern DECLSPEC int SDLCALL SDL_PeepEvents(SDL_Event *events, int numevents, SDL_eventaction action, Uint32 mask); -/* Polls for currently pending events, and returns 1 if there are any pending - events, or 0 if there are none available. If 'event' is not NULL, the next - event is removed from the queue and stored in that area. +/** Polls for currently pending events, and returns 1 if there are any pending + * events, or 0 if there are none available. If 'event' is not NULL, the next + * event is removed from the queue and stored in that area. */ extern DECLSPEC int SDLCALL SDL_PollEvent(SDL_Event *event); -/* Waits indefinitely for the next available event, returning 1, or 0 if there - was an error while waiting for events. If 'event' is not NULL, the next - event is removed from the queue and stored in that area. +/** Waits indefinitely for the next available event, returning 1, or 0 if there + * was an error while waiting for events. If 'event' is not NULL, the next + * event is removed from the queue and stored in that area. */ extern DECLSPEC int SDLCALL SDL_WaitEvent(SDL_Event *event); -/* Add an event to the event queue. - This function returns 0 on success, or -1 if the event queue was full - or there was some other error. +/** Add an event to the event queue. + * This function returns 0 on success, or -1 if the event queue was full + * or there was some other error. */ extern DECLSPEC int SDLCALL SDL_PushEvent(SDL_Event *event); -/* - This function sets up a filter to process all events before they - change internal state and are posted to the internal event queue. - - The filter is protypted as: -*/ +/** @name Event Filtering */ +/*@{*/ typedef int (SDLCALL *SDL_EventFilter)(const SDL_Event *event); -/* - If the filter returns 1, then the event will be added to the internal queue. - If it returns 0, then the event will be dropped from the queue, but the - internal state will still be updated. This allows selective filtering of - dynamically arriving events. - - WARNING: Be very careful of what you do in the event filter function, as - it may run in a different thread! - - There is one caveat when dealing with the SDL_QUITEVENT event type. The - event filter is only called when the window manager desires to close the - application window. If the event filter returns 1, then the window will - be closed, otherwise the window will remain open if possible. - If the quit event is generated by an interrupt signal, it will bypass the - internal queue and be delivered to the application at the next event poll. -*/ +/** + * This function sets up a filter to process all events before they + * change internal state and are posted to the internal event queue. + * + * The filter is protypted as: + * @code typedef int (SDLCALL *SDL_EventFilter)(const SDL_Event *event); @endcode + * + * If the filter returns 1, then the event will be added to the internal queue. + * If it returns 0, then the event will be dropped from the queue, but the + * internal state will still be updated. This allows selective filtering of + * dynamically arriving events. + * + * @warning Be very careful of what you do in the event filter function, as + * it may run in a different thread! + * + * There is one caveat when dealing with the SDL_QUITEVENT event type. The + * event filter is only called when the window manager desires to close the + * application window. If the event filter returns 1, then the window will + * be closed, otherwise the window will remain open if possible. + * If the quit event is generated by an interrupt signal, it will bypass the + * internal queue and be delivered to the application at the next event poll. + */ extern DECLSPEC void SDLCALL SDL_SetEventFilter(SDL_EventFilter filter); -/* - Return the current event filter - can be used to "chain" filters. - If there is no event filter set, this function returns NULL. -*/ +/** + * Return the current event filter - can be used to "chain" filters. + * If there is no event filter set, this function returns NULL. + */ extern DECLSPEC SDL_EventFilter SDLCALL SDL_GetEventFilter(void); +/*@}*/ -/* - This function allows you to set the state of processing certain events. - If 'state' is set to SDL_IGNORE, that event will be automatically dropped - from the event queue and will not event be filtered. - If 'state' is set to SDL_ENABLE, that event will be processed normally. - If 'state' is set to SDL_QUERY, SDL_EventState() will return the - current processing state of the specified event. -*/ +/** @name Event State */ +/*@{*/ #define SDL_QUERY -1 #define SDL_IGNORE 0 #define SDL_DISABLE 0 #define SDL_ENABLE 1 -extern DECLSPEC Uint8 SDLCALL SDL_EventState(Uint8 type, int state); +/*@}*/ +/** +* This function allows you to set the state of processing certain events. +* If 'state' is set to SDL_IGNORE, that event will be automatically dropped +* from the event queue and will not event be filtered. +* If 'state' is set to SDL_ENABLE, that event will be processed normally. +* If 'state' is set to SDL_QUERY, SDL_EventState() will return the +* current processing state of the specified event. +*/ +extern DECLSPEC Uint8 SDLCALL SDL_EventState(Uint8 type, int state); /* Ends C function definitions when using C++ */ #ifdef __cplusplus diff --git a/source/include/SDL_getenv.h b/source/include/SDL_getenv.h index 853b9ce4..253ad88c 100755 --- a/source/include/SDL_getenv.h +++ b/source/include/SDL_getenv.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -20,5 +20,9 @@ slouken@libsdl.org */ +/** @file SDL_getenv.h + * @deprecated Use SDL_stdinc.h instead + */ + /* DEPRECATED */ #include "SDL_stdinc.h" diff --git a/source/include/SDL_image.h b/source/include/SDL_image.h index 7a474878..79d02813 100755 --- a/source/include/SDL_image.h +++ b/source/include/SDL_image.h @@ -1,6 +1,6 @@ /* SDL_image: An example image loading library for use with SDL - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -38,7 +38,7 @@ extern "C" { */ #define SDL_IMAGE_MAJOR_VERSION 1 #define SDL_IMAGE_MINOR_VERSION 2 -#define SDL_IMAGE_PATCHLEVEL 7 +#define SDL_IMAGE_PATCHLEVEL 8 /* This macro can be used to fill a version structure with the compile-time * version of the SDL_image library. @@ -56,6 +56,20 @@ extern "C" { */ extern DECLSPEC const SDL_version * SDLCALL IMG_Linked_Version(void); +typedef enum +{ + IMG_INIT_JPG = 0x00000001, + IMG_INIT_PNG = 0x00000002, + IMG_INIT_TIF = 0x00000004 +} IMG_InitFlags; + +/* Loads dynamic libraries and prepares them for use. Flags should be + one or more flags from IMG_InitFlags OR'd together */ +extern DECLSPEC int SDLCALL IMG_Init(int flags); + +/* Unloads libraries loaded with IMG_Init */ +extern DECLSPEC void SDLCALL IMG_Quit(); + /* Load an image from an SDL data source. The 'type' may be one of: "BMP", "GIF", "PNG", etc. @@ -75,6 +89,8 @@ extern DECLSPEC SDL_Surface * SDLCALL IMG_Load_RW(SDL_RWops *src, int freesrc); extern DECLSPEC int SDLCALL IMG_InvertAlpha(int on); /* Functions to detect a file type, given a seekable source */ +extern DECLSPEC int SDLCALL IMG_isICO(SDL_RWops *src); +extern DECLSPEC int SDLCALL IMG_isCUR(SDL_RWops *src); extern DECLSPEC int SDLCALL IMG_isBMP(SDL_RWops *src); extern DECLSPEC int SDLCALL IMG_isGIF(SDL_RWops *src); extern DECLSPEC int SDLCALL IMG_isJPG(SDL_RWops *src); @@ -88,6 +104,8 @@ extern DECLSPEC int SDLCALL IMG_isXPM(SDL_RWops *src); extern DECLSPEC int SDLCALL IMG_isXV(SDL_RWops *src); /* Individual loading functions */ +extern DECLSPEC SDL_Surface * SDLCALL IMG_LoadICO_RW(SDL_RWops *src); +extern DECLSPEC SDL_Surface * SDLCALL IMG_LoadCUR_RW(SDL_RWops *src); extern DECLSPEC SDL_Surface * SDLCALL IMG_LoadBMP_RW(SDL_RWops *src); extern DECLSPEC SDL_Surface * SDLCALL IMG_LoadGIF_RW(SDL_RWops *src); extern DECLSPEC SDL_Surface * SDLCALL IMG_LoadJPG_RW(SDL_RWops *src); diff --git a/source/include/SDL_joystick.h b/source/include/SDL_joystick.h index e4f72f1a..d5135c3d 100755 --- a/source/include/SDL_joystick.h +++ b/source/include/SDL_joystick.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -20,7 +20,9 @@ slouken@libsdl.org */ -/* Include file for SDL joystick event handling */ +/** @file SDL_joystick.h + * Include file for SDL joystick event handling + */ #ifndef _SDL_joystick_h #define _SDL_joystick_h @@ -34,97 +36,108 @@ extern "C" { #endif -/* In order to use these functions, SDL_Init() must have been called - with the SDL_INIT_JOYSTICK flag. This causes SDL to scan the system - for joysticks, and load appropriate drivers. -*/ +/** @file SDL_joystick.h + * @note In order to use these functions, SDL_Init() must have been called + * with the SDL_INIT_JOYSTICK flag. This causes SDL to scan the system + * for joysticks, and load appropriate drivers. + */ -/* The joystick structure used to identify an SDL joystick */ +/** The joystick structure used to identify an SDL joystick */ struct _SDL_Joystick; typedef struct _SDL_Joystick SDL_Joystick; - /* Function prototypes */ -/* +/** * Count the number of joysticks attached to the system */ extern DECLSPEC int SDLCALL SDL_NumJoysticks(void); -/* +/** * Get the implementation dependent name of a joystick. + * * This can be called before any joysticks are opened. * If no name can be found, this function returns NULL. */ extern DECLSPEC const char * SDLCALL SDL_JoystickName(int device_index); -/* - * Open a joystick for use - the index passed as an argument refers to +/** + * Open a joystick for use. + * + * @param[in] device_index + * The index passed as an argument refers to * the N'th joystick on the system. This index is the value which will * identify this joystick in future joystick events. * - * This function returns a joystick identifier, or NULL if an error occurred. + * @return This function returns a joystick identifier, or NULL if an error occurred. */ extern DECLSPEC SDL_Joystick * SDLCALL SDL_JoystickOpen(int device_index); -/* +/** * Returns 1 if the joystick has been opened, or 0 if it has not. */ extern DECLSPEC int SDLCALL SDL_JoystickOpened(int device_index); -/* +/** * Get the device index of an opened joystick. */ extern DECLSPEC int SDLCALL SDL_JoystickIndex(SDL_Joystick *joystick); -/* +/** * Get the number of general axis controls on a joystick */ extern DECLSPEC int SDLCALL SDL_JoystickNumAxes(SDL_Joystick *joystick); -/* +/** * Get the number of trackballs on a joystick + * * Joystick trackballs have only relative motion events associated * with them and their state cannot be polled. */ extern DECLSPEC int SDLCALL SDL_JoystickNumBalls(SDL_Joystick *joystick); -/* +/** * Get the number of POV hats on a joystick */ extern DECLSPEC int SDLCALL SDL_JoystickNumHats(SDL_Joystick *joystick); -/* +/** * Get the number of buttons on a joystick */ extern DECLSPEC int SDLCALL SDL_JoystickNumButtons(SDL_Joystick *joystick); -/* +/** * Update the current state of the open joysticks. + * * This is called automatically by the event loop if any joystick * events are enabled. */ extern DECLSPEC void SDLCALL SDL_JoystickUpdate(void); -/* +/** * Enable/disable joystick event polling. + * * If joystick events are disabled, you must call SDL_JoystickUpdate() * yourself and check the state of the joystick when you want joystick * information. - * The state can be one of SDL_QUERY, SDL_ENABLE or SDL_IGNORE. + * + * @param[in] state The state can be one of SDL_QUERY, SDL_ENABLE or SDL_IGNORE. */ extern DECLSPEC int SDLCALL SDL_JoystickEventState(int state); -/* +/** * Get the current state of an axis control on a joystick - * The state is a value ranging from -32768 to 32767. - * The axis indices start at index 0. + * + * @param[in] axis The axis indices start at index 0. + * + * @return The state is a value ranging from -32768 to 32767. */ extern DECLSPEC Sint16 SDLCALL SDL_JoystickGetAxis(SDL_Joystick *joystick, int axis); -/* - * Get the current state of a POV hat on a joystick - * The return value is one of the following positions: +/** + * @name Hat Positions + * The return value of SDL_JoystickGetHat() is one of the following positions: */ +/*@{*/ #define SDL_HAT_CENTERED 0x00 #define SDL_HAT_UP 0x01 #define SDL_HAT_RIGHT 0x02 @@ -134,25 +147,32 @@ extern DECLSPEC Sint16 SDLCALL SDL_JoystickGetAxis(SDL_Joystick *joystick, int a #define SDL_HAT_RIGHTDOWN (SDL_HAT_RIGHT|SDL_HAT_DOWN) #define SDL_HAT_LEFTUP (SDL_HAT_LEFT|SDL_HAT_UP) #define SDL_HAT_LEFTDOWN (SDL_HAT_LEFT|SDL_HAT_DOWN) -/* - * The hat indices start at index 0. +/*@}*/ + +/** + * Get the current state of a POV hat on a joystick + * + * @param[in] hat The hat indices start at index 0. */ extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetHat(SDL_Joystick *joystick, int hat); -/* +/** * Get the ball axis change since the last poll - * This returns 0, or -1 if you passed it invalid parameters. - * The ball indices start at index 0. + * + * @param[in] ball The ball indices start at index 0. + * + * @return This returns 0, or -1 if you passed it invalid parameters. */ extern DECLSPEC int SDLCALL SDL_JoystickGetBall(SDL_Joystick *joystick, int ball, int *dx, int *dy); -/* +/** * Get the current state of a button on a joystick - * The button indices start at index 0. + * + * @param[in] button The button indices start at index 0. */ extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetButton(SDL_Joystick *joystick, int button); -/* +/** * Close a joystick previously opened with SDL_JoystickOpen() */ extern DECLSPEC void SDLCALL SDL_JoystickClose(SDL_Joystick *joystick); diff --git a/source/include/SDL_keyboard.h b/source/include/SDL_keyboard.h index 1ad7dcaa..7b59d24e 100755 --- a/source/include/SDL_keyboard.h +++ b/source/include/SDL_keyboard.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -20,7 +20,9 @@ slouken@libsdl.org */ -/* Include file for SDL keyboard event handling */ +/** @file SDL_keyboard.h + * Include file for SDL keyboard event handling + */ #ifndef _SDL_keyboard_h #define _SDL_keyboard_h @@ -35,78 +37,90 @@ extern "C" { #endif -/* Keysym structure - - The scancode is hardware dependent, and should not be used by general - applications. If no hardware scancode is available, it will be 0. - - - The 'unicode' translated character is only available when character - translation is enabled by the SDL_EnableUNICODE() API. If non-zero, - this is a UNICODE character corresponding to the keypress. If the - high 9 bits of the character are 0, then this maps to the equivalent - ASCII character: - char ch; - if ( (keysym.unicode & 0xFF80) == 0 ) { - ch = keysym.unicode & 0x7F; - } else { - An international character.. - } +/** Keysym structure + * + * - The scancode is hardware dependent, and should not be used by general + * applications. If no hardware scancode is available, it will be 0. + * + * - The 'unicode' translated character is only available when character + * translation is enabled by the SDL_EnableUNICODE() API. If non-zero, + * this is a UNICODE character corresponding to the keypress. If the + * high 9 bits of the character are 0, then this maps to the equivalent + * ASCII character: + * @code + * char ch; + * if ( (keysym.unicode & 0xFF80) == 0 ) { + * ch = keysym.unicode & 0x7F; + * } else { + * An international character.. + * } + * @endcode */ typedef struct SDL_keysym { - Uint8 scancode; /* hardware specific scancode */ - SDLKey sym; /* SDL virtual keysym */ - SDLMod mod; /* current key modifiers */ - Uint16 unicode; /* translated character */ + Uint8 scancode; /**< hardware specific scancode */ + SDLKey sym; /**< SDL virtual keysym */ + SDLMod mod; /**< current key modifiers */ + Uint16 unicode; /**< translated character */ } SDL_keysym; -/* This is the mask which refers to all hotkey bindings */ +/** This is the mask which refers to all hotkey bindings */ #define SDL_ALL_HOTKEYS 0xFFFFFFFF /* Function prototypes */ -/* +/** * Enable/Disable UNICODE translation of keyboard input. + * * This translation has some overhead, so translation defaults off. + * + * @param[in] enable * If 'enable' is 1, translation is enabled. * If 'enable' is 0, translation is disabled. * If 'enable' is -1, the translation state is not changed. - * It returns the previous state of keyboard translation. + * + * @return It returns the previous state of keyboard translation. */ extern DECLSPEC int SDLCALL SDL_EnableUNICODE(int enable); -/* - * Enable/Disable keyboard repeat. Keyboard repeat defaults to off. - * 'delay' is the initial delay in ms between the time when a key is - * pressed, and keyboard repeat begins. - * 'interval' is the time in ms between keyboard repeat events. - */ #define SDL_DEFAULT_REPEAT_DELAY 500 #define SDL_DEFAULT_REPEAT_INTERVAL 30 -/* - * If 'delay' is set to 0, keyboard repeat is disabled. +/** + * Enable/Disable keyboard repeat. Keyboard repeat defaults to off. + * + * @param[in] delay + * 'delay' is the initial delay in ms between the time when a key is + * pressed, and keyboard repeat begins. + * + * @param[in] interval + * 'interval' is the time in ms between keyboard repeat events. + * + * If 'delay' is set to 0, keyboard repeat is disabled. */ extern DECLSPEC int SDLCALL SDL_EnableKeyRepeat(int delay, int interval); extern DECLSPEC void SDLCALL SDL_GetKeyRepeat(int *delay, int *interval); -/* +/** * Get a snapshot of the current state of the keyboard. * Returns an array of keystates, indexed by the SDLK_* syms. - * Used: + * Usage: + * @code * Uint8 *keystate = SDL_GetKeyState(NULL); - * if ( keystate[SDLK_RETURN] ) ... is pressed. + * if ( keystate[SDLK_RETURN] ) //... \ is pressed. + * @endcode */ extern DECLSPEC Uint8 * SDLCALL SDL_GetKeyState(int *numkeys); -/* +/** * Get the current key modifier state */ extern DECLSPEC SDLMod SDLCALL SDL_GetModState(void); -/* - * Set the current key modifier state +/** + * Set the current key modifier state. * This does not change the keyboard state, only the key modifier flags. */ extern DECLSPEC void SDLCALL SDL_SetModState(SDLMod modstate); -/* +/** * Get the name of an SDL virtual keysym */ extern DECLSPEC char * SDLCALL SDL_GetKeyName(SDLKey key); diff --git a/source/include/SDL_keysym.h b/source/include/SDL_keysym.h index ff44a035..90101286 100755 --- a/source/include/SDL_keysym.h +++ b/source/include/SDL_keysym.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -23,14 +23,16 @@ #ifndef _SDL_keysym_h #define _SDL_keysym_h -/* What we really want is a mapping of every raw key on the keyboard. - To support international keyboards, we use the range 0xA1 - 0xFF - as international virtual keycodes. We'll follow in the footsteps of X11... - The names of the keys +/** What we really want is a mapping of every raw key on the keyboard. + * To support international keyboards, we use the range 0xA1 - 0xFF + * as international virtual keycodes. We'll follow in the footsteps of X11... + * @brief The names of the keys */ - typedef enum { - /* The keyboard syms have been cleverly chosen to map to ASCII */ + /** @name ASCII mapped keysyms + * The keyboard syms have been cleverly chosen to map to ASCII + */ + /*@{*/ SDLK_UNKNOWN = 0, SDLK_FIRST = 0, SDLK_BACKSPACE = 8, @@ -108,8 +110,10 @@ typedef enum { SDLK_z = 122, SDLK_DELETE = 127, /* End of ASCII mapped keysyms */ + /*@}*/ - /* International keyboard syms */ + /** @name International keyboard syms */ + /*@{*/ SDLK_WORLD_0 = 160, /* 0xA0 */ SDLK_WORLD_1 = 161, SDLK_WORLD_2 = 162, @@ -206,8 +210,10 @@ typedef enum { SDLK_WORLD_93 = 253, SDLK_WORLD_94 = 254, SDLK_WORLD_95 = 255, /* 0xFF */ + /*@}*/ - /* Numeric keypad */ + /** @name Numeric keypad */ + /*@{*/ SDLK_KP0 = 256, SDLK_KP1 = 257, SDLK_KP2 = 258, @@ -225,8 +231,10 @@ typedef enum { SDLK_KP_PLUS = 270, SDLK_KP_ENTER = 271, SDLK_KP_EQUALS = 272, + /*@}*/ - /* Arrows + Home/End pad */ + /** @name Arrows + Home/End pad */ + /*@{*/ SDLK_UP = 273, SDLK_DOWN = 274, SDLK_RIGHT = 275, @@ -236,8 +244,10 @@ typedef enum { SDLK_END = 279, SDLK_PAGEUP = 280, SDLK_PAGEDOWN = 281, + /*@}*/ - /* Function keys */ + /** @name Function keys */ + /*@{*/ SDLK_F1 = 282, SDLK_F2 = 283, SDLK_F3 = 284, @@ -253,8 +263,10 @@ typedef enum { SDLK_F13 = 294, SDLK_F14 = 295, SDLK_F15 = 296, + /*@}*/ - /* Key state modifier keys */ + /** @name Key state modifier keys */ + /*@{*/ SDLK_NUMLOCK = 300, SDLK_CAPSLOCK = 301, SDLK_SCROLLOCK = 302, @@ -266,27 +278,30 @@ typedef enum { SDLK_LALT = 308, SDLK_RMETA = 309, SDLK_LMETA = 310, - SDLK_LSUPER = 311, /* Left "Windows" key */ - SDLK_RSUPER = 312, /* Right "Windows" key */ - SDLK_MODE = 313, /* "Alt Gr" key */ - SDLK_COMPOSE = 314, /* Multi-key compose key */ + SDLK_LSUPER = 311, /**< Left "Windows" key */ + SDLK_RSUPER = 312, /**< Right "Windows" key */ + SDLK_MODE = 313, /**< "Alt Gr" key */ + SDLK_COMPOSE = 314, /**< Multi-key compose key */ + /*@}*/ - /* Miscellaneous function keys */ + /** @name Miscellaneous function keys */ + /*@{*/ SDLK_HELP = 315, SDLK_PRINT = 316, SDLK_SYSREQ = 317, SDLK_BREAK = 318, SDLK_MENU = 319, - SDLK_POWER = 320, /* Power Macintosh power key */ - SDLK_EURO = 321, /* Some european keyboards */ - SDLK_UNDO = 322, /* Atari keyboard has Undo */ + SDLK_POWER = 320, /**< Power Macintosh power key */ + SDLK_EURO = 321, /**< Some european keyboards */ + SDLK_UNDO = 322, /**< Atari keyboard has Undo */ + /*@}*/ /* Add any other keys here */ SDLK_LAST } SDLKey; -/* Enumeration of valid key mods (possibly OR'd together) */ +/** Enumeration of valid key mods (possibly OR'd together) */ typedef enum { KMOD_NONE = 0x0000, KMOD_LSHIFT= 0x0001, diff --git a/source/include/SDL_loadso.h b/source/include/SDL_loadso.h index ce964494..45a17f9f 100755 --- a/source/include/SDL_loadso.h +++ b/source/include/SDL_loadso.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -20,22 +20,24 @@ slouken@libsdl.org */ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* System dependent library loading routines */ +/** @file SDL_loadso.h + * System dependent library loading routines + */ -/* Some things to keep in mind: - - These functions only work on C function names. Other languages may - have name mangling and intrinsic language support that varies from - compiler to compiler. - - Make sure you declare your function pointers with the same calling - convention as the actual library function. Your code will crash - mysteriously if you do not do this. - - Avoid namespace collisions. If you load a symbol from the library, - it is not defined whether or not it goes into the global symbol - namespace for the application. If it does and it conflicts with - symbols in your code or other shared libraries, you will not get - the results you expect. :) -*/ +/** @file SDL_loadso.h + * Some things to keep in mind: + * - These functions only work on C function names. Other languages may + * have name mangling and intrinsic language support that varies from + * compiler to compiler. + * - Make sure you declare your function pointers with the same calling + * convention as the actual library function. Your code will crash + * mysteriously if you do not do this. + * - Avoid namespace collisions. If you load a symbol from the library, + * it is not defined whether or not it goes into the global symbol + * namespace for the application. If it does and it conflicts with + * symbols in your code or other shared libraries, you will not get + * the results you expect. :) + */ #ifndef _SDL_loadso_h @@ -50,19 +52,21 @@ extern "C" { #endif -/* This function dynamically loads a shared object and returns a pointer +/** + * This function dynamically loads a shared object and returns a pointer * to the object handle (or NULL if there was an error). * The 'sofile' parameter is a system dependent name of the object file. */ extern DECLSPEC void * SDLCALL SDL_LoadObject(const char *sofile); -/* Given an object handle, this function looks up the address of the +/** + * Given an object handle, this function looks up the address of the * named function in the shared object and returns it. This address * is no longer valid after calling SDL_UnloadObject(). */ extern DECLSPEC void * SDLCALL SDL_LoadFunction(void *handle, const char *name); -/* Unload a shared object from memory */ +/** Unload a shared object from memory */ extern DECLSPEC void SDLCALL SDL_UnloadObject(void *handle); /* Ends C function definitions when using C++ */ diff --git a/source/include/SDL_main.h b/source/include/SDL_main.h index cf8b728d..b7f6b2c8 100755 --- a/source/include/SDL_main.h +++ b/source/include/SDL_main.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -25,7 +25,9 @@ #include "SDL_stdinc.h" -/* Redefine main() on Win32 and MacOS so that it is called by winmain.c */ +/** @file SDL_main.h + * Redefine main() on Win32 and MacOS so that it is called by winmain.c + */ #if defined(__WIN32__) || \ (defined(__MWERKS__) && !defined(__BEOS__)) || \ @@ -38,22 +40,25 @@ #define C_LINKAGE #endif /* __cplusplus */ -/* The application's main() function must be called with C linkage, - and should be declared like this: -#ifdef __cplusplus -extern "C" -#endif - int main(int argc, char *argv[]) - { - } +/** The application's main() function must be called with C linkage, + * and should be declared like this: + * @code + * #ifdef __cplusplus + * extern "C" + * #endif + * int main(int argc, char *argv[]) + * { + * } + * @endcode */ #define main SDL_main -/* The prototype for the application's main() function */ +/** The prototype for the application's main() function */ extern C_LINKAGE int SDL_main(int argc, char *argv[]); -/* From the SDL library code -- needed for registering the app on Win32 */ +/** @name From the SDL library code -- needed for registering the app on Win32 */ +/*@{*/ #ifdef __WIN32__ #include "begin_code.h" @@ -61,19 +66,21 @@ extern C_LINKAGE int SDL_main(int argc, char *argv[]); extern "C" { #endif -/* This should be called from your WinMain() function, if any */ +/** This should be called from your WinMain() function, if any */ extern DECLSPEC void SDLCALL SDL_SetModuleHandle(void *hInst); -/* This can also be called, but is no longer necessary */ +/** This can also be called, but is no longer necessary */ extern DECLSPEC int SDLCALL SDL_RegisterApp(char *name, Uint32 style, void *hInst); -/* This can also be called, but is no longer necessary (SDL_Quit calls it) */ +/** This can also be called, but is no longer necessary (SDL_Quit calls it) */ extern DECLSPEC void SDLCALL SDL_UnregisterApp(void); #ifdef __cplusplus } #endif #include "close_code.h" #endif +/*@}*/ -/* From the SDL library code -- needed for registering QuickDraw on MacOS */ +/** @name From the SDL library code -- needed for registering QuickDraw on MacOS */ +/*@{*/ #if defined(__MACOS__) #include "begin_code.h" @@ -81,10 +88,10 @@ extern DECLSPEC void SDLCALL SDL_UnregisterApp(void); extern "C" { #endif -/* Forward declaration so we don't need to include QuickDraw.h */ +/** Forward declaration so we don't need to include QuickDraw.h */ struct QDGlobals; -/* This should be called from your main() function, if any */ +/** This should be called from your main() function, if any */ extern DECLSPEC void SDLCALL SDL_InitQuickDraw(struct QDGlobals *the_qd); #ifdef __cplusplus @@ -92,6 +99,7 @@ extern DECLSPEC void SDLCALL SDL_InitQuickDraw(struct QDGlobals *the_qd); #endif #include "close_code.h" #endif +/*@}*/ #endif /* Need to redefine main()? */ diff --git a/source/include/SDL_mixer.h b/source/include/SDL_mixer.h index cf0a095b..574fbf0d 100755 --- a/source/include/SDL_mixer.h +++ b/source/include/SDL_mixer.h @@ -1,6 +1,6 @@ /* SDL_mixer: An audio mixer library based on the SDL library - Copyright (C) 1997-2004 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -20,7 +20,7 @@ slouken@libsdl.org */ -/* $Id: SDL_mixer.h,v 1.2 2007/08/12 09:32:55 eihrul Exp $ */ +/* $Id: SDL_mixer.h 4913 2009-10-03 03:35:05Z slouken $ */ #ifndef _SDL_MIXER_H #define _SDL_MIXER_H @@ -41,7 +41,7 @@ extern "C" { */ #define SDL_MIXER_MAJOR_VERSION 1 #define SDL_MIXER_MINOR_VERSION 2 -#define SDL_MIXER_PATCHLEVEL 8 +#define SDL_MIXER_PATCHLEVEL 9 /* This macro can be used to fill a version structure with the compile-time * version of the SDL_mixer library. @@ -104,7 +104,8 @@ typedef enum { MUS_MID, MUS_OGG, MUS_MP3, - MUS_MP3_MAD + MUS_MP3_MAD, + MUS_FLAC } Mix_MusicType; /* The internal format for a music chunk interpreted via mikmod */ @@ -145,6 +146,30 @@ extern DECLSPEC Mix_Chunk * SDLCALL Mix_QuickLoad_RAW(Uint8 *mem, Uint32 len); extern DECLSPEC void SDLCALL Mix_FreeChunk(Mix_Chunk *chunk); extern DECLSPEC void SDLCALL Mix_FreeMusic(Mix_Music *music); +/* Get a list of chunk/music decoders that this build of SDL_mixer provides. + This list can change between builds AND runs of the program, if external + libraries that add functionality become available. + You must successfully call Mix_OpenAudio() before calling these functions. + This API is only available in SDL_mixer 1.2.9 and later. + + // usage... + int i; + const int total = Mix_GetNumChunkDecoders(); + for (i = 0; i < total; i++) + printf("Supported chunk decoder: [%s]\n", Mix_GetChunkDecoder(i)); + + Appearing in this list doesn't promise your specific audio file will + decode...but it's handy to know if you have, say, a functioning Timidity + install. + + These return values are static, read-only data; do not modify or free it. + The pointers remain valid until you call Mix_CloseAudio(). +*/ +extern DECLSPEC int SDLCALL Mix_GetNumChunkDecoders(void); +extern DECLSPEC const char * SDLCALL Mix_GetChunkDecoder(int index); +extern DECLSPEC int SDLCALL Mix_GetNumMusicDecoders(void); +extern DECLSPEC const char * SDLCALL Mix_GetMusicDecoder(int index); + /* Find out the music format of a mixer music, or the currently playing music, if 'music' is NULL. */ diff --git a/source/include/SDL_mouse.h b/source/include/SDL_mouse.h index 019497fb..a573f04e 100755 --- a/source/include/SDL_mouse.h +++ b/source/include/SDL_mouse.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -20,7 +20,9 @@ slouken@libsdl.org */ -/* Include file for SDL mouse event handling */ +/** @file SDL_mouse.h + * Include file for SDL mouse event handling + */ #ifndef _SDL_mouse_h #define _SDL_mouse_h @@ -35,18 +37,18 @@ extern "C" { #endif -typedef struct WMcursor WMcursor; /* Implementation dependent */ +typedef struct WMcursor WMcursor; /**< Implementation dependent */ typedef struct SDL_Cursor { - SDL_Rect area; /* The area of the mouse cursor */ - Sint16 hot_x, hot_y; /* The "tip" of the cursor */ - Uint8 *data; /* B/W cursor data */ - Uint8 *mask; /* B/W cursor mask */ - Uint8 *save[2]; /* Place to save cursor area */ - WMcursor *wm_cursor; /* Window-manager cursor */ + SDL_Rect area; /**< The area of the mouse cursor */ + Sint16 hot_x, hot_y; /**< The "tip" of the cursor */ + Uint8 *data; /**< B/W cursor data */ + Uint8 *mask; /**< B/W cursor mask */ + Uint8 *save[2]; /**< Place to save cursor area */ + WMcursor *wm_cursor; /**< Window-manager cursor */ } SDL_Cursor; /* Function prototypes */ -/* +/** * Retrieve the current state of the mouse. * The current button state is returned as a button bitmask, which can * be tested using the SDL_BUTTON(X) macros, and x and y are set to the @@ -54,7 +56,7 @@ typedef struct SDL_Cursor { */ extern DECLSPEC Uint8 SDLCALL SDL_GetMouseState(int *x, int *y); -/* +/** * Retrieve the current state of the mouse. * The current button state is returned as a button bitmask, which can * be tested using the SDL_BUTTON(X) macros, and x and y are set to the @@ -62,12 +64,12 @@ extern DECLSPEC Uint8 SDLCALL SDL_GetMouseState(int *x, int *y); */ extern DECLSPEC Uint8 SDLCALL SDL_GetRelativeMouseState(int *x, int *y); -/* +/** * Set the position of the mouse cursor (generates a mouse motion event) */ extern DECLSPEC void SDLCALL SDL_WarpMouse(Uint16 x, Uint16 y); -/* +/** * Create a cursor using the specified data and mask (in MSB format). * The cursor width must be a multiple of 8 bits. * @@ -83,24 +85,24 @@ extern DECLSPEC void SDLCALL SDL_WarpMouse(Uint16 x, Uint16 y); extern DECLSPEC SDL_Cursor * SDLCALL SDL_CreateCursor (Uint8 *data, Uint8 *mask, int w, int h, int hot_x, int hot_y); -/* +/** * Set the currently active cursor to the specified one. * If the cursor is currently visible, the change will be immediately * represented on the display. */ extern DECLSPEC void SDLCALL SDL_SetCursor(SDL_Cursor *cursor); -/* +/** * Returns the currently active cursor. */ extern DECLSPEC SDL_Cursor * SDLCALL SDL_GetCursor(void); -/* +/** * Deallocates a cursor created with SDL_CreateCursor(). */ extern DECLSPEC void SDLCALL SDL_FreeCursor(SDL_Cursor *cursor); -/* +/** * Toggle whether or not the cursor is shown on the screen. * The cursor start off displayed, but can be turned off. * SDL_ShowCursor() returns 1 if the cursor was being displayed @@ -109,12 +111,13 @@ extern DECLSPEC void SDLCALL SDL_FreeCursor(SDL_Cursor *cursor); */ extern DECLSPEC int SDLCALL SDL_ShowCursor(int toggle); -/* Used as a mask when testing buttons in buttonstate - Button 1: Left mouse button - Button 2: Middle mouse button - Button 3: Right mouse button - Button 4: Mouse wheel up (may also be a real button) - Button 5: Mouse wheel down (may also be a real button) +/*@{*/ +/** Used as a mask when testing buttons in buttonstate + * Button 1: Left mouse button + * Button 2: Middle mouse button + * Button 3: Right mouse button + * Button 4: Mouse wheel up (may also be a real button) + * Button 5: Mouse wheel down (may also be a real button) */ #define SDL_BUTTON(X) (1 << ((X)-1)) #define SDL_BUTTON_LEFT 1 @@ -129,7 +132,7 @@ extern DECLSPEC int SDLCALL SDL_ShowCursor(int toggle); #define SDL_BUTTON_RMASK SDL_BUTTON(SDL_BUTTON_RIGHT) #define SDL_BUTTON_X1MASK SDL_BUTTON(SDL_BUTTON_X1) #define SDL_BUTTON_X2MASK SDL_BUTTON(SDL_BUTTON_X2) - +/*@}*/ /* Ends C function definitions when using C++ */ #ifdef __cplusplus diff --git a/source/include/SDL_mutex.h b/source/include/SDL_mutex.h index 00165281..920971df 100755 --- a/source/include/SDL_mutex.h +++ b/source/include/SDL_mutex.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -23,10 +23,11 @@ #ifndef _SDL_mutex_h #define _SDL_mutex_h -/* Functions to provide thread synchronization primitives - - These are independent of the other SDL routines. -*/ +/** @file SDL_mutex.h + * Functions to provide thread synchronization primitives + * + * @note These are independent of the other SDL routines. + */ #include "SDL_stdinc.h" #include "SDL_error.h" @@ -37,122 +38,135 @@ extern "C" { #endif -/* Synchronization functions which can time out return this value - if they time out. -*/ +/** Synchronization functions which can time out return this value + * if they time out. + */ #define SDL_MUTEX_TIMEDOUT 1 -/* This is the timeout value which corresponds to never time out */ +/** This is the timeout value which corresponds to never time out */ #define SDL_MUTEX_MAXWAIT (~(Uint32)0) /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* Mutex functions */ +/** @name Mutex functions */ /*@{*/ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* The SDL mutex structure, defined in SDL_mutex.c */ +/** The SDL mutex structure, defined in SDL_mutex.c */ struct SDL_mutex; typedef struct SDL_mutex SDL_mutex; -/* Create a mutex, initialized unlocked */ +/** Create a mutex, initialized unlocked */ extern DECLSPEC SDL_mutex * SDLCALL SDL_CreateMutex(void); -/* Lock the mutex (Returns 0, or -1 on error) */ #define SDL_LockMutex(m) SDL_mutexP(m) +/** Lock the mutex + * @return 0, or -1 on error + */ extern DECLSPEC int SDLCALL SDL_mutexP(SDL_mutex *mutex); -/* Unlock the mutex (Returns 0, or -1 on error) - It is an error to unlock a mutex that has not been locked by - the current thread, and doing so results in undefined behavior. - */ #define SDL_UnlockMutex(m) SDL_mutexV(m) +/** Unlock the mutex + * @return 0, or -1 on error + * + * It is an error to unlock a mutex that has not been locked by + * the current thread, and doing so results in undefined behavior. + */ extern DECLSPEC int SDLCALL SDL_mutexV(SDL_mutex *mutex); -/* Destroy a mutex */ +/** Destroy a mutex */ extern DECLSPEC void SDLCALL SDL_DestroyMutex(SDL_mutex *mutex); +/*@}*/ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* Semaphore functions */ +/** @name Semaphore functions */ /*@{*/ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* The SDL semaphore structure, defined in SDL_sem.c */ +/** The SDL semaphore structure, defined in SDL_sem.c */ struct SDL_semaphore; typedef struct SDL_semaphore SDL_sem; -/* Create a semaphore, initialized with value, returns NULL on failure. */ +/** Create a semaphore, initialized with value, returns NULL on failure. */ extern DECLSPEC SDL_sem * SDLCALL SDL_CreateSemaphore(Uint32 initial_value); -/* Destroy a semaphore */ +/** Destroy a semaphore */ extern DECLSPEC void SDLCALL SDL_DestroySemaphore(SDL_sem *sem); -/* This function suspends the calling thread until the semaphore pointed +/** + * This function suspends the calling thread until the semaphore pointed * to by sem has a positive count. It then atomically decreases the semaphore * count. */ extern DECLSPEC int SDLCALL SDL_SemWait(SDL_sem *sem); -/* Non-blocking variant of SDL_SemWait(), returns 0 if the wait succeeds, - SDL_MUTEX_TIMEDOUT if the wait would block, and -1 on error. -*/ +/** Non-blocking variant of SDL_SemWait(). + * @return 0 if the wait succeeds, + * SDL_MUTEX_TIMEDOUT if the wait would block, and -1 on error. + */ extern DECLSPEC int SDLCALL SDL_SemTryWait(SDL_sem *sem); -/* Variant of SDL_SemWait() with a timeout in milliseconds, returns 0 if - the wait succeeds, SDL_MUTEX_TIMEDOUT if the wait does not succeed in - the allotted time, and -1 on error. - On some platforms this function is implemented by looping with a delay - of 1 ms, and so should be avoided if possible. -*/ +/** Variant of SDL_SemWait() with a timeout in milliseconds, returns 0 if + * the wait succeeds, SDL_MUTEX_TIMEDOUT if the wait does not succeed in + * the allotted time, and -1 on error. + * + * On some platforms this function is implemented by looping with a delay + * of 1 ms, and so should be avoided if possible. + */ extern DECLSPEC int SDLCALL SDL_SemWaitTimeout(SDL_sem *sem, Uint32 ms); -/* Atomically increases the semaphore's count (not blocking), returns 0, - or -1 on error. +/** Atomically increases the semaphore's count (not blocking). + * @return 0, or -1 on error. */ extern DECLSPEC int SDLCALL SDL_SemPost(SDL_sem *sem); -/* Returns the current count of the semaphore */ +/** Returns the current count of the semaphore */ extern DECLSPEC Uint32 SDLCALL SDL_SemValue(SDL_sem *sem); +/*@}*/ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* Condition variable functions */ +/** @name Condition_variable_functions */ /*@{*/ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* The SDL condition variable structure, defined in SDL_cond.c */ +/*@{*/ +/** The SDL condition variable structure, defined in SDL_cond.c */ struct SDL_cond; typedef struct SDL_cond SDL_cond; +/*@}*/ -/* Create a condition variable */ +/** Create a condition variable */ extern DECLSPEC SDL_cond * SDLCALL SDL_CreateCond(void); -/* Destroy a condition variable */ +/** Destroy a condition variable */ extern DECLSPEC void SDLCALL SDL_DestroyCond(SDL_cond *cond); -/* Restart one of the threads that are waiting on the condition variable, - returns 0 or -1 on error. +/** Restart one of the threads that are waiting on the condition variable, + * @return 0 or -1 on error. */ extern DECLSPEC int SDLCALL SDL_CondSignal(SDL_cond *cond); -/* Restart all threads that are waiting on the condition variable, - returns 0 or -1 on error. +/** Restart all threads that are waiting on the condition variable, + * @return 0 or -1 on error. */ extern DECLSPEC int SDLCALL SDL_CondBroadcast(SDL_cond *cond); -/* Wait on the condition variable, unlocking the provided mutex. - The mutex must be locked before entering this function! - The mutex is re-locked once the condition variable is signaled. - Returns 0 when it is signaled, or -1 on error. +/** Wait on the condition variable, unlocking the provided mutex. + * The mutex must be locked before entering this function! + * The mutex is re-locked once the condition variable is signaled. + * @return 0 when it is signaled, or -1 on error. */ extern DECLSPEC int SDLCALL SDL_CondWait(SDL_cond *cond, SDL_mutex *mut); -/* Waits for at most 'ms' milliseconds, and returns 0 if the condition - variable is signaled, SDL_MUTEX_TIMEDOUT if the condition is not - signaled in the allotted time, and -1 on error. - On some platforms this function is implemented by looping with a delay - of 1 ms, and so should be avoided if possible. -*/ +/** Waits for at most 'ms' milliseconds, and returns 0 if the condition + * variable is signaled, SDL_MUTEX_TIMEDOUT if the condition is not + * signaled in the allotted time, and -1 on error. + * On some platforms this function is implemented by looping with a delay + * of 1 ms, and so should be avoided if possible. + */ extern DECLSPEC int SDLCALL SDL_CondWaitTimeout(SDL_cond *cond, SDL_mutex *mutex, Uint32 ms); +/*@}*/ + /* Ends C function definitions when using C++ */ #ifdef __cplusplus } @@ -160,3 +174,4 @@ extern DECLSPEC int SDLCALL SDL_CondWaitTimeout(SDL_cond *cond, SDL_mutex *mutex #include "close_code.h" #endif /* _SDL_mutex_h */ + diff --git a/source/include/SDL_opengl.h b/source/include/SDL_opengl.h index 36c0a309..c479a3a4 100755 --- a/source/include/SDL_opengl.h +++ b/source/include/SDL_opengl.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -20,7 +20,9 @@ slouken@libsdl.org */ -/* This is a simple file to encapsulate the OpenGL API headers */ +/** @file SDL_opengl.h + * This is a simple file to encapsulate the OpenGL API headers + */ #include "SDL_config.h" @@ -48,10 +50,12 @@ #undef __glext_h_ #endif -/* This file taken from "GLext.h" from the Jeff Molofee OpenGL tutorials. - It is included here because glext.h is not available on some systems. - If you don't want this version included, simply define "NO_SDL_GLEXT" +/** @name GLext.h + * This file taken from "GLext.h" from the Jeff Molofee OpenGL tutorials. + * It is included here because glext.h is not available on some systems. + * If you don't want this version included, simply define "NO_SDL_GLEXT" */ +/*@{*/ #ifndef NO_SDL_GLEXT #if !defined(__glext_h_) && !defined(GL_GLEXT_LEGACY) #define __glext_h_ @@ -6549,3 +6553,4 @@ typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const GLvoid #endif #endif /* NO_SDL_GLEXT */ +/*@}*/ diff --git a/source/include/SDL_platform.h b/source/include/SDL_platform.h index 1bfee29e..11d86736 100644 --- a/source/include/SDL_platform.h +++ b/source/include/SDL_platform.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -20,7 +20,9 @@ slouken@libsdl.org */ -/* Try to get a standard set of platform defines */ +/** @file SDL_platform.h + * Try to get a standard set of platform defines + */ #ifndef _SDL_platform_h #define _SDL_platform_h @@ -33,6 +35,10 @@ #undef __BEOS__ #define __BEOS__ 1 #endif +#if defined(__HAIKU__) +#undef __HAIKU__ +#define __HAIKU__ 1 +#endif #if defined(bsdi) || defined(__bsdi) || defined(__bsdi__) #undef __BSDI__ #define __BSDI__ 1 @@ -41,10 +47,14 @@ #undef __DREAMCAST__ #define __DREAMCAST__ 1 #endif -#if defined(__FreeBSD__) || defined(__DragonFly__) +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) #undef __FREEBSD__ #define __FREEBSD__ 1 #endif +#if defined(__HAIKU__) +#undef __HAIKU__ +#define __HAIKU__ 1 +#endif #if defined(hpux) || defined(__hpux) || defined(__hpux__) #undef __HPUX__ #define __HPUX__ 1 diff --git a/source/include/SDL_quit.h b/source/include/SDL_quit.h index fcf40fbd..6d82e7e0 100755 --- a/source/include/SDL_quit.h +++ b/source/include/SDL_quit.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -20,7 +20,9 @@ slouken@libsdl.org */ -/* Include file for SDL quit event handling */ +/** @file SDL_quit.h + * Include file for SDL quit event handling + */ #ifndef _SDL_quit_h #define _SDL_quit_h @@ -28,22 +30,25 @@ #include "SDL_stdinc.h" #include "SDL_error.h" -/* - An SDL_QUITEVENT is generated when the user tries to close the application - window. If it is ignored or filtered out, the window will remain open. - If it is not ignored or filtered, it is queued normally and the window - is allowed to close. When the window is closed, screen updates will - complete, but have no effect. +/** @file SDL_quit.h + * An SDL_QUITEVENT is generated when the user tries to close the application + * window. If it is ignored or filtered out, the window will remain open. + * If it is not ignored or filtered, it is queued normally and the window + * is allowed to close. When the window is closed, screen updates will + * complete, but have no effect. + * + * SDL_Init() installs signal handlers for SIGINT (keyboard interrupt) + * and SIGTERM (system termination request), if handlers do not already + * exist, that generate SDL_QUITEVENT events as well. There is no way + * to determine the cause of an SDL_QUITEVENT, but setting a signal + * handler in your application will override the default generation of + * quit events for that signal. + */ - SDL_Init() installs signal handlers for SIGINT (keyboard interrupt) - and SIGTERM (system termination request), if handlers do not already - exist, that generate SDL_QUITEVENT events as well. There is no way - to determine the cause of an SDL_QUITEVENT, but setting a signal - handler in your application will override the default generation of - quit events for that signal. -*/ +/** @file SDL_quit.h + * There are no functions directly affecting the quit event + */ -/* There are no functions directly affecting the quit event */ #define SDL_QuitRequested() \ (SDL_PumpEvents(), SDL_PeepEvents(NULL,0,SDL_PEEKEVENT,SDL_QUITMASK)) diff --git a/source/include/SDL_rwops.h b/source/include/SDL_rwops.h index 8c177017..a450119f 100755 --- a/source/include/SDL_rwops.h +++ b/source/include/SDL_rwops.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -20,9 +20,10 @@ slouken@libsdl.org */ -/* This file provides a general interface for SDL to read and write - data sources. It can easily be extended to files, memory, etc. -*/ +/** @file SDL_rwops.h + * This file provides a general interface for SDL to read and write + * data sources. It can easily be extended to files, memory, etc. + */ #ifndef _SDL_rwops_h #define _SDL_rwops_h @@ -36,28 +37,28 @@ extern "C" { #endif -/* This is the read/write operation structure -- very basic */ +/** This is the read/write operation structure -- very basic */ typedef struct SDL_RWops { - /* Seek to 'offset' relative to whence, one of stdio's whence values: - SEEK_SET, SEEK_CUR, SEEK_END - Returns the final offset in the data source. + /** Seek to 'offset' relative to whence, one of stdio's whence values: + * SEEK_SET, SEEK_CUR, SEEK_END + * Returns the final offset in the data source. */ int (SDLCALL *seek)(struct SDL_RWops *context, int offset, int whence); - /* Read up to 'num' objects each of size 'objsize' from the data - source to the area pointed at by 'ptr'. - Returns the number of objects read, or -1 if the read failed. + /** Read up to 'maxnum' objects each of size 'size' from the data + * source to the area pointed at by 'ptr'. + * Returns the number of objects read, or -1 if the read failed. */ int (SDLCALL *read)(struct SDL_RWops *context, void *ptr, int size, int maxnum); - /* Write exactly 'num' objects each of size 'objsize' from the area - pointed at by 'ptr' to data source. - Returns 'num', or -1 if the write failed. + /** Write exactly 'num' objects each of size 'objsize' from the area + * pointed at by 'ptr' to data source. + * Returns 'num', or -1 if the write failed. */ int (SDLCALL *write)(struct SDL_RWops *context, const void *ptr, int size, int num); - /* Close and free an allocated SDL_FSops structure */ + /** Close and free an allocated SDL_FSops structure */ int (SDLCALL *close)(struct SDL_RWops *context); Uint32 type; @@ -92,7 +93,8 @@ typedef struct SDL_RWops { } SDL_RWops; -/* Functions to create SDL_RWops structures from various data sources */ +/** @name Functions to create SDL_RWops structures from various data sources */ +/*@{*/ extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromFile(const char *file, const char *mode); @@ -106,34 +108,43 @@ extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromConstMem(const void *mem, int size extern DECLSPEC SDL_RWops * SDLCALL SDL_AllocRW(void); extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops *area); -#define RW_SEEK_SET 0 /* Seek from the beginning of data */ -#define RW_SEEK_CUR 1 /* Seek relative to current read point */ -#define RW_SEEK_END 2 /* Seek relative to the end of data */ +/*@}*/ -/* Macros to easily read and write from an SDL_RWops structure */ +/** @name Seek Reference Points */ +/*@{*/ +#define RW_SEEK_SET 0 /**< Seek from the beginning of data */ +#define RW_SEEK_CUR 1 /**< Seek relative to current read point */ +#define RW_SEEK_END 2 /**< Seek relative to the end of data */ +/*@}*/ + +/** @name Macros to easily read and write from an SDL_RWops structure */ +/*@{*/ #define SDL_RWseek(ctx, offset, whence) (ctx)->seek(ctx, offset, whence) #define SDL_RWtell(ctx) (ctx)->seek(ctx, 0, RW_SEEK_CUR) #define SDL_RWread(ctx, ptr, size, n) (ctx)->read(ctx, ptr, size, n) #define SDL_RWwrite(ctx, ptr, size, n) (ctx)->write(ctx, ptr, size, n) #define SDL_RWclose(ctx) (ctx)->close(ctx) +/*@}*/ - -/* Read an item of the specified endianness and return in native format */ +/** @name Read an item of the specified endianness and return in native format */ +/*@{*/ extern DECLSPEC Uint16 SDLCALL SDL_ReadLE16(SDL_RWops *src); extern DECLSPEC Uint16 SDLCALL SDL_ReadBE16(SDL_RWops *src); extern DECLSPEC Uint32 SDLCALL SDL_ReadLE32(SDL_RWops *src); extern DECLSPEC Uint32 SDLCALL SDL_ReadBE32(SDL_RWops *src); extern DECLSPEC Uint64 SDLCALL SDL_ReadLE64(SDL_RWops *src); extern DECLSPEC Uint64 SDLCALL SDL_ReadBE64(SDL_RWops *src); +/*@}*/ -/* Write an item of native format to the specified endianness */ +/** @name Write an item of native format to the specified endianness */ +/*@{*/ extern DECLSPEC int SDLCALL SDL_WriteLE16(SDL_RWops *dst, Uint16 value); extern DECLSPEC int SDLCALL SDL_WriteBE16(SDL_RWops *dst, Uint16 value); extern DECLSPEC int SDLCALL SDL_WriteLE32(SDL_RWops *dst, Uint32 value); extern DECLSPEC int SDLCALL SDL_WriteBE32(SDL_RWops *dst, Uint32 value); extern DECLSPEC int SDLCALL SDL_WriteLE64(SDL_RWops *dst, Uint64 value); extern DECLSPEC int SDLCALL SDL_WriteBE64(SDL_RWops *dst, Uint64 value); - +/*@}*/ /* Ends C function definitions when using C++ */ #ifdef __cplusplus diff --git a/source/include/SDL_stdinc.h b/source/include/SDL_stdinc.h index e47c21da..e1f85fb7 100644 --- a/source/include/SDL_stdinc.h +++ b/source/include/SDL_stdinc.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -20,7 +20,9 @@ slouken@libsdl.org */ -/* This is a general header that includes C language support */ +/** @file SDL_stdinc.h + * This is a general header that includes C language support + */ #ifndef _SDL_stdinc_h #define _SDL_stdinc_h @@ -68,16 +70,27 @@ #ifdef HAVE_CTYPE_H # include #endif -#ifdef HAVE_ICONV_H +#if defined(HAVE_ICONV) && defined(HAVE_ICONV_H) # include #endif -/* The number of elements in an array */ +/** The number of elements in an array */ #define SDL_arraysize(array) (sizeof(array)/sizeof(array[0])) #define SDL_TABLESIZE(table) SDL_arraysize(table) -/* Basic data types */ -typedef enum SDL_bool { +/* Use proper C++ casts when compiled as C++ to be compatible with the option + -Wold-style-cast of GCC (and -Werror=old-style-cast in GCC 4.2 and above. */ +#ifdef __cplusplus +#define SDL_reinterpret_cast(type, expression) reinterpret_cast(expression) +#define SDL_static_cast(type, expression) static_cast(expression) +#else +#define SDL_reinterpret_cast(type, expression) ((type)(expression)) +#define SDL_static_cast(type, expression) ((type)(expression)) +#endif + +/** @name Basic data types */ +/*@{*/ +typedef enum { SDL_FALSE = 0, SDL_TRUE = 1 } SDL_bool; @@ -102,7 +115,10 @@ typedef struct { } Uint64, Sint64; #endif -/* Make sure the types really have the right sizes */ +/*@}*/ + +/** @name Make sure the types really have the right sizes */ +/*@{*/ #define SDL_COMPILE_TIME_ASSERT(name, x) \ typedef int SDL_dummy_ ## name[(x) * 2 - 1] @@ -114,12 +130,14 @@ SDL_COMPILE_TIME_ASSERT(uint32, sizeof(Uint32) == 4); SDL_COMPILE_TIME_ASSERT(sint32, sizeof(Sint32) == 4); SDL_COMPILE_TIME_ASSERT(uint64, sizeof(Uint64) == 8); SDL_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8); +/*@}*/ -/* Check to make sure enums are the size of ints, for structure packing. - For both Watcom C/C++ and Borland C/C++ the compiler option that makes - enums having the size of an int must be enabled. - This is "-b" for Borland C/C++ and "-ei" for Watcom C/C++ (v11). -*/ +/** @name Enum Size Check + * Check to make sure enums are the size of ints, for structure packing. + * For both Watcom C/C++ and Borland C/C++ the compiler option that makes + * enums having the size of an int must be enabled. + * This is "-b" for Borland C/C++ and "-ei" for Watcom C/C++ (v11). + */ /* Enable enums always int in CodeWarrior (for MPW use "-enum int") */ #ifdef __MWERKS__ #pragma enumsalwaysint on @@ -132,7 +150,7 @@ typedef enum { #ifndef __NDS__ SDL_COMPILE_TIME_ASSERT(enum, sizeof(SDL_DUMMY_ENUM) == sizeof(int)); #endif - +/*@}*/ #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ @@ -248,7 +266,7 @@ do { \ "cld\n\t" \ "rep ; stosl\n\t" \ : "=&D" (u0), "=&a" (u1), "=&c" (u2) \ - : "0" (dst), "1" (val), "2" ((Uint32)(len)) \ + : "0" (dst), "1" (val), "2" (SDL_static_cast(Uint32, len)) \ : "memory" ); \ } while(0) #endif @@ -257,8 +275,9 @@ do { \ do { \ unsigned _count = (len); \ unsigned _n = (_count + 3) / 4; \ - Uint32 *_p = (Uint32 *)(dst); \ + Uint32 *_p = SDL_static_cast(Uint32 *, dst); \ Uint32 _val = (val); \ + if (len == 0) break; \ switch (_count % 4) { \ case 0: do { *_p++ = _val; \ case 3: *_p++ = _val; \ @@ -287,7 +306,7 @@ do { \ "movsb\n" \ "2:" \ : "=&c" (u0), "=&D" (u1), "=&S" (u2) \ - : "0" ((unsigned)(len)/4), "q" (len), "1" (dst),"2" (src) \ + : "0" (SDL_static_cast(unsigned, len)/4), "q" (len), "1" (dst),"2" (src) \ : "memory" ); \ } while(0) #endif @@ -312,7 +331,7 @@ do { \ "cld\n\t" \ "rep ; movsl" \ : "=&c" (ecx), "=&D" (edi), "=&S" (esi) \ - : "0" ((unsigned)(len)), "1" (dst), "2" (src) \ + : "0" (SDL_static_cast(unsigned, len)), "1" (dst), "2" (src) \ : "memory" ); \ } while(0) #endif @@ -324,13 +343,14 @@ do { \ #define SDL_revcpy(dst, src, len) \ do { \ int u0, u1, u2; \ - char *dstp = (char *)(dst); \ - char *srcp = (char *)(src); \ + char *dstp = SDL_static_cast(char *, dst); \ + char *srcp = SDL_static_cast(char *, src); \ int n = (len); \ if ( n >= 4 ) { \ __asm__ __volatile__ ( \ "std\n\t" \ "rep ; movsl\n\t" \ + "cld\n\t" \ : "=&c" (u0), "=&D" (u1), "=&S" (u2) \ : "0" (n >> 2), \ "1" (dstp+(n-4)), "2" (srcp+(n-4)) \ @@ -563,13 +583,17 @@ extern DECLSPEC int SDLCALL SDL_snprintf(char *text, size_t maxlen, const char * extern DECLSPEC int SDLCALL SDL_vsnprintf(char *text, size_t maxlen, const char *fmt, va_list ap); #endif -/* The SDL implementation of iconv() returns these error codes */ +/** @name SDL_ICONV Error Codes + * The SDL implementation of iconv() returns these error codes + */ +/*@{*/ #define SDL_ICONV_ERROR (size_t)-1 #define SDL_ICONV_E2BIG (size_t)-2 #define SDL_ICONV_EILSEQ (size_t)-3 #define SDL_ICONV_EINVAL (size_t)-4 +/*@}*/ -#ifdef HAVE_ICONV +#if defined(HAVE_ICONV) && defined(HAVE_ICONV_H) #define SDL_iconv_t iconv_t #define SDL_iconv_open iconv_open #define SDL_iconv_close iconv_close @@ -579,9 +603,9 @@ extern DECLSPEC SDL_iconv_t SDLCALL SDL_iconv_open(const char *tocode, const cha extern DECLSPEC int SDLCALL SDL_iconv_close(SDL_iconv_t cd); #endif extern DECLSPEC size_t SDLCALL SDL_iconv(SDL_iconv_t cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft); -/* This function converts a string between encodings in one pass, returning a - string that must be freed with SDL_free() or NULL on error. -*/ +/** This function converts a string between encodings in one pass, returning a + * string that must be freed with SDL_free() or NULL on error. + */ extern DECLSPEC char * SDLCALL SDL_iconv_string(const char *tocode, const char *fromcode, const char *inbuf, size_t inbytesleft); #define SDL_iconv_utf8_locale(S) SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1) #define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2", "UTF-8", S, SDL_strlen(S)+1) diff --git a/source/include/SDL_syswm.h b/source/include/SDL_syswm.h index 010dd1bc..716dddcb 100755 --- a/source/include/SDL_syswm.h +++ b/source/include/SDL_syswm.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -20,7 +20,9 @@ slouken@libsdl.org */ -/* Include file for SDL custom system window manager hooks */ +/** @file SDL_syswm.h + * Include file for SDL custom system window manager hooks + */ #ifndef _SDL_syswm_h #define _SDL_syswm_h @@ -35,11 +37,12 @@ extern "C" { #endif -/* Your application has access to a special type of event 'SDL_SYSWMEVENT', - which contains window-manager specific information and arrives whenever - an unhandled window event occurs. This event is ignored by default, but - you can enable it with SDL_EventState() -*/ +/** @file SDL_syswm.h + * Your application has access to a special type of event 'SDL_SYSWMEVENT', + * which contains window-manager specific information and arrives whenever + * an unhandled window event occurs. This event is ignored by default, but + * you can enable it with SDL_EventState() + */ #ifdef SDL_PROTOTYPES_ONLY struct SDL_SysWMinfo; typedef struct SDL_SysWMinfo SDL_SysWMinfo; @@ -60,12 +63,12 @@ typedef struct SDL_SysWMinfo SDL_SysWMinfo; #undef Cursor #endif -/* These are the various supported subsystems under UNIX */ +/** These are the various supported subsystems under UNIX */ typedef enum { SDL_SYSWM_X11 } SDL_SYSWM_TYPE; -/* The UNIX custom event structure */ +/** The UNIX custom event structure */ struct SDL_SysWMmsg { SDL_version version; SDL_SYSWM_TYPE subsystem; @@ -74,32 +77,38 @@ struct SDL_SysWMmsg { } event; }; -/* The UNIX custom window manager information structure. - When this structure is returned, it holds information about which - low level system it is using, and will be one of SDL_SYSWM_TYPE. +/** The UNIX custom window manager information structure. + * When this structure is returned, it holds information about which + * low level system it is using, and will be one of SDL_SYSWM_TYPE. */ typedef struct SDL_SysWMinfo { SDL_version version; SDL_SYSWM_TYPE subsystem; union { struct { - Display *display; /* The X11 display */ - Window window; /* The X11 display window */ - /* These locking functions should be called around - any X11 functions using the display variable, - but not the gfxdisplay variable. - They lock the event thread, so should not be - called around event functions or from event filters. + Display *display; /**< The X11 display */ + Window window; /**< The X11 display window */ + /** These locking functions should be called around + * any X11 functions using the display variable, + * but not the gfxdisplay variable. + * They lock the event thread, so should not be + * called around event functions or from event filters. */ + /*@{*/ void (*lock_func)(void); void (*unlock_func)(void); + /*@}*/ - /* Introduced in SDL 1.0.2 */ - Window fswindow; /* The X11 fullscreen window */ - Window wmwindow; /* The X11 managed input window */ + /** @name Introduced in SDL 1.0.2 */ + /*@{*/ + Window fswindow; /**< The X11 fullscreen window */ + Window wmwindow; /**< The X11 managed input window */ + /*@}*/ - /* Introduced in SDL 1.2.12 */ - Display *gfxdisplay; /* The X11 display to which rendering is done */ + /** @name Introduced in SDL 1.2.12 */ + /*@{*/ + Display *gfxdisplay; /**< The X11 display to which rendering is done */ + /*@}*/ } x11; } info; } SDL_SysWMinfo; @@ -107,13 +116,13 @@ typedef struct SDL_SysWMinfo { #elif defined(SDL_VIDEO_DRIVER_NANOX) #include -/* The generic custom event structure */ +/** The generic custom event structure */ struct SDL_SysWMmsg { SDL_version version; int data; }; -/* The windows custom window manager information structure */ +/** The windows custom window manager information structure */ typedef struct SDL_SysWMinfo { SDL_version version ; GR_WINDOW_ID window ; /* The display window */ @@ -123,50 +132,50 @@ typedef struct SDL_SysWMinfo { #define WIN32_LEAN_AND_MEAN #include -/* The windows custom event structure */ +/** The windows custom event structure */ struct SDL_SysWMmsg { SDL_version version; - HWND hwnd; /* The window for the message */ - UINT msg; /* The type of message */ - WPARAM wParam; /* WORD message parameter */ - LPARAM lParam; /* LONG message parameter */ + HWND hwnd; /**< The window for the message */ + UINT msg; /**< The type of message */ + WPARAM wParam; /**< WORD message parameter */ + LPARAM lParam; /**< LONG message parameter */ }; -/* The windows custom window manager information structure */ +/** The windows custom window manager information structure */ typedef struct SDL_SysWMinfo { SDL_version version; - HWND window; /* The Win32 display window */ - HGLRC hglrc; /* The OpenGL context, if any */ + HWND window; /**< The Win32 display window */ + HGLRC hglrc; /**< The OpenGL context, if any */ } SDL_SysWMinfo; #elif defined(SDL_VIDEO_DRIVER_RISCOS) -/* RISC OS custom event structure */ +/** RISC OS custom event structure */ struct SDL_SysWMmsg { SDL_version version; - int eventCode; /* The window for the message */ + int eventCode; /**< The window for the message */ int pollBlock[64]; }; -/* The RISC OS custom window manager information structure */ +/** The RISC OS custom window manager information structure */ typedef struct SDL_SysWMinfo { SDL_version version; - int wimpVersion; /* Wimp version running under */ - int taskHandle; /* The RISC OS task handle */ - int window; /* The RISC OS display window */ + int wimpVersion; /**< Wimp version running under */ + int taskHandle; /**< The RISC OS task handle */ + int window; /**< The RISC OS display window */ } SDL_SysWMinfo; #elif defined(SDL_VIDEO_DRIVER_PHOTON) #include #include -/* The QNX custom event structure */ +/** The QNX custom event structure */ struct SDL_SysWMmsg { SDL_version version; int data; }; -/* The QNX custom window manager information structure */ +/** The QNX custom window manager information structure */ typedef struct SDL_SysWMinfo { SDL_version version; int data; @@ -174,13 +183,13 @@ typedef struct SDL_SysWMinfo { #else -/* The generic custom event structure */ +/** The generic custom event structure */ struct SDL_SysWMmsg { SDL_version version; int data; }; -/* The generic custom window manager information structure */ +/** The generic custom window manager information structure */ typedef struct SDL_SysWMinfo { SDL_version version; int data; @@ -191,16 +200,18 @@ typedef struct SDL_SysWMinfo { #endif /* SDL_PROTOTYPES_ONLY */ /* Function prototypes */ -/* +/** * This function gives you custom hooks into the window manager information. * It fills the structure pointed to by 'info' with custom information and * returns 1 if the function is implemented. If it's not implemented, or * the version member of the 'info' structure is invalid, it returns 0. * * You typically use this function like this: + * @code * SDL_SysWMInfo info; * SDL_VERSION(&info.version); * if ( SDL_GetWMInfo(&info) ) { ... } + * @endcode */ extern DECLSPEC int SDLCALL SDL_GetWMInfo(SDL_SysWMinfo *info); diff --git a/source/include/SDL_thread.h b/source/include/SDL_thread.h index 403ee462..1ca9a1bc 100755 --- a/source/include/SDL_thread.h +++ b/source/include/SDL_thread.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -23,10 +23,11 @@ #ifndef _SDL_thread_h #define _SDL_thread_h -/* Header for the SDL thread management routines - - These are independent of the other SDL routines. -*/ +/** @file SDL_thread.h + * Header for the SDL thread management routines + * + * @note These are independent of the other SDL routines. + */ #include "SDL_stdinc.h" #include "SDL_error.h" @@ -40,25 +41,25 @@ extern "C" { #endif -/* The SDL thread structure, defined in SDL_thread.c */ +/** The SDL thread structure, defined in SDL_thread.c */ struct SDL_Thread; typedef struct SDL_Thread SDL_Thread; -/* Create a thread */ +/** Create a thread */ #if ((defined(__WIN32__) && !defined(HAVE_LIBC)) || defined(__OS2__)) && !defined(__SYMBIAN32__) -/* - We compile SDL into a DLL on OS/2. This means, that it's the DLL which - creates a new thread for the calling process with the SDL_CreateThread() - API. There is a problem with this, that only the RTL of the SDL.DLL will - be initialized for those threads, and not the RTL of the calling application! - To solve this, we make a little hack here. - We'll always use the caller's _beginthread() and _endthread() APIs to - start a new thread. This way, if it's the SDL.DLL which uses this API, - then the RTL of SDL.DLL will be used to create the new thread, and if it's - the application, then the RTL of the application will be used. - So, in short: - Always use the _beginthread() and _endthread() of the calling runtime library! -*/ +/** + * We compile SDL into a DLL on OS/2. This means, that it's the DLL which + * creates a new thread for the calling process with the SDL_CreateThread() + * API. There is a problem with this, that only the RTL of the SDL.DLL will + * be initialized for those threads, and not the RTL of the calling application! + * To solve this, we make a little hack here. + * We'll always use the caller's _beginthread() and _endthread() APIs to + * start a new thread. This way, if it's the SDL.DLL which uses this API, + * then the RTL of SDL.DLL will be used to create the new thread, and if it's + * the application, then the RTL of the application will be used. + * So, in short: + * Always use the _beginthread() and _endthread() of the calling runtime library! + */ #define SDL_PASSED_BEGINTHREAD_ENDTHREAD #ifndef _WIN32_WCE #include /* This has _beginthread() and _endthread() defined! */ @@ -92,21 +93,21 @@ extern DECLSPEC SDL_Thread * SDLCALL SDL_CreateThread(int (SDLCALL *fn)(void *), extern DECLSPEC SDL_Thread * SDLCALL SDL_CreateThread(int (SDLCALL *fn)(void *), void *data); #endif -/* Get the 32-bit thread identifier for the current thread */ +/** Get the 32-bit thread identifier for the current thread */ extern DECLSPEC Uint32 SDLCALL SDL_ThreadID(void); -/* Get the 32-bit thread identifier for the specified thread, - equivalent to SDL_ThreadID() if the specified thread is NULL. +/** Get the 32-bit thread identifier for the specified thread, + * equivalent to SDL_ThreadID() if the specified thread is NULL. */ extern DECLSPEC Uint32 SDLCALL SDL_GetThreadID(SDL_Thread *thread); -/* Wait for a thread to finish. - The return code for the thread function is placed in the area - pointed to by 'status', if 'status' is not NULL. +/** Wait for a thread to finish. + * The return code for the thread function is placed in the area + * pointed to by 'status', if 'status' is not NULL. */ extern DECLSPEC void SDLCALL SDL_WaitThread(SDL_Thread *thread, int *status); -/* Forcefully kill a thread without worrying about its state */ +/** Forcefully kill a thread without worrying about its state */ extern DECLSPEC void SDLCALL SDL_KillThread(SDL_Thread *thread); diff --git a/source/include/SDL_timer.h b/source/include/SDL_timer.h index d21159fe..d7cd0246 100755 --- a/source/include/SDL_timer.h +++ b/source/include/SDL_timer.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -23,7 +23,9 @@ #ifndef _SDL_timer_h #define _SDL_timer_h -/* Header for the SDL time management routines */ +/** @file SDL_timer.h + * Header for the SDL time management routines + */ #include "SDL_stdinc.h" #include "SDL_error.h" @@ -34,24 +36,26 @@ extern "C" { #endif -/* This is the OS scheduler timeslice, in milliseconds */ +/** This is the OS scheduler timeslice, in milliseconds */ #define SDL_TIMESLICE 10 -/* This is the maximum resolution of the SDL timer on all platforms */ -#define TIMER_RESOLUTION 10 /* Experimentally determined */ +/** This is the maximum resolution of the SDL timer on all platforms */ +#define TIMER_RESOLUTION 10 /**< Experimentally determined */ -/* Get the number of milliseconds since the SDL library initialization. +/** + * Get the number of milliseconds since the SDL library initialization. * Note that this value wraps if the program runs for more than ~49 days. */ extern DECLSPEC Uint32 SDLCALL SDL_GetTicks(void); -/* Wait a specified number of milliseconds before returning */ +/** Wait a specified number of milliseconds before returning */ extern DECLSPEC void SDLCALL SDL_Delay(Uint32 ms); -/* Function prototype for the timer callback function */ +/** Function prototype for the timer callback function */ typedef Uint32 (SDLCALL *SDL_TimerCallback)(Uint32 interval); -/* Set a callback to run after the specified number of milliseconds has +/** + * Set a callback to run after the specified number of milliseconds has * elapsed. The callback function is passed the current timer interval * and returns the next timer interval. If the returned value is the * same as the one passed in, the periodic alarm continues, otherwise a @@ -68,7 +72,7 @@ typedef Uint32 (SDLCALL *SDL_TimerCallback)(Uint32 interval); * later on an unloaded system. If you wanted to set a flag signaling * a frame update at 30 frames per second (every 33 ms), you might set a * timer for 30 ms: - * SDL_SetTimer((33/10)*10, flag_update); + * @code SDL_SetTimer((33/10)*10, flag_update); @endcode * * If you use this function, you need to pass SDL_INIT_TIMER to SDL_Init(). * @@ -81,11 +85,14 @@ typedef Uint32 (SDLCALL *SDL_TimerCallback)(Uint32 interval); */ extern DECLSPEC int SDLCALL SDL_SetTimer(Uint32 interval, SDL_TimerCallback callback); -/* New timer API, supports multiple timers +/** @name New timer API + * New timer API, supports multiple timers * Written by Stephane Peter */ +/*@{*/ -/* Function prototype for the new timer callback function. +/** + * Function prototype for the new timer callback function. * The callback function is passed the current timer interval and returns * the next timer interval. If the returned value is the same as the one * passed in, the periodic alarm continues, otherwise a new alarm is @@ -93,19 +100,22 @@ extern DECLSPEC int SDLCALL SDL_SetTimer(Uint32 interval, SDL_TimerCallback call */ typedef Uint32 (SDLCALL *SDL_NewTimerCallback)(Uint32 interval, void *param); -/* Definition of the timer ID type */ +/** Definition of the timer ID type */ typedef struct _SDL_TimerID *SDL_TimerID; -/* Add a new timer to the pool of timers already running. - Returns a timer ID, or NULL when an error occurs. +/** Add a new timer to the pool of timers already running. + * Returns a timer ID, or NULL when an error occurs. */ extern DECLSPEC SDL_TimerID SDLCALL SDL_AddTimer(Uint32 interval, SDL_NewTimerCallback callback, void *param); -/* Remove one of the multiple timers knowing its ID. +/** + * Remove one of the multiple timers knowing its ID. * Returns a boolean value indicating success. */ extern DECLSPEC SDL_bool SDLCALL SDL_RemoveTimer(SDL_TimerID t); +/*@}*/ + /* Ends C function definitions when using C++ */ #ifdef __cplusplus } diff --git a/source/include/SDL_types.h b/source/include/SDL_types.h index 853b9ce4..cfa35236 100755 --- a/source/include/SDL_types.h +++ b/source/include/SDL_types.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -20,5 +20,9 @@ slouken@libsdl.org */ +/** @file SDL_types.h + * @deprecated Use SDL_stdinc.h instead. + */ + /* DEPRECATED */ #include "SDL_stdinc.h" diff --git a/source/include/SDL_version.h b/source/include/SDL_version.h index 9ff0fa8a..fa02c3f6 100755 --- a/source/include/SDL_version.h +++ b/source/include/SDL_version.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -20,7 +20,9 @@ slouken@libsdl.org */ -/* This header defines the current SDL version */ +/** @file SDL_version.h + * This header defines the current SDL version + */ #ifndef _SDL_version_h #define _SDL_version_h @@ -33,11 +35,14 @@ extern "C" { #endif -/* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL -*/ +/** @name Version Number + * Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL + */ +/*@{*/ #define SDL_MAJOR_VERSION 1 #define SDL_MINOR_VERSION 2 -#define SDL_PATCHLEVEL 13 +#define SDL_PATCHLEVEL 14 +/*@}*/ typedef struct SDL_version { Uint8 major; @@ -45,7 +50,8 @@ typedef struct SDL_version { Uint8 patch; } SDL_version; -/* This macro can be used to fill a version structure with the compile-time +/** + * This macro can be used to fill a version structure with the compile-time * version of the SDL library. */ #define SDL_VERSION(X) \ @@ -55,24 +61,24 @@ typedef struct SDL_version { (X)->patch = SDL_PATCHLEVEL; \ } -/* This macro turns the version numbers into a numeric value: - (1,2,3) -> (1203) - This assumes that there will never be more than 100 patchlevels -*/ +/** This macro turns the version numbers into a numeric value: + * (1,2,3) -> (1203) + * This assumes that there will never be more than 100 patchlevels + */ #define SDL_VERSIONNUM(X, Y, Z) \ ((X)*1000 + (Y)*100 + (Z)) -/* This is the version number macro for the current SDL version */ +/** This is the version number macro for the current SDL version */ #define SDL_COMPILEDVERSION \ SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) -/* This macro will evaluate to true if compiled with SDL at least X.Y.Z */ +/** This macro will evaluate to true if compiled with SDL at least X.Y.Z */ #define SDL_VERSION_ATLEAST(X, Y, Z) \ (SDL_COMPILEDVERSION >= SDL_VERSIONNUM(X, Y, Z)) -/* This function gets the version of the dynamically linked SDL library. - it should NOT be used to fill a version structure, instead you should - use the SDL_Version() macro. +/** This function gets the version of the dynamically linked SDL library. + * it should NOT be used to fill a version structure, instead you should + * use the SDL_Version() macro. */ extern DECLSPEC const SDL_version * SDLCALL SDL_Linked_Version(void); diff --git a/source/include/SDL_video.h b/source/include/SDL_video.h index f6baccee..8f7f3052 100755 --- a/source/include/SDL_video.h +++ b/source/include/SDL_video.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2006 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -20,7 +20,9 @@ slouken@libsdl.org */ -/* Header file for access to the SDL raw framebuffer window */ +/** @file SDL_video.h + * Header file for access to the SDL raw framebuffer window + */ #ifndef _SDL_video_h #define _SDL_video_h @@ -35,11 +37,16 @@ extern "C" { #endif -/* Transparency definitions: These define alpha as the opacity of a surface */ +/** @name Transparency definitions + * These define alpha as the opacity of a surface + */ +/*@{*/ #define SDL_ALPHA_OPAQUE 255 #define SDL_ALPHA_TRANSPARENT 0 +/*@}*/ -/* Useful data types */ +/** @name Useful data types */ +/*@{*/ typedef struct SDL_Rect { Sint16 x, y; Uint16 w, h; @@ -57,8 +64,9 @@ typedef struct SDL_Palette { int ncolors; SDL_Color *colors; } SDL_Palette; +/*@}*/ -/* Everything in the pixel format structure is read-only */ +/** Everything in the pixel format structure is read-only */ typedef struct SDL_PixelFormat { SDL_Palette *palette; Uint8 BitsPerPixel; @@ -76,128 +84,149 @@ typedef struct SDL_PixelFormat { Uint32 Bmask; Uint32 Amask; - /* RGB color key information */ + /** RGB color key information */ Uint32 colorkey; - /* Alpha value information (per-surface alpha) */ + /** Alpha value information (per-surface alpha) */ Uint8 alpha; } SDL_PixelFormat; -/* This structure should be treated as read-only, except for 'pixels', - which, if not NULL, contains the raw pixel data for the surface. -*/ +/** This structure should be treated as read-only, except for 'pixels', + * which, if not NULL, contains the raw pixel data for the surface. + */ typedef struct SDL_Surface { - Uint32 flags; /* Read-only */ - SDL_PixelFormat *format; /* Read-only */ - int w, h; /* Read-only */ - Uint16 pitch; /* Read-only */ - void *pixels; /* Read-write */ - int offset; /* Private */ + Uint32 flags; /**< Read-only */ + SDL_PixelFormat *format; /**< Read-only */ + int w, h; /**< Read-only */ + Uint16 pitch; /**< Read-only */ + void *pixels; /**< Read-write */ + int offset; /**< Private */ - /* Hardware-specific surface info */ + /** Hardware-specific surface info */ struct private_hwdata *hwdata; - /* clipping information */ - SDL_Rect clip_rect; /* Read-only */ - Uint32 unused1; /* for binary compatibility */ + /** clipping information */ + SDL_Rect clip_rect; /**< Read-only */ + Uint32 unused1; /**< for binary compatibility */ - /* Allow recursive locks */ - Uint32 locked; /* Private */ + /** Allow recursive locks */ + Uint32 locked; /**< Private */ - /* info for fast blit mapping to other surfaces */ - struct SDL_BlitMap *map; /* Private */ + /** info for fast blit mapping to other surfaces */ + struct SDL_BlitMap *map; /**< Private */ - /* format version, bumped at every change to invalidate blit maps */ - unsigned int format_version; /* Private */ + /** format version, bumped at every change to invalidate blit maps */ + unsigned int format_version; /**< Private */ - /* Reference count -- used when freeing surface */ - int refcount; /* Read-mostly */ + /** Reference count -- used when freeing surface */ + int refcount; /**< Read-mostly */ } SDL_Surface; -/* These are the currently supported flags for the SDL_surface */ -/* Available for SDL_CreateRGBSurface() or SDL_SetVideoMode() */ -#define SDL_SWSURFACE 0x00000000 /* Surface is in system memory */ -#define SDL_HWSURFACE 0x00000001 /* Surface is in video memory */ -#define SDL_ASYNCBLIT 0x00000004 /* Use asynchronous blits if possible */ -/* Available for SDL_SetVideoMode() */ -#define SDL_ANYFORMAT 0x10000000 /* Allow any video depth/pixel-format */ -#define SDL_HWPALETTE 0x20000000 /* Surface has exclusive palette */ -#define SDL_DOUBLEBUF 0x40000000 /* Set up double-buffered video mode */ -#define SDL_FULLSCREEN 0x80000000 /* Surface is a full screen display */ -#define SDL_OPENGL 0x00000002 /* Create an OpenGL rendering context */ -#define SDL_OPENGLBLIT 0x0000000A /* Create an OpenGL rendering context and use it for blitting */ -#define SDL_RESIZABLE 0x00000010 /* This video mode may be resized */ -#define SDL_NOFRAME 0x00000020 /* No window caption or edge frame */ -/* Used internally (read-only) */ -#define SDL_HWACCEL 0x00000100 /* Blit uses hardware acceleration */ -#define SDL_SRCCOLORKEY 0x00001000 /* Blit uses a source color key */ -#define SDL_RLEACCELOK 0x00002000 /* Private flag */ -#define SDL_RLEACCEL 0x00004000 /* Surface is RLE encoded */ -#define SDL_SRCALPHA 0x00010000 /* Blit uses source alpha blending */ -#define SDL_PREALLOC 0x01000000 /* Surface uses preallocated memory */ +/** @name SDL_Surface Flags + * These are the currently supported flags for the SDL_surface + */ +/*@{*/ -/* Evaluates to true if the surface needs to be locked before access */ +/** Available for SDL_CreateRGBSurface() or SDL_SetVideoMode() */ +/*@{*/ +#define SDL_SWSURFACE 0x00000000 /**< Surface is in system memory */ +#define SDL_HWSURFACE 0x00000001 /**< Surface is in video memory */ +#define SDL_ASYNCBLIT 0x00000004 /**< Use asynchronous blits if possible */ +/*@}*/ + +/** Available for SDL_SetVideoMode() */ +/*@{*/ +#define SDL_ANYFORMAT 0x10000000 /**< Allow any video depth/pixel-format */ +#define SDL_HWPALETTE 0x20000000 /**< Surface has exclusive palette */ +#define SDL_DOUBLEBUF 0x40000000 /**< Set up double-buffered video mode */ +#define SDL_FULLSCREEN 0x80000000 /**< Surface is a full screen display */ +#define SDL_OPENGL 0x00000002 /**< Create an OpenGL rendering context */ +#define SDL_OPENGLBLIT 0x0000000A /**< Create an OpenGL rendering context and use it for blitting */ +#define SDL_RESIZABLE 0x00000010 /**< This video mode may be resized */ +#define SDL_NOFRAME 0x00000020 /**< No window caption or edge frame */ +/*@}*/ + +/** Used internally (read-only) */ +/*@{*/ +#define SDL_HWACCEL 0x00000100 /**< Blit uses hardware acceleration */ +#define SDL_SRCCOLORKEY 0x00001000 /**< Blit uses a source color key */ +#define SDL_RLEACCELOK 0x00002000 /**< Private flag */ +#define SDL_RLEACCEL 0x00004000 /**< Surface is RLE encoded */ +#define SDL_SRCALPHA 0x00010000 /**< Blit uses source alpha blending */ +#define SDL_PREALLOC 0x01000000 /**< Surface uses preallocated memory */ +/*@}*/ + +/*@}*/ + +/** Evaluates to true if the surface needs to be locked before access */ #define SDL_MUSTLOCK(surface) \ (surface->offset || \ ((surface->flags & (SDL_HWSURFACE|SDL_ASYNCBLIT|SDL_RLEACCEL)) != 0)) -/* typedef for private surface blitting functions */ +/** typedef for private surface blitting functions */ typedef int (*SDL_blit)(struct SDL_Surface *src, SDL_Rect *srcrect, struct SDL_Surface *dst, SDL_Rect *dstrect); -/* Useful for determining the video hardware capabilities */ +/** Useful for determining the video hardware capabilities */ typedef struct SDL_VideoInfo { - Uint32 hw_available :1; /* Flag: Can you create hardware surfaces? */ - Uint32 wm_available :1; /* Flag: Can you talk to a window manager? */ + Uint32 hw_available :1; /**< Flag: Can you create hardware surfaces? */ + Uint32 wm_available :1; /**< Flag: Can you talk to a window manager? */ Uint32 UnusedBits1 :6; Uint32 UnusedBits2 :1; - Uint32 blit_hw :1; /* Flag: Accelerated blits HW --> HW */ - Uint32 blit_hw_CC :1; /* Flag: Accelerated blits with Colorkey */ - Uint32 blit_hw_A :1; /* Flag: Accelerated blits with Alpha */ - Uint32 blit_sw :1; /* Flag: Accelerated blits SW --> HW */ - Uint32 blit_sw_CC :1; /* Flag: Accelerated blits with Colorkey */ - Uint32 blit_sw_A :1; /* Flag: Accelerated blits with Alpha */ - Uint32 blit_fill :1; /* Flag: Accelerated color fill */ + Uint32 blit_hw :1; /**< Flag: Accelerated blits HW --> HW */ + Uint32 blit_hw_CC :1; /**< Flag: Accelerated blits with Colorkey */ + Uint32 blit_hw_A :1; /**< Flag: Accelerated blits with Alpha */ + Uint32 blit_sw :1; /**< Flag: Accelerated blits SW --> HW */ + Uint32 blit_sw_CC :1; /**< Flag: Accelerated blits with Colorkey */ + Uint32 blit_sw_A :1; /**< Flag: Accelerated blits with Alpha */ + Uint32 blit_fill :1; /**< Flag: Accelerated color fill */ Uint32 UnusedBits3 :16; - Uint32 video_mem; /* The total amount of video memory (in K) */ - SDL_PixelFormat *vfmt; /* Value: The format of the video surface */ - int current_w; /* Value: The current video mode width */ - int current_h; /* Value: The current video mode height */ + Uint32 video_mem; /**< The total amount of video memory (in K) */ + SDL_PixelFormat *vfmt; /**< Value: The format of the video surface */ + int current_w; /**< Value: The current video mode width */ + int current_h; /**< Value: The current video mode height */ } SDL_VideoInfo; -/* The most common video overlay formats. - For an explanation of these pixel formats, see: - http://www.webartz.com/fourcc/indexyuv.htm - - For information on the relationship between color spaces, see: - http://www.neuro.sfc.keio.ac.jp/~aly/polygon/info/color-space-faq.html +/** @name Overlay Formats + * The most common video overlay formats. + * For an explanation of these pixel formats, see: + * http://www.webartz.com/fourcc/indexyuv.htm + * + * For information on the relationship between color spaces, see: + * http://www.neuro.sfc.keio.ac.jp/~aly/polygon/info/color-space-faq.html */ -#define SDL_YV12_OVERLAY 0x32315659 /* Planar mode: Y + V + U (3 planes) */ -#define SDL_IYUV_OVERLAY 0x56555949 /* Planar mode: Y + U + V (3 planes) */ -#define SDL_YUY2_OVERLAY 0x32595559 /* Packed mode: Y0+U0+Y1+V0 (1 plane) */ -#define SDL_UYVY_OVERLAY 0x59565955 /* Packed mode: U0+Y0+V0+Y1 (1 plane) */ -#define SDL_YVYU_OVERLAY 0x55595659 /* Packed mode: Y0+V0+Y1+U0 (1 plane) */ +/*@{*/ +#define SDL_YV12_OVERLAY 0x32315659 /**< Planar mode: Y + V + U (3 planes) */ +#define SDL_IYUV_OVERLAY 0x56555949 /**< Planar mode: Y + U + V (3 planes) */ +#define SDL_YUY2_OVERLAY 0x32595559 /**< Packed mode: Y0+U0+Y1+V0 (1 plane) */ +#define SDL_UYVY_OVERLAY 0x59565955 /**< Packed mode: U0+Y0+V0+Y1 (1 plane) */ +#define SDL_YVYU_OVERLAY 0x55595659 /**< Packed mode: Y0+V0+Y1+U0 (1 plane) */ +/*@}*/ -/* The YUV hardware video overlay */ +/** The YUV hardware video overlay */ typedef struct SDL_Overlay { - Uint32 format; /* Read-only */ - int w, h; /* Read-only */ - int planes; /* Read-only */ - Uint16 *pitches; /* Read-only */ - Uint8 **pixels; /* Read-write */ + Uint32 format; /**< Read-only */ + int w, h; /**< Read-only */ + int planes; /**< Read-only */ + Uint16 *pitches; /**< Read-only */ + Uint8 **pixels; /**< Read-write */ - /* Hardware-specific surface info */ + /** @name Hardware-specific surface info */ + /*@{*/ struct private_yuvhwfuncs *hwfuncs; struct private_yuvhwdata *hwdata; + /*@{*/ - /* Special flags */ - Uint32 hw_overlay :1; /* Flag: This overlay hardware accelerated? */ + /** @name Special flags */ + /*@{*/ + Uint32 hw_overlay :1; /**< Flag: This overlay hardware accelerated? */ Uint32 UnusedBits :31; + /*@}*/ } SDL_Overlay; -/* Public enumeration for setting the OpenGL window attributes. */ +/** Public enumeration for setting the OpenGL window attributes. */ typedef enum { SDL_GL_RED_SIZE, SDL_GL_GREEN_SIZE, @@ -218,17 +247,23 @@ typedef enum { SDL_GL_SWAP_CONTROL } SDL_GLattr; -/* flags for SDL_SetPalette() */ +/** @name flags for SDL_SetPalette() */ +/*@{*/ #define SDL_LOGPAL 0x01 #define SDL_PHYSPAL 0x02 +/*@}*/ /* Function prototypes */ -/* These functions are used internally, and should not be used unless you +/** + * @name Video Init and Quit + * These functions are used internally, and should not be used unless you * have a specific need to specify the video driver you want to use. * You should normally use SDL_Init() or SDL_InitSubSystem(). - * - * SDL_VideoInit() initializes the video subsystem -- sets up a connection + */ +/*@{*/ +/** + * Initializes the video subsystem. Sets up a connection * to the window manager, etc, and determines the current video mode and * pixel format, but does not initialize a window or graphics mode. * Note that event handling is activated by this routine. @@ -239,14 +274,16 @@ typedef enum { */ extern DECLSPEC int SDLCALL SDL_VideoInit(const char *driver_name, Uint32 flags); extern DECLSPEC void SDLCALL SDL_VideoQuit(void); +/*@}*/ -/* This function fills the given character buffer with the name of the +/** + * This function fills the given character buffer with the name of the * video driver, and returns a pointer to it if the video driver has * been initialized. It returns NULL if no driver has been initialized. */ extern DECLSPEC char * SDLCALL SDL_VideoDriverName(char *namebuf, int maxlen); -/* +/** * This function returns a pointer to the current display surface. * If SDL is doing format conversion on the display surface, this * function returns the publicly visible surface, not the real video @@ -254,7 +291,7 @@ extern DECLSPEC char * SDLCALL SDL_VideoDriverName(char *namebuf, int maxlen); */ extern DECLSPEC SDL_Surface * SDLCALL SDL_GetVideoSurface(void); -/* +/** * This function returns a read-only pointer to information about the * video hardware. If this is called before SDL_SetVideoMode(), the 'vfmt' * member of the returned structure will contain the pixel format of the @@ -262,7 +299,7 @@ extern DECLSPEC SDL_Surface * SDLCALL SDL_GetVideoSurface(void); */ extern DECLSPEC const SDL_VideoInfo * SDLCALL SDL_GetVideoInfo(void); -/* +/** * Check to see if a particular video mode is supported. * It returns 0 if the requested mode is not supported under any bit depth, * or returns the bits-per-pixel of the closest available mode with the @@ -275,7 +312,7 @@ extern DECLSPEC const SDL_VideoInfo * SDLCALL SDL_GetVideoInfo(void); */ extern DECLSPEC int SDLCALL SDL_VideoModeOK(int width, int height, int bpp, Uint32 flags); -/* +/** * Return a pointer to an array of available screen dimensions for the * given format and video flags, sorted largest to smallest. Returns * NULL if there are no dimensions available for a particular format, @@ -286,7 +323,7 @@ extern DECLSPEC int SDLCALL SDL_VideoModeOK(int width, int height, int bpp, Uint */ extern DECLSPEC SDL_Rect ** SDLCALL SDL_ListModes(SDL_PixelFormat *format, Uint32 flags); -/* +/** * Set up a video mode with the specified width, height and bits-per-pixel. * * If 'bpp' is 0, it is treated as the current display bits per pixel. @@ -347,18 +384,24 @@ extern DECLSPEC SDL_Rect ** SDLCALL SDL_ListModes(SDL_PixelFormat *format, Uint3 extern DECLSPEC SDL_Surface * SDLCALL SDL_SetVideoMode (int width, int height, int bpp, Uint32 flags); -/* - * Makes sure the given list of rectangles is updated on the given screen. - * If 'x', 'y', 'w' and 'h' are all 0, SDL_UpdateRect will update the entire - * screen. +/** @name SDL_Update Functions * These functions should not be called while 'screen' is locked. */ +/*@{*/ +/** + * Makes sure the given list of rectangles is updated on the given screen. + */ extern DECLSPEC void SDLCALL SDL_UpdateRects (SDL_Surface *screen, int numrects, SDL_Rect *rects); +/** + * If 'x', 'y', 'w' and 'h' are all 0, SDL_UpdateRect will update the entire + * screen. + */ extern DECLSPEC void SDLCALL SDL_UpdateRect (SDL_Surface *screen, Sint32 x, Sint32 y, Uint32 w, Uint32 h); +/*@}*/ -/* +/** * On hardware that supports double-buffering, this function sets up a flip * and returns. The hardware will wait for vertical retrace, and then swap * video buffers before the next video surface blit or lock will return. @@ -370,7 +413,7 @@ extern DECLSPEC void SDLCALL SDL_UpdateRect */ extern DECLSPEC int SDLCALL SDL_Flip(SDL_Surface *screen); -/* +/** * Set the gamma correction for each of the color channels. * The gamma values range (approximately) between 0.1 and 10.0 * @@ -380,7 +423,7 @@ extern DECLSPEC int SDLCALL SDL_Flip(SDL_Surface *screen); */ extern DECLSPEC int SDLCALL SDL_SetGamma(float red, float green, float blue); -/* +/** * Set the gamma translation table for the red, green, and blue channels * of the video hardware. Each table is an array of 256 16-bit quantities, * representing a mapping between the input and output for that channel. @@ -394,7 +437,7 @@ extern DECLSPEC int SDLCALL SDL_SetGamma(float red, float green, float blue); */ extern DECLSPEC int SDLCALL SDL_SetGammaRamp(const Uint16 *red, const Uint16 *green, const Uint16 *blue); -/* +/** * Retrieve the current values of the gamma translation tables. * * You must pass in valid pointers to arrays of 256 16-bit quantities. @@ -405,7 +448,7 @@ extern DECLSPEC int SDLCALL SDL_SetGammaRamp(const Uint16 *red, const Uint16 *gr */ extern DECLSPEC int SDLCALL SDL_GetGammaRamp(Uint16 *red, Uint16 *green, Uint16 *blue); -/* +/** * Sets a portion of the colormap for the given 8-bit surface. If 'surface' * is not a palettized surface, this function does nothing, returning 0. * If all of the colors were set as passed to SDL_SetColors(), it will @@ -423,7 +466,7 @@ extern DECLSPEC int SDLCALL SDL_GetGammaRamp(Uint16 *red, Uint16 *green, Uint16 extern DECLSPEC int SDLCALL SDL_SetColors(SDL_Surface *surface, SDL_Color *colors, int firstcolor, int ncolors); -/* +/** * Sets a portion of the colormap for a given 8-bit surface. * 'flags' is one or both of: * SDL_LOGPAL -- set logical palette, which controls how blits are mapped @@ -443,33 +486,37 @@ extern DECLSPEC int SDLCALL SDL_SetPalette(SDL_Surface *surface, int flags, SDL_Color *colors, int firstcolor, int ncolors); -/* +/** * Maps an RGB triple to an opaque pixel value for a given pixel format */ extern DECLSPEC Uint32 SDLCALL SDL_MapRGB (const SDL_PixelFormat * const format, const Uint8 r, const Uint8 g, const Uint8 b); -/* +/** * Maps an RGBA quadruple to a pixel value for a given pixel format */ extern DECLSPEC Uint32 SDLCALL SDL_MapRGBA (const SDL_PixelFormat * const format, const Uint8 r, const Uint8 g, const Uint8 b, const Uint8 a); -/* +/** * Maps a pixel value into the RGB components for a given pixel format */ -extern DECLSPEC void SDLCALL SDL_GetRGB(Uint32 pixel, SDL_PixelFormat *fmt, +extern DECLSPEC void SDLCALL SDL_GetRGB(Uint32 pixel, + const SDL_PixelFormat * const fmt, Uint8 *r, Uint8 *g, Uint8 *b); -/* +/** * Maps a pixel value into the RGBA components for a given pixel format */ -extern DECLSPEC void SDLCALL SDL_GetRGBA(Uint32 pixel, SDL_PixelFormat *fmt, - Uint8 *r, Uint8 *g, Uint8 *b, Uint8 *a); +extern DECLSPEC void SDLCALL SDL_GetRGBA(Uint32 pixel, + const SDL_PixelFormat * const fmt, + Uint8 *r, Uint8 *g, Uint8 *b, Uint8 *a); -/* +/** @sa SDL_CreateRGBSurface */ +#define SDL_AllocSurface SDL_CreateRGBSurface +/** * Allocate and free an RGB surface (must be called after SDL_SetVideoMode) * If the depth is 4 or 8 bits, an empty palette is allocated for the surface. * If the depth is greater than 8 bits, the pixel format is set using the @@ -503,16 +550,16 @@ extern DECLSPEC void SDLCALL SDL_GetRGBA(Uint32 pixel, SDL_PixelFormat *fmt, * reason the surface could not be placed in video memory, it will not have * the SDL_HWSURFACE flag set, and will be created in system memory instead. */ -#define SDL_AllocSurface SDL_CreateRGBSurface extern DECLSPEC SDL_Surface * SDLCALL SDL_CreateRGBSurface (Uint32 flags, int width, int height, int depth, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask); +/** @sa SDL_CreateRGBSurface */ extern DECLSPEC SDL_Surface * SDLCALL SDL_CreateRGBSurfaceFrom(void *pixels, int width, int height, int depth, int pitch, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask); extern DECLSPEC void SDLCALL SDL_FreeSurface(SDL_Surface *surface); -/* +/** * SDL_LockSurface() sets up a surface for directly accessing the pixels. * Between calls to SDL_LockSurface()/SDL_UnlockSurface(), you can write * to and read from 'surface->pixels', using the pixel format stored in @@ -533,7 +580,7 @@ extern DECLSPEC void SDLCALL SDL_FreeSurface(SDL_Surface *surface); extern DECLSPEC int SDLCALL SDL_LockSurface(SDL_Surface *surface); extern DECLSPEC void SDLCALL SDL_UnlockSurface(SDL_Surface *surface); -/* +/** * Load a surface from a seekable SDL data source (memory or file.) * If 'freesrc' is non-zero, the source will be closed after being read. * Returns the new surface, or NULL if there was an error. @@ -541,10 +588,10 @@ extern DECLSPEC void SDLCALL SDL_UnlockSurface(SDL_Surface *surface); */ extern DECLSPEC SDL_Surface * SDLCALL SDL_LoadBMP_RW(SDL_RWops *src, int freesrc); -/* Convenience macro -- load a surface from a file */ +/** Convenience macro -- load a surface from a file */ #define SDL_LoadBMP(file) SDL_LoadBMP_RW(SDL_RWFromFile(file, "rb"), 1) -/* +/** * Save a surface to a seekable SDL data source (memory or file.) * If 'freedst' is non-zero, the source will be closed after being written. * Returns 0 if successful or -1 if there was an error. @@ -552,11 +599,11 @@ extern DECLSPEC SDL_Surface * SDLCALL SDL_LoadBMP_RW(SDL_RWops *src, int freesrc extern DECLSPEC int SDLCALL SDL_SaveBMP_RW (SDL_Surface *surface, SDL_RWops *dst, int freedst); -/* Convenience macro -- save a surface to a file */ +/** Convenience macro -- save a surface to a file */ #define SDL_SaveBMP(surface, file) \ SDL_SaveBMP_RW(surface, SDL_RWFromFile(file, "wb"), 1) -/* +/** * Sets the color key (transparent pixel) in a blittable surface. * If 'flag' is SDL_SRCCOLORKEY (optionally OR'd with SDL_RLEACCEL), * 'key' will be the transparent pixel in the source image of a blit. @@ -568,7 +615,7 @@ extern DECLSPEC int SDLCALL SDL_SaveBMP_RW extern DECLSPEC int SDLCALL SDL_SetColorKey (SDL_Surface *surface, Uint32 flag, Uint32 key); -/* +/** * This function sets the alpha value for the entire surface, as opposed to * using the alpha component of each pixel. This value measures the range * of transparency of the surface, 0 being completely transparent to 255 @@ -585,7 +632,7 @@ extern DECLSPEC int SDLCALL SDL_SetColorKey */ extern DECLSPEC int SDLCALL SDL_SetAlpha(SDL_Surface *surface, Uint32 flag, Uint8 alpha); -/* +/** * Sets the clipping rectangle for the destination surface in a blit. * * If the clip rectangle is NULL, clipping will be disabled. @@ -599,14 +646,14 @@ extern DECLSPEC int SDLCALL SDL_SetAlpha(SDL_Surface *surface, Uint32 flag, Uint */ extern DECLSPEC SDL_bool SDLCALL SDL_SetClipRect(SDL_Surface *surface, const SDL_Rect *rect); -/* +/** * Gets the clipping rectangle for the destination surface in a blit. * 'rect' must be a pointer to a valid rectangle which will be filled * with the correct values. */ extern DECLSPEC void SDLCALL SDL_GetClipRect(SDL_Surface *surface, SDL_Rect *rect); -/* +/** * Creates a new surface of the specified format, and then copies and maps * the given surface to it so the blit of the converted surface will be as * fast as possible. If this function fails, it returns NULL. @@ -621,7 +668,7 @@ extern DECLSPEC void SDLCALL SDL_GetClipRect(SDL_Surface *surface, SDL_Rect *rec extern DECLSPEC SDL_Surface * SDLCALL SDL_ConvertSurface (SDL_Surface *src, SDL_PixelFormat *fmt, Uint32 flags); -/* +/** * This performs a fast blit from the source surface to the destination * surface. It assumes that the source and destination rectangles are * the same size. If either 'srcrect' or 'dstrect' are NULL, the entire @@ -677,35 +724,38 @@ extern DECLSPEC SDL_Surface * SDLCALL SDL_ConvertSurface * If either of the surfaces were in video memory, and the blit returns -2, * the video memory was lost, so it should be reloaded with artwork and * re-blitted: - while ( SDL_BlitSurface(image, imgrect, screen, dstrect) == -2 ) { - while ( SDL_LockSurface(image) < 0 ) - Sleep(10); - -- Write image pixels to image->pixels -- - SDL_UnlockSurface(image); - } + * @code + * while ( SDL_BlitSurface(image, imgrect, screen, dstrect) == -2 ) { + * while ( SDL_LockSurface(image) < 0 ) + * Sleep(10); + * -- Write image pixels to image->pixels -- + * SDL_UnlockSurface(image); + * } + * @endcode + * * This happens under DirectX 5.0 when the system switches away from your * fullscreen application. The lock will also fail until you have access * to the video memory again. + * + * You should call SDL_BlitSurface() unless you know exactly how SDL + * blitting works internally and how to use the other blit functions. */ -/* You should call SDL_BlitSurface() unless you know exactly how SDL - blitting works internally and how to use the other blit functions. -*/ #define SDL_BlitSurface SDL_UpperBlit -/* This is the public blit function, SDL_BlitSurface(), and it performs - rectangle validation and clipping before passing it to SDL_LowerBlit() -*/ +/** This is the public blit function, SDL_BlitSurface(), and it performs + * rectangle validation and clipping before passing it to SDL_LowerBlit() + */ extern DECLSPEC int SDLCALL SDL_UpperBlit (SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect); -/* This is a semi-private blit function and it performs low-level surface - blitting only. -*/ +/** This is a semi-private blit function and it performs low-level surface + * blitting only. + */ extern DECLSPEC int SDLCALL SDL_LowerBlit (SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect); -/* +/** * This function performs a fast fill of the given rectangle with 'color' * The given rectangle is clipped to the destination surface clip area * and the final fill rectangle is saved in the passed in pointer. @@ -717,7 +767,7 @@ extern DECLSPEC int SDLCALL SDL_LowerBlit extern DECLSPEC int SDLCALL SDL_FillRect (SDL_Surface *dst, SDL_Rect *dstrect, Uint32 color); -/* +/** * This function takes a surface and copies it to a new surface of the * pixel format and colors of the video framebuffer, suitable for fast * blitting onto the display surface. It calls SDL_ConvertSurface() @@ -730,7 +780,7 @@ extern DECLSPEC int SDLCALL SDL_FillRect */ extern DECLSPEC SDL_Surface * SDLCALL SDL_DisplayFormat(SDL_Surface *surface); -/* +/** * This function takes a surface and copies it to a new surface of the * pixel format and colors of the video framebuffer (if possible), * suitable for fast alpha blitting onto the display surface. @@ -746,38 +796,39 @@ extern DECLSPEC SDL_Surface * SDLCALL SDL_DisplayFormatAlpha(SDL_Surface *surfac /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* YUV video surface overlay functions */ +/** @name YUV video surface overlay functions */ /*@{*/ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* This function creates a video output overlay - Calling the returned surface an overlay is something of a misnomer because - the contents of the display surface underneath the area where the overlay - is shown is undefined - it may be overwritten with the converted YUV data. -*/ +/** This function creates a video output overlay + * Calling the returned surface an overlay is something of a misnomer because + * the contents of the display surface underneath the area where the overlay + * is shown is undefined - it may be overwritten with the converted YUV data. + */ extern DECLSPEC SDL_Overlay * SDLCALL SDL_CreateYUVOverlay(int width, int height, Uint32 format, SDL_Surface *display); -/* Lock an overlay for direct access, and unlock it when you are done */ +/** Lock an overlay for direct access, and unlock it when you are done */ extern DECLSPEC int SDLCALL SDL_LockYUVOverlay(SDL_Overlay *overlay); extern DECLSPEC void SDLCALL SDL_UnlockYUVOverlay(SDL_Overlay *overlay); -/* Blit a video overlay to the display surface. - The contents of the video surface underneath the blit destination are - not defined. - The width and height of the destination rectangle may be different from - that of the overlay, but currently only 2x scaling is supported. -*/ +/** Blit a video overlay to the display surface. + * The contents of the video surface underneath the blit destination are + * not defined. + * The width and height of the destination rectangle may be different from + * that of the overlay, but currently only 2x scaling is supported. + */ extern DECLSPEC int SDLCALL SDL_DisplayYUVOverlay(SDL_Overlay *overlay, SDL_Rect *dstrect); -/* Free a video overlay */ +/** Free a video overlay */ extern DECLSPEC void SDLCALL SDL_FreeYUVOverlay(SDL_Overlay *overlay); +/*@}*/ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* OpenGL support functions. */ +/** @name OpenGL support functions. */ /*@{*/ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* +/** * Dynamically load an OpenGL library, or the default one if path is NULL * * If you do this, you need to retrieve all of the GL functions used in @@ -785,17 +836,17 @@ extern DECLSPEC void SDLCALL SDL_FreeYUVOverlay(SDL_Overlay *overlay); */ extern DECLSPEC int SDLCALL SDL_GL_LoadLibrary(const char *path); -/* +/** * Get the address of a GL function */ extern DECLSPEC void * SDLCALL SDL_GL_GetProcAddress(const char* proc); -/* +/** * Set an attribute of the OpenGL subsystem before intialization. */ extern DECLSPEC int SDLCALL SDL_GL_SetAttribute(SDL_GLattr attr, int value); -/* +/** * Get an attribute of the OpenGL subsystem from the windowing * interface, such as glX. This is of course different from getting * the values from SDL's internal OpenGL subsystem, which only @@ -806,30 +857,38 @@ extern DECLSPEC int SDLCALL SDL_GL_SetAttribute(SDL_GLattr attr, int value); */ extern DECLSPEC int SDLCALL SDL_GL_GetAttribute(SDL_GLattr attr, int* value); -/* +/** * Swap the OpenGL buffers, if double-buffering is supported. */ extern DECLSPEC void SDLCALL SDL_GL_SwapBuffers(void); -/* +/** @name OpenGL Internal Functions * Internal functions that should not be called unless you have read * and understood the source code for these functions. */ +/*@{*/ extern DECLSPEC void SDLCALL SDL_GL_UpdateRects(int numrects, SDL_Rect* rects); extern DECLSPEC void SDLCALL SDL_GL_Lock(void); extern DECLSPEC void SDLCALL SDL_GL_Unlock(void); +/*@}*/ + +/*@}*/ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* These functions allow interaction with the window manager, if any. */ +/** @name Window Manager Functions */ +/** These functions allow interaction with the window manager, if any. */ /*@{*/ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* - * Sets/Gets the title and icon text of the display window (UTF-8 encoded) +/** + * Sets the title and icon text of the display window (UTF-8 encoded) */ extern DECLSPEC void SDLCALL SDL_WM_SetCaption(const char *title, const char *icon); +/** + * Gets the title and icon text of the display window (UTF-8 encoded) + */ extern DECLSPEC void SDLCALL SDL_WM_GetCaption(char **title, char **icon); -/* +/** * Sets the icon for the display window. * This function must be called before the first call to SDL_SetVideoMode(). * It takes an icon surface, and a mask in MSB format. @@ -837,14 +896,14 @@ extern DECLSPEC void SDLCALL SDL_WM_GetCaption(char **title, char **icon); */ extern DECLSPEC void SDLCALL SDL_WM_SetIcon(SDL_Surface *icon, Uint8 *mask); -/* +/** * This function iconifies the window, and returns 1 if it succeeded. * If the function succeeds, it generates an SDL_APPACTIVE loss event. * This function is a noop and returns 0 in non-windowed environments. */ extern DECLSPEC int SDLCALL SDL_WM_IconifyWindow(void); -/* +/** * Toggle fullscreen mode without changing the contents of the screen. * If the display surface does not require locking before accessing * the pixel information, then the memory pointers will not change. @@ -861,24 +920,25 @@ extern DECLSPEC int SDLCALL SDL_WM_IconifyWindow(void); */ extern DECLSPEC int SDLCALL SDL_WM_ToggleFullScreen(SDL_Surface *surface); -/* - * This function allows you to set and query the input grab state of - * the application. It returns the new input grab state. - */ typedef enum { SDL_GRAB_QUERY = -1, SDL_GRAB_OFF = 0, SDL_GRAB_ON = 1, - SDL_GRAB_FULLSCREEN /* Used internally */ + SDL_GRAB_FULLSCREEN /**< Used internally */ } SDL_GrabMode; -/* +/** + * This function allows you to set and query the input grab state of + * the application. It returns the new input grab state. + * * Grabbing means that the mouse is confined to the application window, * and nearly all keyboard input is passed directly to the application, * and not interpreted by a window manager, if any. */ extern DECLSPEC SDL_GrabMode SDLCALL SDL_WM_GrabInput(SDL_GrabMode mode); -/* Not in public API at the moment - do not use! */ +/*@}*/ + +/** @internal Not in public API at the moment - do not use! */ extern DECLSPEC int SDLCALL SDL_SoftStretch(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect); diff --git a/source/include/begin_code.h b/source/include/begin_code.h index d1ddaa6a..22748090 100755 --- a/source/include/begin_code.h +++ b/source/include/begin_code.h @@ -1,6 +1,6 @@ /* SDL - Simple DirectMedia Layer - Copyright (C) 1997-2004 Sam Lantinga + Copyright (C) 1997-2009 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -20,20 +20,28 @@ slouken@libsdl.org */ -/* This file sets things up for C dynamic library function definitions, - static inlined functions, and structures aligned at 4-byte alignment. - If you don't like ugly C preprocessor code, don't look at this file. :) -*/ +/** + * @file begin_code.h + * This file sets things up for C dynamic library function definitions, + * static inlined functions, and structures aligned at 4-byte alignment. + * If you don't like ugly C preprocessor code, don't look at this file. :) + */ -/* This shouldn't be nested -- included it around code only. */ +/** + * @file begin_code.h + * This shouldn't be nested -- included it around code only. + */ #ifdef _begin_code_h #error Nested inclusion of begin_code.h #endif #define _begin_code_h -/* Some compilers use a special export keyword */ +/** + * @def DECLSPEC + * Some compilers use a special export keyword + */ #ifndef DECLSPEC -# if defined(__BEOS__) +# if defined(__BEOS__) || defined(__HAIKU__) # if defined(__GNUC__) # define DECLSPEC __declspec(dllexport) # else @@ -56,6 +64,15 @@ # else # define DECLSPEC # endif +# elif defined (__GNUC__) && __GNUC__ < 4 +# /* Added support for GCC-EMX w&OeB(wdRyre>B%x;l>&{S7yyxbFTNCdwR}u=>3!DJm>j6zpwYb zhw+;;#&6E(ikqF9k)D>Gmhwub7<0#7&T4g=$nco^Ed41`%40=f_1xLLpMSA(W`xZa zDK4)~2)&gsd~@~12=g^5Gar|ynVX}^k zl-wosimS?iyDjiUqX9q4eU;c_0NbJjB)Xg5Ua z*1tp|9-je!w?2(vuygX6jgSNRO6?~Ln4ME#XzwUsZB+1f0gC|6E@T)^1`0_#)M-dZ zZlD4J^)o8RB6*J1$^@IuX17J!#Ie`y;*SmSX1;iFnU~}QEM4@nCE3)cG`(k}o>LCl z?+H$^WFyH5WFFYancu25T;JVDjYRPLA`T9X(IVDB!xk1ZTvk0_w4S!>zLKP`MCt3z zB~I~iG5gY3zZBc`0S=YCW)?umob(!LIVEW|icXp*j+XGtFf>u3h#X#um8Cr9+Me~7 zI>L{xlv4i$(nu_0F~kU3U?aP*(ET!wf#oPEreLJ3$m!Sc85r--yQYex%9+&jOO*MgYA0sOJaMavk6jeTRn3J#8IM$R88PFJtGOSD z?%TrAp?zx$YeOV^D~sUR9Nfxv06WIVY>Zf&kLv*Tl$yP+hS>-?TEijHLiaXK2il$6 z*a@ck?`@=wu2yVkX^^jPC$ibq^c_mL&jRz2w_IE2Zya`U!pCEa>1o)>(}PCc-pQFo z`HiD1+y90+n5L^w{Ok(lNvvfNnVLRp@p9Hy$ysYpwTm;g%2~Tt%kzLPc&X<#9ja#yl;NLxE(0Q#G%y91xAiP?qw(N zz2aR8i6n=VXzV`XnyCjEhQt)3CfT!}H7u)oW&gBQ4UcAgkZXk!1}!kMe-Naiz)azL z92LorSzu@^JU|-euhb)I_)j(LJ*X5JQ^W2KX5)nI?BJ#We#kJAEIY(W;&A->5J`i) zxRc39y}Ogh0veAjFnUmNm|Fvp@xv?v*Xc);$@E!Z^d|Bs8wBjPzzBK!D2If>>@KCj z!7gTFMWT)=4K`a~oTih<=rl!Lb3<$!{;r0U5nX~JLZd^l2I}{K$>vxV9alwD7p`u;38YYXTm9Wsab)yE_q2?j z);{p!q})d`YH8jw;qp1f!Mqr{Jkat>C-`Mqf8C3A=L||OeM_ApE{`4K#eFCFMbz=$ zNiG4{`KOqTgho$MLgtre@@W>CUZf#u?9TJ^#Wk<8NHcm!6Ght5!v-|T&w9dNoX^T! zhoxjrX1w^TN15x2GxRbfhZr>v;n-dxn_C{}8z3+RKveo zU|fXx{d^HxJ`Ar~9--Gs=cr96%Yk!j2K#@X$@+h>@OAC|fFr}us2YCmLnS+?hVNQn n92si{xEl!h=>TivgpNJWY`|?67}}E-7}_f@ur^wH>4NKD4v>wE delta 5167 zcmZu#drXyO96mUkSk8ch$Spk8#*9q4$U-Xe59gdqB<^xK+(8ehhg%>D9ZXMNP~p6W z7Z9hJoGY_ttvT2Gedp`>o{!!?dA{d+e$VgrzUO0l zYSHx6qV9;L2`TG0BqS#!C5p+|@T;lqu_iJ;8GDib6!B%@!n1Ap($AfPn->SzY=PqH z_9)-mQR7qFt^}B`Nue-tc6-oM8topfGx?UKBMV9C-uVQko_JN zCe{^_oIvKDLe6}q#&CVFkQ#~LxkVft8WTmVfrhOvX1KIwrD#8I*L}rEU(wRno9n{F zC&lbbWBpQW*9X|=e9bI?kU8l!(sGK?Y7`u^LY#8)%P@4usfg@fimfF)=GvYOmW28r zT`!^j38WES%3_G&wZKMpexV1Y90SYYETftV?Tv^Qf2QJA*#=6r^uI2omNSf19VuU+ zuNPGto|j}%>+PW;se|JlN#;^qPuo- zbZF1)WNnC~?P3uen#N8YnhFZ6SW)?EsU+>bfDc;$4)TS zf7g*Vx>~-Qr9r;6o5*HY*Y8on0~VN%yv^D=e-mmKXIwnCn4YG+JUwXC>|V|+$ZZ^5 zY3?`7!8Bcc>Sk9cPjo$t$kg;%ij0X?7c*K4+stw zjr-UbM*GWs)EMpV@t^E#+pN*`E6x9?|9_9<>8}6KbI4(;5SQ9Q#c#n&MBM%bhnG^#sT1NNpn$R5Zk z?-Cj4Afp2D0zE`F_txzpWdYOQdz7X(cd`hkeza3L^&tm&>ajYl78p7Hc#xgI_m=l4 zB$6CcqTz>#Yo_jD7!vc0n&gbbtYKNz>xUPts(&;iy<97l&})H_{X;Jm1!nT!=cq`2 z(gH(c^%2rAf2E#O!+)ybf}={2Ni`gMjM+G0yN+?w06$_FNtPbxByl)?eVn90UfacF zq~6;_WC4xG78pG!Kf$em$n*&of$Q}rmB|cPVDu*N6dMHWw!jEEdx}HCU|P4*;7B*K zu_8e|N`q|{7^mso9y(1?*GwPVhQAv=WkiRdh|oADSOfKY$YgUYi%u)0Z=NP;^FUhj z0mFRT4QaPsXQW*$ZQx7A_%_h5P3_C)vUY98t`v@5z6qp|e_P$XRB>eVL+^r&p4C3^ zBBb2MGHOZICgE^}iKAH|ba|lVqi6VKS%2M&cIS*pF9RuIA|i_&9JrmEvZBvPg^iNE1cc)5iuh$uIi+U!2d&T*sy4 z#to6;uRdk2Tl(o`NRBaT9>U=lh-_}T=K@a>3iGpt4LE&(MF3w@!!Z|?Y_A&r)dJ%p z%pK&5(DGq;!}18dj=4l_LRpSnVl&wP2Ta!gi-oW2f)6<|3{9xv7d}$5y=wTL1;&w) kKE&NX$j^pY8z*%5Wo85Ju)xs1Yk{G?b(po$($QhZzYD-L9smFU diff --git a/source/lib/SDL_image.lib b/source/lib/SDL_image.lib index a0cecc889ad5a2e0ae87c590fd9aa09b778cb3eb..0fde136c0346529bec7159a3548f4e2a73e42c85 100755 GIT binary patch literal 8264 zcmcIoOLG%P5N^u}7-5WT%kP(P93WMc14aTjzG2*Stz~<1v#)4{D@>IAcy>c z95_=PC{FnWoH+PEaSN404mnbki{dwMAz#m9cV@LxtW&8aQNNiltagFJ)J9`QpO2tMj>ZHouZ9t}bMX&PM6xIu(n{*D{$}6Z*}ykrw&y zt}S0JF3jd<3D%3njI;UkdbwCwuT-6_P55y(wwbE7hq3ggvt!ywoqN8&WA{j1_}MCz z^Y^zwlKa8DH)G+_``z`*&g|{&TP4#ly=lPOqiMjN)M#)OKqDZ&)2YraWzAa^Ap6qu zD|Vj%WZ(R?oZTk?{WS0zK&w%01$O~f8r4>C9AKqU`812^%l6X0NMkT01p~f z9!mXE%ayH-*-E8!-~4#BeTuVSS~=A<=q_U+=#d4u|B7-! z)tc*3qmqv4i5fFV^tO-a4X$4RdolnUU?+!RGemTzo9J$w=n>lI z(A#kR5Pf@S-?L2*QF(-D7ws#wlf6XKqePFZ0Qmr(Wu(K^mqJ8l%H>ffGhOi%F_RDL{-kH77Vb9_1?%Rt7rHTt zrS63(>*nMWx-pf6?iM6H7IUhwg&Fulm%*yd-AUmUx_VPUlpMa#sk%kOsk#~4sTyU* z&B9LAO{Y%P&5O9y363w->~*ScGQkAnG$GmC=`E)n(EqW3FjfS$)!!)0^%o9C58kVp z4*0$5$g!<-{Me|DA{*7QWTQHwY*fdUjq2#~p>@hfP@2^7W_zfU*4@~%t#t(Y(BQNj zlsbLc)W0OFjZcp$U|}R;)wB>1YXTx}O+ZAi35Xar0TIa-P+P%$MM}iBd5ef}3#h4U zg+}XMcSSr|zI_{o=D&6;sk2jR-*P>gX=$aoU;exjYe9WLF2}EBvb_G|otqP@QYBiz z#qU~C?F_}{CY^F=r!;}py!@f8&|i=}rMIG;p|iWn?t+3*Cx{~8({_x{P+~WNHjX;N zzhl;*PE&X6Fi`f$KYr3vFT0kU8B9%j$oKG%pD;pt+%qVhjNHd=^&HNd2Eva#i z+`qM=+K>H)n|Z5PE;dSG`+l#1g;{uPhfFrL;0urKu*s$tlHswnnQUr-8XnsblT9sr!()q@Y-&Lr z9@|liO)k{KV{5nB#0DTdwqqun+E|3g)?u;9ZSn!x^m5skxe~}+$1OI!5jr4WgG?DS z`P2q0Jho1YO>W!{#+JMkTu*t`)n&1X4WUi8?`oR77|e#lFq}XcRe*Pz2j!|$xp_qr z*IZ%?YZF;oGj;Sr@R%mR)1!H6w#F8VJ=7*Rlc``%90201PrXOE<+h3T|HT?G^?6LZ zmk*Jt-(%uKf)JSoJSIMU2$5;fW8!0t5SfNNCO$6-k!jdt;)9qFnMMpIobZImG-@)1 m`u4^=CO(r2aZCx1i4VI%WIACm;S}wlObv4SxWQEL5&a8^cG$K6 literal 7156 zcmcIoOK%fb6#kq50h5RGa$*O98%644k>+6&O4BH>lBPJua!i^PjvJ?B)VyS;mB^+W z7Fn?Ce@I#I1CYAm2OuiZMSnmMYlPUtIrlNXcRX?9h8gM1o%79^^WDd}=iWP?Ocl!; zThrk$6ZSPWK0cWmolH&Mu<=o)j!leTmyhdV0N()N*Fal8(4GY%Q7Jty0G5tpDUl<> zNuo;nwg8sM8!3G+Nhj&NC#8Q1VCj4=rJww;blsE^ivTQLkEO&8Nhj$hewNrPDcuiA zXL&0no&i{T)}_Rsl1|b)EoEQ`VCj7#CHju)Ofv9DN;FP-yiizL&fdx83k%<_%;%P} z`8&D7%0jx}>=f^BqEN`(O{Z&3@SAHRE%M*p&D<_5%;sl7){BL-v-|UAsj#|Pt~h(U zr+#WN}jxT!~~#uNb&QaQ0ZZ9-ZSO`&>l$f@t{%VA?s=D8UwC}tY2Hn#BFPC zvsfbiR(Wq{wp=bgFbA*po#I?It(?jl=`Q1{UzG*ec&43jGi`!W?Q6=n{cS+DopKQ6 zz85{faR+cj&qtK=w)%iK^!$>_d!4`(<>cp79#eUDp83k(eaPpEuHejm|uoJvadxPWtLK^U!QM+9ByK@@$6;XDR#6$xC#ATHrD z+R%YcbfXvjh~o;bA%vzgeBCU2xHe^ZQl=h;>VTL@h6CG78LXQLfOT^^vu;jKp&L_8 z>eXOk-JBvqHv(ShZpzkmH3OP0%G8HvJ?b{9 z$KFPD1bEOB60u*x(J^6rI3Yp0@nKu*DDj~F3C=GGdGbzgll!%wK7+)wCMtUkzUH& z7H>VbR?_)Hb^uE4{6s4VrE`9=crdfEx3f?69nAfX_wO|!f5R77unD@^Gk~b_mPSMa znWB{lml4vO(f$HhI*x z!}4!)pQ2Uu*v^@3YC97g+j)~sZIgmyyI``Z?N@MYEhd}V)&<9Q(PER^#o*X3*=%AP z8XQ~LWK-MQ;Mgu(Z1O;LMmD|pcxHEkW_PQ_rnlo~KC-iuY4_