aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Horn2006-06-24 09:53:45 +0000
committerMax Horn2006-06-24 09:53:45 +0000
commitc9fd9c4878f95f4ae463bc136156634577e6f444 (patch)
tree8e370f6b5c188ba37d765eca5e0856503b53bed3
parent75628fe9d7fa636da792d278b36396c3934ddf0e (diff)
downloadscummvm-rg350-c9fd9c4878f95f4ae463bc136156634577e6f444.tar.gz
scummvm-rg350-c9fd9c4878f95f4ae463bc136156634577e6f444.tar.bz2
scummvm-rg350-c9fd9c4878f95f4ae463bc136156634577e6f444.zip
Added 'timer' backend module, based on the existing TimerManager code (work in progress)
svn-id: r23279
-rw-r--r--backends/module.mk3
-rw-r--r--backends/timer/default/default-timer.cpp (renamed from common/timer.cpp)39
-rw-r--r--backends/timer/default/default-timer.h59
-rw-r--r--base/main.cpp4
-rw-r--r--common/module.mk1
-rw-r--r--common/timer.h38
6 files changed, 85 insertions, 59 deletions
diff --git a/backends/module.mk b/backends/module.mk
index 54eb0fbe83..5522f131a7 100644
--- a/backends/module.mk
+++ b/backends/module.mk
@@ -12,7 +12,8 @@ MODULE_OBJS := \
midi/morphos.o \
midi/quicktime.o \
midi/seq.o \
- midi/windows.o
+ midi/windows.o \
+ timer/default/default-timer.o
# Include common rules
include $(srcdir)/rules.mk
diff --git a/common/timer.cpp b/backends/timer/default/default-timer.cpp
index 8ac033cf03..907c715a07 100644
--- a/common/timer.cpp
+++ b/backends/timer/default/default-timer.cpp
@@ -19,24 +19,25 @@
* $Id$
*/
-#ifndef __MORPHOS__
-
#include "common/stdafx.h"
#include "common/scummsys.h"
-#include "common/timer.h"
+#include "backends/timer/default/default-timer.h"
#include "common/util.h"
#include "common/system.h"
namespace Common {
-
+// FIXME: Hack: This global variable shouldn't be declared here; in fact it
+// probably shouldn't be declared at all but rather a different method to
+// query the TimerManager object should be invented.
TimerManager *g_timer = NULL;
+}
-TimerManager::TimerManager(OSystem *system) :
+DefaultTimerManager::DefaultTimerManager(OSystem *system) :
_system(system),
_timerHandler(0),
_lastTime(0) {
- g_timer = this;
+ Common::g_timer = this;
for (int i = 0; i < MAX_TIMERS; i++) {
_timerSlots[i].procedure = NULL;
@@ -51,14 +52,14 @@ TimerManager::TimerManager(OSystem *system) :
}
-TimerManager::~TimerManager() {
+DefaultTimerManager::~DefaultTimerManager() {
// Remove the timer callback.
// Note: backends *must* gurantee that after this method call returns,
// the handler is not in use anymore; else race condtions could occur.
_system->setTimerCallback(0, 0);
{
- StackLock lock(_mutex);
+ Common::StackLock lock(_mutex);
for (int i = 0; i < MAX_TIMERS; i++) {
_timerSlots[i].procedure = NULL;
_timerSlots[i].interval = 0;
@@ -67,14 +68,14 @@ TimerManager::~TimerManager() {
}
}
-int TimerManager::timer_handler(int t) {
- if (g_timer)
- return g_timer->handler(t);
+int DefaultTimerManager::timer_handler(int t) {
+ if (Common::g_timer)
+ return ((DefaultTimerManager *)Common::g_timer)->handler(t);
return 0;
}
-int TimerManager::handler(int t) {
- StackLock lock(_mutex);
+int DefaultTimerManager::handler(int t) {
+ Common::StackLock lock(_mutex);
uint32 interval, l;
_lastTime = _thisTime;
@@ -97,9 +98,9 @@ int TimerManager::handler(int t) {
return t;
}
-bool TimerManager::installTimerProc(TimerProc procedure, int32 interval, void *refCon) {
+bool DefaultTimerManager::installTimerProc(TimerProc procedure, int32 interval, void *refCon) {
assert(interval > 0);
- StackLock lock(_mutex);
+ Common::StackLock lock(_mutex);
for (int l = 0; l < MAX_TIMERS; l++) {
if (!_timerSlots[l].procedure) {
@@ -115,8 +116,8 @@ bool TimerManager::installTimerProc(TimerProc procedure, int32 interval, void *r
return false;
}
-void TimerManager::removeTimerProc(TimerProc procedure) {
- StackLock lock(_mutex);
+void DefaultTimerManager::removeTimerProc(TimerProc procedure) {
+ Common::StackLock lock(_mutex);
for (int l = 0; l < MAX_TIMERS; l++) {
if (_timerSlots[l].procedure == procedure) {
@@ -127,7 +128,3 @@ void TimerManager::removeTimerProc(TimerProc procedure) {
}
}
}
-
-} // End of namespace Common
-
-#endif
diff --git a/backends/timer/default/default-timer.h b/backends/timer/default/default-timer.h
new file mode 100644
index 0000000000..12779cc59c
--- /dev/null
+++ b/backends/timer/default/default-timer.h
@@ -0,0 +1,59 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2002-2006 The ScummVM project
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ */
+
+#ifndef BACKENDS_TIMER_DEFAULT_H
+#define BACKENDS_TIMER_DEFAULT_H
+
+#include "common/timer.h"
+#include "common/mutex.h"
+
+class OSystem;
+
+class DefaultTimerManager : public Common::TimerManager {
+private:
+ enum {
+ MAX_TIMERS = 8
+ };
+ OSystem *_system;
+ Common::Mutex _mutex;
+ void *_timerHandler;
+ int32 _thisTime;
+ int32 _lastTime;
+
+ struct TimerSlots {
+ TimerProc procedure;
+ int32 interval;
+ int32 counter;
+ void *refCon;
+ } _timerSlots[MAX_TIMERS];
+
+public:
+ DefaultTimerManager(OSystem *system);
+ ~DefaultTimerManager();
+ bool installTimerProc(TimerProc proc, int32 interval, void *refCon);
+ void removeTimerProc(TimerProc proc);
+
+protected:
+ static int timer_handler(int t);
+ int handler(int t);
+};
+
+#endif
diff --git a/base/main.cpp b/base/main.cpp
index e65b589750..7e6062aba7 100644
--- a/base/main.cpp
+++ b/base/main.cpp
@@ -34,6 +34,8 @@
#include "base/commandLine.h"
#include "base/plugins.h"
#include "base/version.h"
+
+#include "backends/timer/default/default-timer.h"
#include "common/config-manager.h"
#include "common/file.h"
#include "common/fs.h"
@@ -317,7 +319,7 @@ extern "C" int scummvm_main(int argc, char *argv[]) {
system.initBackend();
// Create the timer services
- Common::g_timer = new Common::TimerManager(&system);
+ Common::g_timer = new DefaultTimerManager(&system);
// Set initial window caption
system.setWindowCaption(gScummVMFullVersion);
diff --git a/common/module.mk b/common/module.mk
index 9b82ebd626..b47d2afda4 100644
--- a/common/module.mk
+++ b/common/module.mk
@@ -10,7 +10,6 @@ MODULE_OBJS := \
mutex.o \
str.o \
stream.o \
- timer.o \
util.o \
savefile.o \
system.o \
diff --git a/common/timer.h b/common/timer.h
index e0023cd2aa..a870784bf4 100644
--- a/common/timer.h
+++ b/common/timer.h
@@ -23,16 +23,6 @@
#define COMMON_TIMER_H
#include "common/scummsys.h"
-#include "common/mutex.h"
-
-#define MAX_TIMERS 8
-
-
-#ifdef __MORPHOS__
-#include "morphos_timer.h"
-#else
-
-class OSystem;
namespace Common {
@@ -40,23 +30,7 @@ class TimerManager {
public:
typedef void (*TimerProc)(void *refCon);
-private:
- OSystem *_system;
- Mutex _mutex;
- void *_timerHandler;
- int32 _thisTime;
- int32 _lastTime;
-
- struct TimerSlots {
- TimerProc procedure;
- int32 interval;
- int32 counter;
- void *refCon;
- } _timerSlots[MAX_TIMERS];
-
-public:
- TimerManager(OSystem *system);
- ~TimerManager();
+ virtual ~TimerManager() {}
/**
* Install a new timer callback. It will from now be called every interval microseconds.
@@ -70,16 +44,12 @@ public:
* @param refCon an arbitrary void pointer; will be passed to the timer callback
* @return true if the timer was installed successfully, false otherwise
*/
- bool installTimerProc(TimerProc proc, int32 interval, void *refCon);
+ virtual bool installTimerProc(TimerProc proc, int32 interval, void *refCon) = 0;
/**
* Remove the given timer callback. It will not be invoked anymore.
*/
- void removeTimerProc(TimerProc proc);
-
-protected:
- static int timer_handler(int t);
- int handler(int t);
+ virtual void removeTimerProc(TimerProc proc) = 0;
};
extern TimerManager *g_timer;
@@ -87,5 +57,3 @@ extern TimerManager *g_timer;
} // End of namespace Common
#endif
-
-#endif