summaryrefslogtreecommitdiff
path: root/macosx/plugins/Common/SDL/src/SDL.c
diff options
context:
space:
mode:
authorSND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2011-02-19 02:25:15 +0000
committerSND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2011-02-19 02:25:15 +0000
commit3fc56dbe4ad7e9deaeaef8c209a68e1de986f6fa (patch)
treec27c3a79fb402b0b3e47f23b434baddc4ce8a5c6 /macosx/plugins/Common/SDL/src/SDL.c
parentbc54761a4332b875e1962a21f2858db598fa7c18 (diff)
downloadpcsxr-3fc56dbe4ad7e9deaeaef8c209a68e1de986f6fa.tar.gz
-Reverted some changes to make the code build again on Tiger.
-Removed x86_64 from Deployment configuration. -macosx: Use SDL for sound plugin, removed Carbon backend. -(MaddTheSane)Fixed memory leaks (Patch #8427). git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@63548 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'macosx/plugins/Common/SDL/src/SDL.c')
-rw-r--r--macosx/plugins/Common/SDL/src/SDL.c168
1 files changed, 168 insertions, 0 deletions
diff --git a/macosx/plugins/Common/SDL/src/SDL.c b/macosx/plugins/Common/SDL/src/SDL.c
new file mode 100644
index 00000000..8347ef8a
--- /dev/null
+++ b/macosx/plugins/Common/SDL/src/SDL.c
@@ -0,0 +1,168 @@
+/*
+ SDL - Simple DirectMedia Layer
+ Copyright (C) 1997-2010 Sam Lantinga
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ Sam Lantinga
+ slouken@libsdl.org
+*/
+
+#include "SDL_config.h"
+
+#include <time.h>
+#include <errno.h>
+
+/* Initialization code for SDL */
+
+#include "SDL.h"
+#include "haptic/SDL_haptic_c.h"
+#include "joystick/SDL_joystick_c.h"
+
+/* The initialized subsystems */
+static Uint32 SDL_initialized = 0;
+
+int
+SDL_InitSubSystem(Uint32 flags)
+{
+#ifndef SDL_JOYSTICK_DISABLED
+ /* Initialize the joystick subsystem */
+ if ((flags & SDL_INIT_JOYSTICK) && !(SDL_initialized & SDL_INIT_JOYSTICK)) {
+ if (SDL_JoystickInit() < 0) {
+ return (-1);
+ }
+ SDL_initialized |= SDL_INIT_JOYSTICK;
+ }
+
+ /* Initialize the haptic subsystem */
+ if ((flags & SDL_INIT_HAPTIC) && !(SDL_initialized & SDL_INIT_HAPTIC)) {
+ if (SDL_HapticInit() < 0) {
+ return (-1);
+ }
+ SDL_initialized |= SDL_INIT_HAPTIC;
+ }
+#endif
+
+#ifndef SDL_AUDIO_DISABLED
+ /* Initialize the audio subsystem */
+ if ((flags & SDL_INIT_AUDIO) && !(SDL_initialized & SDL_INIT_AUDIO)) {
+ if (SDL_AudioInit(NULL) < 0) {
+ return (-1);
+ }
+ SDL_initialized |= SDL_INIT_AUDIO;
+ }
+#endif
+
+ return (0);
+}
+
+int
+SDL_Init(Uint32 flags)
+{
+ /* Clear the error message */
+ SDL_ClearError();
+
+ /* Initialize the desired subsystems */
+ if (SDL_InitSubSystem(flags) < 0) {
+ return (-1);
+ }
+
+ return (0);
+}
+
+void
+SDL_QuitSubSystem(Uint32 flags)
+{
+#ifndef SDL_JOYSTICK_DISABLED
+ /* Shut down requested initialized subsystems */
+ if ((flags & SDL_initialized & SDL_INIT_JOYSTICK)) {
+ SDL_JoystickQuit();
+ SDL_initialized &= ~SDL_INIT_JOYSTICK;
+ }
+
+ if ((flags & SDL_initialized & SDL_INIT_HAPTIC)) {
+ SDL_HapticQuit();
+ SDL_initialized &= ~SDL_INIT_HAPTIC;
+ }
+#endif
+
+#ifndef SDL_AUDIO_DISABLED
+ if ((flags & SDL_initialized & SDL_INIT_AUDIO)) {
+ SDL_AudioQuit();
+ SDL_initialized &= ~SDL_INIT_AUDIO;
+ }
+#endif
+}
+
+Uint32
+SDL_WasInit(Uint32 flags)
+{
+ if (!flags) {
+ flags = SDL_INIT_EVERYTHING;
+ }
+ return (SDL_initialized & flags);
+}
+
+void
+SDL_Quit(void)
+{
+ /* Quit all subsystems */
+ SDL_QuitSubSystem(SDL_INIT_EVERYTHING);
+}
+
+
+void
+SDL_Delay(Uint32 ms)
+{
+ int was_error;
+
+#if HAVE_NANOSLEEP
+ struct timespec elapsed, tv;
+#else
+ struct timeval tv;
+ Uint32 then, now, elapsed;
+#endif
+
+ /* Set the timeout interval */
+#if HAVE_NANOSLEEP
+ elapsed.tv_sec = ms / 1000;
+ elapsed.tv_nsec = (ms % 1000) * 1000000;
+#else
+ then = SDL_GetTicks();
+#endif
+ do {
+ errno = 0;
+
+#if HAVE_NANOSLEEP
+ tv.tv_sec = elapsed.tv_sec;
+ tv.tv_nsec = elapsed.tv_nsec;
+ was_error = nanosleep(&tv, &elapsed);
+#else
+ /* Calculate the time interval left (in case of interrupt) */
+ now = SDL_GetTicks();
+ elapsed = (now - then);
+ then = now;
+ if (elapsed >= ms) {
+ break;
+ }
+ ms -= elapsed;
+ tv.tv_sec = ms / 1000;
+ tv.tv_usec = (ms % 1000) * 1000;
+
+ was_error = select(0, NULL, NULL, NULL, &tv);
+#endif /* HAVE_NANOSLEEP */
+ } while (was_error && (errno == EINTR));
+}
+