WhatsNew
changeset 0 74212992fb08
child 292 eadc0746dfaf
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/WhatsNew	Thu Apr 26 16:45:43 2001 +0000
     1.3 @@ -0,0 +1,664 @@
     1.4 +
     1.5 +This is a list of API changes in SDL's version history.
     1.6 +
     1.7 +Version 1.0:
     1.8 +
     1.9 +1.2.0:
    1.10 +	Added SDL_VIDEOEXPOSE event to signal that the screen needs to
    1.11 +	be redrawn.  This is currently only delivered to OpenGL windows
    1.12 +	on X11, though it may be delivered in the future when the video
    1.13 +	memory is lost under DirectX.
    1.14 +
    1.15 +1.1.8:
    1.16 +	You can pass SDL_NOFRAME to SDL_VideoMode() to create a window
    1.17 +	that has no title bar or frame decoration.  Fullscreen video
    1.18 +	modes automatically have this flag set.
    1.19 +
    1.20 +	Added a function to query the clipping rectangle for a surface:
    1.21 +		void SDL_GetClipRect(SDL_Surface *surface, SDL_Rect *rect)
    1.22 +
    1.23 +	Added a function to query the current event filter:
    1.24 +		SDL_EventFilter SDL_GetEventFilter(void)
    1.25 +
    1.26 +	If you pass -1 to SDL_ShowCursor(), it won't change the current
    1.27 +	cursor visibility state, but will still return it.
    1.28 +
    1.29 +	SDL_LockSurface() and SDL_UnlockSurface() are recursive, meaning
    1.30 +	you can nest them as deep as you want, as long as each lock call
    1.31 +	has a matching unlock call.  The surface remains locked until the
    1.32 +	last matching unlock call.
    1.33 +
    1.34 +	Note that you may not blit to or from a locked surface.
    1.35 +
    1.36 +1.1.7:
    1.37 +	The SDL_SetGammaRamp() and SDL_GetGammaRamp() functions now take
    1.38 +	arrays of Uint16 values instead of Uint8 values.  For the most part,
    1.39 +	you can just take your old values and shift them up 8 bits to get
    1.40 +	new correct values for your gamma ramps.
    1.41 +
    1.42 +	You can pass SDL_RLEACCEL in flags passed to SDL_ConvertSurface()
    1.43 +        and SDL will try to RLE accelerate colorkey and alpha blits in the
    1.44 +	resulting surface.
    1.45 +
    1.46 +1.1.6:
    1.47 +	Added a function to return the thread ID of a specific thread:
    1.48 +		Uint32 SDL_GetThreadID(SDL_Thread *thread)
    1.49 +	If 'thread' is NULL, this function returns the id for this thread.
    1.50 +
    1.51 +1.1.5:
    1.52 +	The YUV overlay structure has been changed to use an array of
    1.53 +	pitches and pixels representing the planes of a YUV image, to
    1.54 +	better enable hardware acceleration.  The YV12 and IYUV formats
    1.55 +	each have three planes, corresponding to the Y, U, and V portions
    1.56 +	of the image, while packed pixel YUV formats just have one plane.
    1.57 +
    1.58 +	For palettized mode (8bpp), the screen colormap is now split in
    1.59 +	a physical and a logical palette. The physical palette determines
    1.60 +	what colours the screen pixels will get when displayed, and the
    1.61 +	logical palette controls the mapping from blits to/from the screen.
    1.62 +	A new function, SDL_SetPalette() has been added to change
    1.63 +	logical and physical palettes separately. SDL_SetColors() works
    1.64 +	just as before, and is equivalent to calling SDL_SetPalette() with
    1.65 +	a flag argument of (SDL_LOGPAL|SDL_PHYSPAL).
    1.66 +
    1.67 +	SDL_BlitSurface() no longer modifies the source rectangle, only the
    1.68 +	destination rectangle. The width/height members of the destination
    1.69 +	rectangle are ignored, only the position is used.
    1.70 +
    1.71 +	The old source clipping function SDL_SetClipping() has been replaced
    1.72 +	with a more useful function to set the destination clipping rectangle:
    1.73 +		SDL_bool SDL_SetClipRect(SDL_Surface *surface, SDL_Rect *rect)
    1.74 +		
    1.75 +	Added a function to see what subsystems have been initialized:
    1.76 +		Uint32 SDL_WasInit(Uint32 flags)
    1.77 +
    1.78 +	The Big Alpha Flip: SDL now treats alpha as opacity like everybody
    1.79 +	else, and not as transparency:
    1.80 +
    1.81 +	A new cpp symbol: SDL_ALPHA_OPAQUE is defined as 255
    1.82 +	A new cpp symbol: SDL_ALPHA_TRANSPARENT is defined as 0
    1.83 +	Values between 0 and 255 vary from fully transparent to fully opaque.
    1.84 +
    1.85 +	New functions:
    1.86 +	SDL_DisplayFormatAlpha()
    1.87 +	    Returns a surface converted to a format with alpha-channel
    1.88 +	    that can be blit efficiently to the screen. (In other words,
    1.89 +	    like SDL_DisplayFormat() but the resulting surface has
    1.90 +	    an alpha channel.)  This is useful for surfaces with alpha.
    1.91 +	SDL_MapRGBA()
    1.92 +	    Works as SDL_MapRGB() but takes an additional alpha parameter.
    1.93 +	SDL_GetRGBA()
    1.94 +	    Works as SDL_GetRGB() but also returns the alpha value
    1.95 +	    (SDL_ALPHA_OPAQUE for formats without an alpha channel)
    1.96 +
    1.97 +	Both SDL_GetRGB() and SDL_GetRGBA() now always return values in
    1.98 +	the [0..255] interval. Previously, SDL_GetRGB() would return
    1.99 +	(0xf8, 0xfc, 0xf8) for a completely white pixel in RGB565 format.
   1.100 +	(N.B.: This is broken for bit fields < 3 bits.)
   1.101 +
   1.102 +	SDL_MapRGB() returns pixels in which the alpha channel is set opaque.
   1.103 +
   1.104 +	SDL_SetAlpha() can now be used for both setting the per-surface
   1.105 +	alpha, using the new way of thinking of alpha, and also to enable
   1.106 +	and disable per-pixel alpha blending for surfaces with an alpha
   1.107 +	channel:
   1.108 +		To disable alpha blending:
   1.109 +			SDL_SetAlpha(surface, 0, 0);
   1.110 +		To re-enable alpha blending:
   1.111 +			SDL_SetAlpha(surface, SDL_SRCALPHA, 0);
   1.112 +	Surfaces with an alpha channel have blending enabled by default.
   1.113 +
   1.114 +	SDL_SetAlpha() now accepts SDL_RLEACCEL as a flag, which requests
   1.115 +	RLE acceleration of blits, just as like with SDL_SetColorKey().
   1.116 +	This flag can be set for both surfaces with an alpha channel
   1.117 +	and surfaces with an alpha value set by SDL_SetAlpha().
   1.118 +	As always, RLE surfaces must be locked before pixel access is
   1.119 +	allowed, and unlocked before any other SDL operations are done
   1.120 +	on it.
   1.121 +
   1.122 +	The blit semantics for surfaces with and without alpha and colorkey
   1.123 +	have now been defined:
   1.124 +
   1.125 +	RGBA->RGB:
   1.126 +	    SDL_SRCALPHA set:
   1.127 +		alpha-blend (using alpha-channel).
   1.128 +		SDL_SRCCOLORKEY ignored.
   1.129 +	    SDL_SRCALPHA not set:
   1.130 +		copy RGB.
   1.131 +		if SDL_SRCCOLORKEY set, only copy the pixels matching the
   1.132 +		RGB values of the source colour key, ignoring alpha in the
   1.133 +		comparison.
   1.134 +
   1.135 +	RGB->RGBA:
   1.136 +	    SDL_SRCALPHA set:
   1.137 +		alpha-blend (using the source per-surface alpha value);
   1.138 +		set destination alpha to opaque.
   1.139 +	    SDL_SRCALPHA not set:
   1.140 +		copy RGB, set destination alpha to opaque.
   1.141 +	    both:
   1.142 +		if SDL_SRCCOLORKEY set, only copy the pixels matching the
   1.143 +		source colour key.
   1.144 +
   1.145 +	RGBA->RGBA:
   1.146 +	    SDL_SRCALPHA set:
   1.147 +		alpha-blend (using the source alpha channel) the RGB values;
   1.148 +		leave destination alpha untouched. [Note: is this correct?]
   1.149 +		SDL_SRCCOLORKEY ignored.
   1.150 +	    SDL_SRCALPHA not set:
   1.151 +		copy all of RGBA to the destination.
   1.152 +		if SDL_SRCCOLORKEY set, only copy the pixels matching the
   1.153 +		RGB values of the source colour key, ignoring alpha in the
   1.154 +		comparison.
   1.155 +
   1.156 +	RGB->RGB: 
   1.157 +	    SDL_SRCALPHA set:
   1.158 +		alpha-blend (using the source per-surface alpha value).
   1.159 +	    SDL_SRCALPHA not set:
   1.160 +		copy RGB.
   1.161 +	    both:
   1.162 +		if SDL_SRCCOLORKEY set, only copy the pixels matching the
   1.163 +		source colour key.
   1.164 +
   1.165 +	As a special case, blits from surfaces with per-surface alpha
   1.166 +	value of 128 (50% transparency) are optimised and much faster
   1.167 +	than other alpha values. This does not apply to surfaces with
   1.168 +	alpha channels (per-pixel alpha).
   1.169 +
   1.170 +	New functions for manipulating the gamma of the display have
   1.171 +	been added:
   1.172 +		int SDL_SetGamma(float red, float green, float blue);
   1.173 +		int SDL_SetGammaRamp(Uint8 *red, Uint8 *green, Uint8 *blue);
   1.174 +		int SDL_GetGammaRamp(Uint8 *red, Uint8 *green, Uint8 *blue);
   1.175 +	Gamma ramps are tables with 256 entries which map the screen color
   1.176 +	components into actually displayed colors.  For an example of
   1.177 +	implementing gamma correction and gamma fades, see test/testgamma.c
   1.178 +	Gamma control is not supported on all hardware.
   1.179 +
   1.180 +1.1.4:
   1.181 +	The size of the SDL_CDtrack structure changed from 8 to 12 bytes
   1.182 +	as the size of the length member was extended to 32 bits.
   1.183 +
   1.184 +        You can now use SDL for 2D blitting with a GL mode by passing the
   1.185 +	SDL_OPENGLBLIT flag to SDL_SetVideoMode().  You can specify 16 or
   1.186 +	32 bpp, and the data in the framebuffer is put into the GL scene
   1.187 +	when you call SDL_UpdateRects(), and the scene will be visible
   1.188 +	when you call SDL_GL_SwapBuffers().
   1.189 +
   1.190 +	Run the "testgl" test program with the -logo command line option
   1.191 +	to see an example of this blending of 2D and 3D in SDL.
   1.192 +
   1.193 +1.1.3:
   1.194 +	Added SDL_FreeRW() to the API, to complement SDL_AllocRW()
   1.195 +
   1.196 +	Added resizable window support - just add SDL_RESIZABLE to the
   1.197 +	SDL_SetVideoMode() flags, and then wait for SDL_VIDEORESIZE events.
   1.198 +	See SDL_events.h for details on the new SDL_ResizeEvent structure.
   1.199 +
   1.200 +	Added condition variable support, based on mutexes and semaphores.
   1.201 +		SDL_CreateCond()
   1.202 +		SDL_DestroyCond()
   1.203 +		SDL_CondSignal()
   1.204 +		SDL_CondBroadcast()
   1.205 +		SDL_CondWait()
   1.206 +		SDL_CondTimedWait()
   1.207 +	The new function prototypes are in SDL_mutex.h
   1.208 +
   1.209 +	Added counting semaphore support, based on the mutex primitive.
   1.210 +		SDL_CreateSemaphore()
   1.211 +		SDL_DestroySemaphore()
   1.212 +		SDL_SemWait()
   1.213 +		SDL_SemTryWait()
   1.214 +		SDL_SemWaitTimeout()
   1.215 +		SDL_SemPost()
   1.216 +		SDL_SemValue()
   1.217 +	The new function prototypes are in SDL_mutex.h
   1.218 +
   1.219 +	Added support for asynchronous blitting.  To take advantage of this,
   1.220 +	you must set the SDL_ASYNCBLIT flag when setting the video mode and
   1.221 +	creating surfaces that you want accelerated in this way.  You must
   1.222 +	lock surfaces that have this flag set, and the lock will block until
   1.223 +	any queued blits have completed.
   1.224 +
   1.225 +	Added YUV video overlay support.
   1.226 +	The supported YUV formats are: YV12, IYUV, YUY2, UYVY, and YVYU.
   1.227 +	This function creates an overlay surface:
   1.228 +		SDL_CreateYUVOverlay()
   1.229 +	You must lock and unlock the overlay to get access to the data:
   1.230 +		SDL_LockYUVOverlay() SDL_UnlockYUVOverlay()
   1.231 +	You can then display the overlay:
   1.232 +		SDL_DisplayYUVOverlay()
   1.233 +	You must free the overlay when you are done using it:
   1.234 +		SDL_FreeYUVOverlay()
   1.235 +	See SDL_video.h for the full function prototypes.
   1.236 +
   1.237 +	The joystick hat position constants have been changed:
   1.238 +	Old constant            New constant
   1.239 +	------------            ------------
   1.240 +	     0                  SDL_HAT_CENTERED
   1.241 +	     1                  SDL_HAT_UP
   1.242 +	     2                  SDL_HAT_RIGHTUP
   1.243 +	     3                  SDL_HAT_RIGHT
   1.244 +	     4                  SDL_HAT_RIGHTDOWN
   1.245 +	     5                  SDL_HAT_DOWN
   1.246 +	     6                  SDL_HAT_LEFTDOWN
   1.247 +	     7                  SDL_HAT_LEFT
   1.248 +	     8                  SDL_HAT_LEFTUP
   1.249 +	The new constants are bitmasks, so you can check for the
   1.250 +	individual axes like this:
   1.251 +		if ( hat_position & SDL_HAT_UP ) {
   1.252 +		}
   1.253 +	and you'll catch left-up, up, and right-up.
   1.254 +
   1.255 +1.1.2:
   1.256 +	Added multiple timer support:
   1.257 +		SDL_AddTimer() and SDL_RemoveTimer()
   1.258 +
   1.259 +	SDL_WM_SetIcon() now respects the icon colorkey if mask is NULL.
   1.260 +
   1.261 +1.1.0:
   1.262 +	Added initial OpenGL support.
   1.263 +	First set GL attributes (such as RGB depth, alpha depth, etc.)
   1.264 +		SDL_GL_SetAttribute()
   1.265 +	Then call SDL_SetVideoMode() with the SDL_OPENGL flag.
   1.266 +	Perform all of your normal GL drawing.
   1.267 +	Finally swap the buffers with the new SDL function:
   1.268 +		SDL_GL_SwapBuffers()
   1.269 +	See the new 'testgl' test program for an example of using GL with SDL.
   1.270 +
   1.271 +	You can load GL extension functions by using the function:
   1.272 +		SDL_GL_LoadProcAddress()
   1.273 +
   1.274 +	Added functions to initialize and cleanup specific SDL subsystems:
   1.275 +		SDL_InitSubSystem() and SDL_QuitSubSystem()
   1.276 +
   1.277 +	Added user-defined event type:
   1.278 +		typedef struct {
   1.279 +        		Uint8 type;
   1.280 +        		int code;
   1.281 +        		void *data1;
   1.282 +        		void *data2;
   1.283 +		} SDL_UserEvent;
   1.284 +	This structure is in the "user" member of an SDL_Event.
   1.285 +
   1.286 +	Added a function to push events into the event queue:
   1.287 +		SDL_PushEvent()
   1.288 +
   1.289 +	Example of using the new SDL user-defined events:
   1.290 +	{
   1.291 +		SDL_Event event;
   1.292 +
   1.293 +		event.type = SDL_USEREVENT;
   1.294 +		event.user.code = my_event_code;
   1.295 +		event.user.data1 = significant_data;
   1.296 +		event.user.data2 = 0;
   1.297 +		SDL_PushEvent(&event);
   1.298 +	}
   1.299 +
   1.300 +	Added a function to get mouse deltas since last query:
   1.301 +		SDL_GetRelativeMouseState()
   1.302 +
   1.303 +	Added a boolean datatype to SDL_types.h:
   1.304 +		SDL_bool = { SDL_TRUE, SDL_FALSE }
   1.305 +
   1.306 +	Added a function to get the current audio status:
   1.307 +		SDL_GetAudioState();
   1.308 +	It returns one of:
   1.309 +		SDL_AUDIO_STOPPED,
   1.310 +		SDL_AUDIO_PLAYING,
   1.311 +		SDL_AUDIO_PAUSED
   1.312 +
   1.313 +	Added an AAlib driver (ASCII Art) - by Stephane Peter.
   1.314 +
   1.315 +1.0.6:
   1.316 +	The input grab state is reset after each call to SDL_SetVideoMode().
   1.317 +	The input is grabbed by default in fullscreen mode, and ungrabbed in
   1.318 +	windowed mode.  If you want to set input grab to a particular value,
   1.319 +	you should set it after each call to SDL_SetVideoMode().
   1.320 +
   1.321 +1.0.5:
   1.322 +	Exposed SDL_AudioInit(), SDL_VideoInit()
   1.323 +	Added SDL_AudioDriverName() and SDL_VideoDriverName()
   1.324 +
   1.325 +	Added new window manager function:
   1.326 +		SDL_WM_ToggleFullScreen()
   1.327 +	This is currently implemented only on Linux
   1.328 +
   1.329 +	The ALT-ENTER code has been removed - it's not appropriate for a
   1.330 +	lib to bind keys when they aren't even emergency escape sequences.
   1.331 +
   1.332 +	ALT-ENTER functionality can be implemented with the following code:
   1.333 +
   1.334 +	int Handle_AltEnter(const SDL_Event *event)
   1.335 +	{
   1.336 +	    if ( event->type == SDL_KEYDOWN ) {
   1.337 +	        if ( (event->key.keysym.sym == SDLK_RETURN) &&
   1.338 +	             (event->key.keysym.mod & KMOD_ALT) ) {   
   1.339 +	                SDL_WM_ToggleFullScreen(SDL_GetVideoSurface());
   1.340 +	                return(0);
   1.341 +	        }
   1.342 +	    }
   1.343 +	    return(1);
   1.344 +	}
   1.345 +	SDL_SetEventFilter(Handle_AltEnter);
   1.346 +
   1.347 +1.0.3:
   1.348 +	Under X11, if you grab the input and hide the mouse cursor,
   1.349 +	the mouse will go into a "relative motion" mode where you
   1.350 +	will always get relative motion events no matter how far in
   1.351 +	each direction you move the mouse - relative motion is not
   1.352 +	bounded by the edges of the window (though the absolute values
   1.353 +	of the mouse positions are clamped by the size of the window).
   1.354 +	The SVGAlib, framebuffer console, and DirectInput drivers all
   1.355 +	have this behavior naturally, and the GDI and BWindow drivers
   1.356 +	never go into "relative motion" mode.
   1.357 +
   1.358 +1.0.2:
   1.359 +	Added a function to enable keyboard repeat:
   1.360 +		SDL_EnableKeyRepeat()
   1.361 +
   1.362 +	Added a function to grab the mouse and keyboard input
   1.363 +		SDL_WM_GrabInput()
   1.364 +
   1.365 +	Added a function to iconify the window.
   1.366 +		SDL_WM_IconifyWindow()
   1.367 +	If this function succeeds, the application will receive an event
   1.368 +	signaling SDL_APPACTIVE event 
   1.369 +
   1.370 +1.0.1:
   1.371 +	Added constants to SDL_audio.h for 16-bit native byte ordering:
   1.372 +		AUDIO_U16SYS, AUDIO_S16SYS
   1.373 +
   1.374 +1.0.0:
   1.375 +	New public release
   1.376 +
   1.377 +Version 0.11:
   1.378 +
   1.379 +0.11.5:
   1.380 +	A new function SDL_GetVideoSurface() has been added, and returns
   1.381 +	a pointer to the current display surface.
   1.382 +
   1.383 +	SDL_AllocSurface() has been renamed SDL_CreateRGBSurface(), and
   1.384 +	a new function SDL_CreateRGBSurfaceFrom() has been added to allow
   1.385 +	creating an SDL surface from an existing pixel data buffer.
   1.386 +
   1.387 +	Added SDL_GetRGB() to the headers and documentation.
   1.388 +
   1.389 +0.11.4:
   1.390 +	SDL_SetLibraryPath() is no longer meaningful, and has been removed.
   1.391 +
   1.392 +0.11.3:
   1.393 +	A new flag for SDL_Init(), SDL_INIT_NOPARACHUTE, prevents SDL from
   1.394 +	installing fatal signal handlers on operating systems that support
   1.395 +	them.
   1.396 +
   1.397 +Version 0.9:
   1.398 +
   1.399 +0.9.15:
   1.400 +	SDL_CreateColorCursor() has been removed.  Color cursors should
   1.401 +	be implemented as sprites, blitted by the application when the
   1.402 +	cursor moves.  To get smooth color cursor updates when the app
   1.403 +	is busy, pass the SDL_INIT_EVENTTHREAD flag to SDL_Init().  This
   1.404 +	allows you to handle the mouse motion in another thread from an
   1.405 +	event filter function, but is currently only supported by Linux
   1.406 +	and BeOS.  Note that you'll have to protect the display surface
   1.407 +	from multi-threaded access by using mutexes if you do this.
   1.408 +
   1.409 +	Thread-safe surface support has been removed from SDL.
   1.410 +	This makes blitting somewhat faster, by removing SDL_MiddleBlit().
   1.411 +	Code that used SDL_MiddleBlit() should use SDL_LowerBlit() instead.
   1.412 +	You can make your surfaces thread-safe by allocating your own
   1.413 +	mutex and making lock/unlock calls around accesses to your surface.
   1.414 +
   1.415 +0.9.14:
   1.416 +	SDL_GetMouseState() now takes pointers to int rather than Uint16.
   1.417 +
   1.418 +	If you set the SDL_WINDOWID environment variable under UNIX X11,
   1.419 +	SDL will use that as the main window instead of creating it's own.
   1.420 +	This is an unsupported extension to SDL, and not portable at all.
   1.421 +
   1.422 +0.9.13:
   1.423 +	Added a function SDL_SetLibraryPath() which can be used to specify
   1.424 +	the directory containing the SDL dynamic libraries.  This is useful
   1.425 +	for commercial applications which ship with particular versions
   1.426 +	of the libraries, and for security on multi-user systems.
   1.427 +	If this function is not used, the default system directories are 
   1.428 +	searched using the native dynamic object loading mechanism.
   1.429 +
   1.430 +	In order to support C linkage under Visual C++, you must declare
   1.431 +	main() without any return type:
   1.432 +		main(int argc, char *argv[]) {
   1.433 +			/* Do the program... */
   1.434 +			return(0);
   1.435 +		}
   1.436 +	C++ programs should also return a value if compiled under VC++.
   1.437 +
   1.438 +	The blit_endian member of the SDL_VideoInfo struct has been removed.
   1.439 +
   1.440 +	SDL_SymToASCII() has been replaced with SDL_GetKeyName(), so there
   1.441 +	is now no longer any function to translate a keysym to a character.
   1.442 +
   1.443 +	The SDL_keysym structure has been extended with a 'scancode' and
   1.444 +	'unicode' member.  The 'scancode' is a hardware specific scancode
   1.445 +	for the key that was pressed, and may be 0.  The 'unicode' member
   1.446 +	is a 16-bit UNICODE translation of the key that was pressed along
   1.447 +	with any modifiers or compose keys that have been pressed.
   1.448 +	If no UNICODE translation exists for the key, 'unicode' will be 0.
   1.449 +
   1.450 +	Added a function SDL_EnableUNICODE() to enable/disable UNICODE
   1.451 +	translation of character keypresses.  Translation defaults off.
   1.452 +
   1.453 +	To convert existing code to use the new API, change code which
   1.454 +	uses SDL_SymToASCII() to get the keyname to use SDL_GetKeyName(),
   1.455 +	and change code which uses it to get the ASCII value of a sym to
   1.456 +	use the 'unicode' member of the event keysym.
   1.457 +
   1.458 +0.9.12:
   1.459 +	There is partial support for 64-bit datatypes.  I don't recommend 
   1.460 +	you use this if you have a choice, because 64-bit datatypes are not
   1.461 +	supported on many platforms.  On platforms for which it is supported,
   1.462 +	the SDL_HAS_64BIT_TYPE C preprocessor define will be enabled, and
   1.463 +	you can use the Uint64 and Sint64 datatypes.
   1.464 +
   1.465 +	Added functions to SDL_endian.h to support 64-bit datatypes:
   1.466 +	    SDL_SwapLE64(), SDL_SwapBE64(),
   1.467 +	    SDL_ReadLE64(), SDL_ReadBE64(), SDL_WriteLE64(), SDL_WriteBE64()
   1.468 +
   1.469 +	A new member "len_ratio" has been added to the SDL_AudioCVT structure,
   1.470 +	and allows you to determine either the original buffer length or the
   1.471 +	converted buffer length, given the other.
   1.472 +
   1.473 +	A new function SDL_FreeWAV() has been added to the API to free data
   1.474 +	allocated by SDL_LoadWAV_RW().  This is necessary under Win32 since
   1.475 +	the gcc compiled DLL uses a different heap than VC++ compiled apps.
   1.476 +
   1.477 +	SDL now has initial support for international keyboards using the
   1.478 +	Latin character set.
   1.479 +	If a particular mapping is desired, you can set the DEFAULT_KEYBOARD
   1.480 +	compile-time variable, or you can set the environment variable 
   1.481 +	"SDL_KEYBOARD" to a string identifying the keyboard mapping you desire.
   1.482 +	The valid values for these variables can be found in SDL_keyboard.c
   1.483 +
   1.484 +	Full support for German and French keyboards under X11 is implemented.
   1.485 +
   1.486 +0.9.11:
   1.487 +	The THREADED_EVENTS compile-time define has been replaced with the
   1.488 +	SDL_INIT_EVENTTHREAD flag.  If this flag is passed to SDL_Init(),
   1.489 +	SDL will create a separate thread to perform input event handling.
   1.490 +	If this flag is passed to SDL_Init(), and the OS doesn't support 
   1.491 +	event handling in a separate thread, SDL_Init() will fail.
   1.492 +	Be sure to add calls to SDL_Delay() in your main thread to allow
   1.493 +	the OS to schedule your event thread, or it may starve, leading
   1.494 +	to slow event delivery and/or dropped events.
   1.495 +	Currently MacOS and Win32 do not support this flag, while BeOS 
   1.496 +	and Linux do support it.  I recommend that your application only
   1.497 +	use this flag if absolutely necessary.
   1.498 +
   1.499 +	The SDL thread function passed to SDL_CreateThread() now returns a
   1.500 +	status.  This status can be retrieved by passing a non-NULL pointer
   1.501 +	as the 'status' argument to SDL_WaitThread().
   1.502 +
   1.503 +	The volume parameter to SDL_MixAudio() has been increased in range
   1.504 +	from (0-8) to (0-128)
   1.505 +
   1.506 +	SDL now has a data source abstraction which can encompass a file,
   1.507 +	an area of memory, or any custom object you can envision.  It uses
   1.508 +	these abstractions, SDL_RWops, in the endian read/write functions,
   1.509 +	and the built-in WAV and BMP file loaders.  This means you can load
   1.510 +	WAV chunks from memory mapped files, compressed archives, network
   1.511 +	pipes, or anything else that has a data read abstraction.
   1.512 +
   1.513 +	There are three built-in data source abstractions:
   1.514 +	    SDL_RWFromFile(), SDL_RWFromFP(), SDL_RWFromMem()
   1.515 +	along with a generic data source allocation function:
   1.516 +	    SDL_AllocRW()
   1.517 +	These data sources can be used like stdio file pointers with the
   1.518 +	following convenience functions:
   1.519 +	    SDL_RWseek(), SDL_RWread(), SDL_RWwrite(), SDL_RWclose()
   1.520 +	These functions are defined in the new header file "SDL_rwops.h"
   1.521 +
   1.522 +	The endian swapping functions have been turned into macros for speed
   1.523 +	and SDL_CalculateEndian() has been removed.  SDL_endian.h now defines
   1.524 +	SDL_BYTEORDER as either SDL_BIG_ENDIAN or SDL_LIL_ENDIAN depending on
   1.525 +	the endianness of the host system.
   1.526 +
   1.527 +	The endian read/write functions now take an SDL_RWops pointer
   1.528 +	instead of a stdio FILE pointer, to support the new data source
   1.529 +	abstraction.
   1.530 +
   1.531 +	The SDL_*LoadWAV() functions have been replaced with a single
   1.532 +	SDL_LoadWAV_RW() function that takes a SDL_RWops pointer as it's
   1.533 +	first parameter, and a flag whether or not to automatically 
   1.534 +	free it as the second parameter.  SDL_LoadWAV() is a macro for
   1.535 +	backward compatibility and convenience:
   1.536 +	    SDL_LoadWAV_RW(SDL_RWFromFile("sample.wav", "rb"), 1, ...);
   1.537 +
   1.538 +	The SDL_*LoadBMP()/SDL_*SaveBMP() functions have each been replaced
   1.539 +	with a single function that takes a SDL_RWops pointer as it's
   1.540 +	first parameter, and a flag whether or not to automatically 
   1.541 +	free it as the second parameter.  SDL_LoadBMP() and SDL_SaveBMP()
   1.542 +	are macros for backward compatibility and convenience:
   1.543 +	    SDL_LoadBMP_RW(SDL_RWFromFile("sample.bmp", "rb"), 1, ...);
   1.544 +	    SDL_SaveBMP_RW(SDL_RWFromFile("sample.bmp", "wb"), 1, ...);
   1.545 +	Note that these functions use SDL_RWseek() extensively, and should
   1.546 +	not be used on pipes or other non-seekable data sources.
   1.547 +
   1.548 +0.9.10:
   1.549 +	The Linux SDL_SysWMInfo and SDL_SysWMMsg structures have been 
   1.550 +	extended to support multiple types of display drivers, as well as
   1.551 +        safe access to the X11 display when THREADED_EVENTS is enabled.
   1.552 +        The new structures are documented in the SDL_syswm.h header file.
   1.553 +
   1.554 +	Thanks to John Elliott <jce@seasip.demon.co.uk>, the UK keyboard
   1.555 +	should now work properly, as well as the "Windows" keys on US
   1.556 +	keyboards.
   1.557 +
   1.558 +	The Linux CD-ROM code now reads the CD-ROM devices from /etc/fstab
   1.559 +	instead of trying to open each block device on the system.
   1.560 +	The CD must be listed in /etc/fstab as using the iso9660 filesystem.
   1.561 +
   1.562 +	On Linux, if you define THREADED_EVENTS at compile time, a separate
   1.563 +	thread will be spawned to gather X events asynchronously from the
   1.564 +	graphics updates.  This hasn't been extensively tested, but it does
   1.565 +	provide a means of handling keyboard and mouse input in a separate
   1.566 +	thread from the graphics thread.  (This is now enabled by default.)
   1.567 +
   1.568 +	A special access function SDL_PeepEvents() allows you to manipulate
   1.569 +	the event queue in a thread-safe manner, including peeking at events,
   1.570 +	removing events of a specified type, and adding new events of arbitrary
   1.571 +	type to the queue (use the new 'user' member of the SDL_Event type).
   1.572 +
   1.573 +	If you use SDL_PeepEvents() to gather events, then the main graphics
   1.574 +	thread needs to call SDL_PumpEvents() periodically to drive the event
   1.575 +	loop and generate input events.  This is not necessary if SDL has been 
   1.576 +	compiled with THREADED_EVENTS defined, but doesn't hurt.
   1.577 +
   1.578 +	A new function SDL_ThreadID() returns the identifier associated with
   1.579 +	the current thread.
   1.580 +
   1.581 +0.9.9:
   1.582 +	The AUDIO_STEREO format flag has been replaced with a new 'channels'
   1.583 +	member of the SDL_AudioSpec structure.  The channels are 1 for mono
   1.584 +	audio, and 2 for stereo audio.  In the future more channels may be
   1.585 +	supported for 3D surround sound.
   1.586 +
   1.587 +	The SDL_MixAudio() function now takes an additional volume parameter,
   1.588 +	which should be set to SDL_MIX_MAXVOLUME for compatibility with the
   1.589 +	original function.
   1.590 +
   1.591 +	The CD-ROM functions which take a 'cdrom' parameter can now be
   1.592 +	passed NULL, and will act on the last successfully opened CD-ROM.
   1.593 +
   1.594 +0.9.8:
   1.595 +	No changes, bugfixes only.
   1.596 +	
   1.597 +0.9.7:
   1.598 +	No changes, bugfixes only.
   1.599 +	
   1.600 +0.9.6:
   1.601 +	Added a fast rectangle fill function: SDL_FillRect()
   1.602 +
   1.603 +	Addition of a useful function for getting info on the video hardware:
   1.604 +	    const SDL_VideoInfo *SDL_GetVideoInfo(void)
   1.605 +        This function replaces SDL_GetDisplayFormat().
   1.606 +
   1.607 +	Initial support for double-buffering:
   1.608 +	  Use the SDL_DOUBLEBUF flag in SDL_SetVideoMode()
   1.609 +	  Update the screen with a new function: SDL_Flip()
   1.610 +
   1.611 +	SDL_AllocSurface() takes two new flags:
   1.612 +	SDL_SRCCOLORKEY means that the surface will be used for colorkey blits
   1.613 +	  and if the hardware supports hardware acceleration of colorkey blits
   1.614 +	  between two surfaces in video memory, to place the surface in video
   1.615 +	  memory if possible, otherwise it will be placed in system memory.
   1.616 +	SDL_SRCALPHA means that the surface will be used for alpha blits and
   1.617 +	  if the hardware supports hardware acceleration of alpha blits between
   1.618 +	  two surfaces in video memory, to place the surface in video memory
   1.619 +	  if possible, otherwise it will be placed in system memory.
   1.620 +	SDL_HWSURFACE now means that the surface will be created with the 
   1.621 +	  same format as the display surface, since having surfaces in video
   1.622 +	  memory is only useful for fast blitting to the screen, and you can't
   1.623 +	  blit surfaces with different surface formats in video memory.
   1.624 +
   1.625 +0.9.5:
   1.626 +	You can now pass a NULL mask to SDL_WM_SetIcon(), and it will assume
   1.627 +	that the icon consists of the entire image.
   1.628 +
   1.629 +	SDL_LowerBlit() is back -- but don't use it on the display surface.
   1.630 +	It is exactly the same as SDL_MiddleBlit(), but doesn't check for
   1.631 +	thread safety.
   1.632 +
   1.633 +	Added SDL_FPLoadBMP(), SDL_FPSaveBMP(), SDL_FPLoadWAV(), which take
   1.634 +	a FILE pointer instead of a file name.
   1.635 +
   1.636 +	Added CD-ROM audio control API:
   1.637 +	    SDL_CDNumDrives()
   1.638 +	    SDL_CDName()
   1.639 +	    SDL_CDOpen()
   1.640 +	    SDL_CDStatus()
   1.641 +	    SDL_CDPlayTracks()
   1.642 +	    SDL_CDPlay()
   1.643 +	    SDL_CDPause()
   1.644 +	    SDL_CDResume()
   1.645 +	    SDL_CDStop()
   1.646 +	    SDL_CDEject()
   1.647 +	    SDL_CDClose()
   1.648 +
   1.649 +0.9.4:
   1.650 +	No changes, bugfixes only.
   1.651 +
   1.652 +0.9.3:
   1.653 +	Mouse motion event now includes relative motion information:
   1.654 +	    Sint16 event->motion.xrel, Sint16 event->motion.yrel
   1.655 +
   1.656 +	X11 keyrepeat handling can be disabled by defining IGNORE_X_KEYREPEAT
   1.657 +	    (Add -DIGNORE_X_KEYREPEAT to CFLAGS line in obj/x11Makefile)
   1.658 +
   1.659 +0.9.2:
   1.660 +	No changes, bugfixes only.
   1.661 +
   1.662 +0.9.1:
   1.663 +	Removed SDL_MapSurface() and SDL_UnmapSurface() -- surfaces are now
   1.664 +	automatically mapped on blit.
   1.665 +
   1.666 +0.8.0:
   1.667 +	SDL stable release