diff options
author | Jordi Vilalta Prat | 2009-02-16 16:23:48 +0000 |
---|---|---|
committer | Jordi Vilalta Prat | 2009-02-16 16:23:48 +0000 |
commit | c8a3a05a5d83758582e0b89c4646476c535f84b0 (patch) | |
tree | 82742edd88e11afe079087d8c05394e3b20d38a9 /engines/sci/sfx/timer | |
parent | ee1cae3ebcad65ac30c2ce84853b3c07ce4568f7 (diff) | |
download | scummvm-rg350-c8a3a05a5d83758582e0b89c4646476c535f84b0.tar.gz scummvm-rg350-c8a3a05a5d83758582e0b89c4646476c535f84b0.tar.bz2 scummvm-rg350-c8a3a05a5d83758582e0b89c4646476c535f84b0.zip |
SCI: Changed pcm_device and timer "driver" functionality to use directly the ScummVM modules
svn-id: r38373
Diffstat (limited to 'engines/sci/sfx/timer')
-rw-r--r-- | engines/sci/sfx/timer/pthread.cpp | 100 | ||||
-rw-r--r-- | engines/sci/sfx/timer/sigalrm.cpp | 150 | ||||
-rw-r--r-- | engines/sci/sfx/timer/timer_scummvm.cpp | 54 | ||||
-rw-r--r-- | engines/sci/sfx/timer/timers.cpp | 52 |
4 files changed, 0 insertions, 356 deletions
diff --git a/engines/sci/sfx/timer/pthread.cpp b/engines/sci/sfx/timer/pthread.cpp deleted file mode 100644 index bcef9639c4..0000000000 --- a/engines/sci/sfx/timer/pthread.cpp +++ /dev/null @@ -1,100 +0,0 @@ -/*************************************************************************** - pthread.c Copyright (C) 2005 Walter van Niftrik - - - This program may be modified and copied freely according to the terms of - the GNU general public license (GPL), as long as the above copyright - notice and the licensing information contained herein are preserved. - - Please refer to www.gnu.org for licensing details. - - This work is provided AS IS, without warranty of any kind, expressed or - implied, including but not limited to the warranties of merchantibility, - noninfringement, and fitness for a specific purpose. The author will not - be held liable for any damage caused by this work or derivatives of it. - - By using this source code, you agree to the licensing terms as stated - above. - - - Please contact the maintainer for bug reports or inquiries. - - Current Maintainer: - - Walter van Niftrik <w.f.b.w.v.niftrik@stud.tue.nl> - -***************************************************************************/ - -#include <sfx_timer.h> -#include <pthread.h> -#include <unistd.h> - -/* Timer frequency in hertz */ -#define FREQ 60 - -/* Delay in ms */ -#define DELAY (1000 / FREQ) - -static void (*callback)(void *) = NULL; -static void *callback_data = NULL; -pthread_t thread; -volatile static int thread_run; - -static void * -timer_thread(void *arg) { - while (thread_run) { - if (callback) - callback(callback_data); - - usleep(DELAY * 1000); - } - - return NULL; -} - -static int -set_option(char *name, char *value) { - return SFX_ERROR; -} - -static int -init(void (*func)(void *), void *data) { - if (callback) { - fprintf(stderr, "Error: Attempt to initialize pthread timer more than once\n"); - return SFX_ERROR; - } - - if (!func) { - fprintf(stderr, "Error: Attempt to initialize pthread timer w/o callback\n"); - return SFX_ERROR; - } - - callback = func; - callback_data = data; - - thread_run = 1; - if (pthread_create(&thread, NULL, timer_thread, NULL)) { - fprintf(stderr, "Error: Could not create thread.\n"); - return SFX_ERROR; - } - - return SFX_OK; -} - -static int -stop(void) { - thread_run = 0; - pthread_join(thread, NULL); - - return SFX_OK; -} - -sfx_timer_t sfx_timer_pthread = { - "pthread", - "0.1", - DELAY, - 0, - &set_option, - &init, - &stop -}; diff --git a/engines/sci/sfx/timer/sigalrm.cpp b/engines/sci/sfx/timer/sigalrm.cpp deleted file mode 100644 index 2bab402d14..0000000000 --- a/engines/sci/sfx/timer/sigalrm.cpp +++ /dev/null @@ -1,150 +0,0 @@ -/*************************************************************************** - sigalrm.c Copyright (C) 2002 Christoph Reichenbach - - - This program may be modified and copied freely according to the terms of - the GNU general public license (GPL), as long as the above copyright - notice and the licensing information contained herein are preserved. - - Please refer to www.gnu.org for licensing details. - - This work is provided AS IS, without warranty of any kind, expressed or - implied, including but not limited to the warranties of merchantibility, - noninfringement, and fitness for a specific purpose. The author will not - be held liable for any damage caused by this work or derivatives of it. - - By using this source code, you agree to the licensing terms as stated - above. - - - Please contact the maintainer for bug reports or inquiries. - - Current Maintainer: - - Christoph Reichenbach (CR) <jameson@linuxgames.com> - -***************************************************************************/ - -#include <sfx_timer.h> - -#ifdef HAVE_SETITIMER - -#include <sys/time.h> -#include <signal.h> -#include <stdio.h> - -#ifdef HAVE_PTHREAD -#include <pthread.h> -#define sigprocmask pthread_sigmask -#endif - -static void (*sig_callback)(void *) = NULL; -static void *sig_callback_data = NULL; -static sigset_t current_sigset; - -static void -timer_handler(int i) { - if (sig_callback) - sig_callback(sig_callback_data); -} - -static int -sigalrm_set_option(char *name, char *value) { - return SFX_ERROR; -} - - -static int -sigalrm_start(void) { - struct itimerval itimer; - - itimer.it_value.tv_sec = 0; - itimer.it_value.tv_usec = 1000000 / 60; - itimer.it_interval = itimer.it_value; - - signal(SIGALRM, timer_handler); /* Re-instate timer handler, to make sure */ - setitimer(ITIMER_REAL, &itimer, NULL); - - return SFX_OK; -} - - -static int -sigalrm_init(void (*callback)(void *), void *data) { - if (sig_callback) { - fprintf(stderr, "Error: Attempt to initialize sigalrm timer more than once\n"); - return SFX_ERROR; - } - - if (!callback) { - fprintf(stderr, "Error: Attempt to initialize sigalrm timer w/o callback\n"); - return SFX_ERROR; - } - - sig_callback = callback; - sig_callback_data = data; - - sigalrm_start(); - - sigemptyset(¤t_sigset); - sigaddset(¤t_sigset, SIGALRM); - - return SFX_OK; -} - - -static int -sigalrm_stop(void) { - struct itimerval itimer; - - if (!sig_callback) { - fprintf(stderr, "Error: Attempt to stop sigalrm timer when not running\n"); - return SFX_ERROR; - } - - itimer.it_value.tv_sec = 0; - itimer.it_value.tv_usec = 0; - itimer.it_interval = itimer.it_value; - - setitimer(ITIMER_REAL, &itimer, NULL); /* Stop timer */ - signal(SIGALRM, SIG_DFL); - - return SFX_OK; -} - - -static int -sigalrm_block(void) { - if (sigprocmask(SIG_BLOCK, ¤t_sigset, NULL) != 0) { - fprintf(stderr, "Error: Failed to block sigalrm\n"); - return SFX_ERROR; - } - - return SFX_OK; -} - - -static int -sigalrm_unblock(void) { - if (sigprocmask(SIG_UNBLOCK, ¤t_sigset, NULL) != 0) { - fprintf(stderr, "Error: Failed to unblock sigalrm\n"); - return SFX_ERROR; - } - - return SFX_OK; -} - - -sfx_timer_t sfx_timer_sigalrm = { - "sigalrm", - "0.1", - 17, /* 1000 / 60 */ - 0, - &sigalrm_set_option, - &sigalrm_init, - &sigalrm_stop, - &sigalrm_block, - &sigalrm_unblock -}; - -#endif /* HAVE_SETITIMER */ diff --git a/engines/sci/sfx/timer/timer_scummvm.cpp b/engines/sci/sfx/timer/timer_scummvm.cpp deleted file mode 100644 index beb57aef6b..0000000000 --- a/engines/sci/sfx/timer/timer_scummvm.cpp +++ /dev/null @@ -1,54 +0,0 @@ -#include "common/timer.h" -#include "engines/engine.h" -#include "sci/include/sfx_timer.h" - - -#define FREQ 60 -#define DELAY (1000000 / FREQ) - -typedef void (*scummvm_timer_callback_t)(void *); -static scummvm_timer_callback_t scummvm_timer_callback = NULL; -static void *scummvm_timer_callback_data = NULL; -extern ::Engine *g_engine; - -void scummvm_timer_update_internal(void *ptr) { - if (scummvm_timer_callback) - scummvm_timer_callback(scummvm_timer_callback_data); -} - -int scummvm_timer_start(void (*func)(void *), void *data) { - if (scummvm_timer_callback) { - fprintf(stderr, - "Error: Attempt to initialize gametick timer more than once\n"); - return SFX_ERROR; - } - - if (!func) { - fprintf(stderr, - "Error: Attempt to initialize gametick timer w/o callback\n"); - return SFX_ERROR; - } - - scummvm_timer_callback = func; - scummvm_timer_callback_data = data; - - ::g_engine->getTimerManager()->installTimerProc(&scummvm_timer_update_internal, DELAY, NULL); - return SFX_OK; -} - -int scummvm_timer_stop() { - scummvm_timer_callback = NULL; - return SFX_OK; -} - - -sfx_timer_t sfx_timer_scummvm = { - "ScummVM", - "0.1", - DELAY / 1000, 0, - NULL, - &scummvm_timer_start, - &scummvm_timer_stop, - 0, - 0 -}; diff --git a/engines/sci/sfx/timer/timers.cpp b/engines/sci/sfx/timer/timers.cpp deleted file mode 100644 index 82a1d11d6c..0000000000 --- a/engines/sci/sfx/timer/timers.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/*************************************************************************** - timers.c Copyright (C) 2002 Christoph Reichenbach - - - This program may be modified and copied freely according to the terms of - the GNU general public license (GPL), as long as the above copyright - notice and the licensing information contained herein are preserved. - - Please refer to www.gnu.org for licensing details. - - This work is provided AS IS, without warranty of any kind, expressed or - implied, including but not limited to the warranties of merchantibility, - noninfringement, and fitness for a specific purpose. The author will not - be held liable for any damage caused by this work or derivatives of it. - - By using this source code, you agree to the licensing terms as stated - above. - - - Please contact the maintainer for bug reports or inquiries. - - Current Maintainer: - - Christoph Reichenbach (CR) <jameson@linuxgames.com> - -***************************************************************************/ - -#include "sci/include/sfx_timer.h" -#include "sci/include/resource.h" - -extern sfx_timer_t sfx_timer_scummvm; - -sfx_timer_t *sfx_timers[] = { - &sfx_timer_scummvm, - NULL -}; - - -sfx_timer_t * -sfx_find_timer(char *name) { - if (!name) { - /* Policies go here */ - return sfx_timers[0]; - } else { - int n = 0; - while (sfx_timers[n] - && scumm_stricmp(sfx_timers[n]->name, name)) - ++n; - - return sfx_timers[n]; - } -} |