From a11985c46d5eab5c61a1034005858286e6f3da3b Mon Sep 17 00:00:00 2001 From: cameron Date: Fri, 28 Apr 2017 00:24:57 +0100 Subject: RISCOS: Add RISC OS support --- backends/platform/sdl/module.mk | 6 ++ backends/platform/sdl/posix/posix-main.cpp | 2 +- backends/platform/sdl/riscos/riscos-main.cpp | 53 ++++++++++++++ backends/platform/sdl/riscos/riscos.cpp | 106 +++++++++++++++++++++++++++ backends/platform/sdl/riscos/riscos.h | 52 +++++++++++++ backends/platform/sdl/riscos/riscos.mk | 20 +++++ 6 files changed, 238 insertions(+), 1 deletion(-) create mode 100644 backends/platform/sdl/riscos/riscos-main.cpp create mode 100644 backends/platform/sdl/riscos/riscos.cpp create mode 100644 backends/platform/sdl/riscos/riscos.h create mode 100644 backends/platform/sdl/riscos/riscos.mk (limited to 'backends/platform') diff --git a/backends/platform/sdl/module.mk b/backends/platform/sdl/module.mk index 7fde04037f..bb11aaae97 100644 --- a/backends/platform/sdl/module.mk +++ b/backends/platform/sdl/module.mk @@ -31,6 +31,12 @@ MODULE_OBJS += \ amigaos/amigaos.o endif +ifdef RISCOS +MODULE_OBJS += \ + riscos/riscos-main.o \ + riscos/riscos.o +endif + ifdef PLAYSTATION3 MODULE_OBJS += \ ps3/ps3-main.o \ diff --git a/backends/platform/sdl/posix/posix-main.cpp b/backends/platform/sdl/posix/posix-main.cpp index 92354b273e..e378c37849 100644 --- a/backends/platform/sdl/posix/posix-main.cpp +++ b/backends/platform/sdl/posix/posix-main.cpp @@ -22,7 +22,7 @@ #include "common/scummsys.h" -#if defined(POSIX) && !defined(MACOSX) && !defined(SAMSUNGTV) && !defined(MAEMO) && !defined(WEBOS) && !defined(LINUXMOTO) && !defined(GPH_DEVICE) && !defined(GP2X) && !defined(DINGUX) && !defined(OPENPANDORA) && !defined(PLAYSTATION3) && !defined(PSP2) && !defined(ANDROIDSDL) +#if defined(POSIX) && !defined(MACOSX) && !defined(SAMSUNGTV) && !defined(MAEMO) && !defined(WEBOS) && !defined(LINUXMOTO) && !defined(GPH_DEVICE) && !defined(GP2X) && !defined(DINGUX) && !defined(OPENPANDORA) && !defined(PLAYSTATION3) && !defined(PSP2) && !defined(ANDROIDSDL) && !defined(RISCOS) #include "backends/platform/sdl/posix/posix.h" #include "backends/plugins/sdl/sdl-provider.h" diff --git a/backends/platform/sdl/riscos/riscos-main.cpp b/backends/platform/sdl/riscos/riscos-main.cpp new file mode 100644 index 0000000000..2ff8294c1a --- /dev/null +++ b/backends/platform/sdl/riscos/riscos-main.cpp @@ -0,0 +1,53 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * 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. + * + */ + +#include "common/scummsys.h" + +#if defined(RISCOS) + +#include "backends/platform/sdl/riscos/riscos.h" +#include "backends/plugins/sdl/sdl-provider.h" +#include "base/main.h" + +int main(int argc, char *argv[]) { + + // Create our OSystem instance + g_system = new OSystem_RISCOS(); + assert(g_system); + + // Pre initialize the backend + ((OSystem_RISCOS *)g_system)->init(); + +#ifdef DYNAMIC_MODULES + PluginManager::instance().addPluginProvider(new SDLPluginProvider()); +#endif + + // Invoke the actual ScummVM main entry point + int res = scummvm_main(argc, argv); + + // Free OSystem + delete (OSystem_RISCOS *)g_system; + + return res; +} + +#endif diff --git a/backends/platform/sdl/riscos/riscos.cpp b/backends/platform/sdl/riscos/riscos.cpp new file mode 100644 index 0000000000..2c761d0f4c --- /dev/null +++ b/backends/platform/sdl/riscos/riscos.cpp @@ -0,0 +1,106 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * 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. + * + */ + +#define FORBIDDEN_SYMBOL_EXCEPTION_unistd_h + +#include "common/scummsys.h" + +#ifdef RISCOS + +#include "backends/platform/sdl/riscos/riscos.h" +#include "backends/saves/default/default-saves.h" +#include "backends/fs/posix/posix-fs-factory.h" +#include "backends/fs/posix/posix-fs.h" + +#include +#include + +#ifndef URI_Dispatch +#define URI_Dispatch 0x4e381 +#endif + +void OSystem_RISCOS::init() { + // Initialze File System Factory + _fsFactory = new POSIXFilesystemFactory(); + + // Invoke parent implementation of this method + OSystem_SDL::init(); +} + +void OSystem_RISCOS::initBackend() { + // Create the savefile manager + if (_savefileManager == 0) { + Common::String savePath = "//ScummVM/Saves"; + if (Posix::assureDirectoryExists(savePath)) + _savefileManager = new DefaultSaveFileManager(savePath); + } + + // Invoke parent implementation of this method + OSystem_SDL::initBackend(); +} + +bool OSystem_RISCOS::hasFeature(Feature f) { + if (f == kFeatureOpenUrl) + return true; + + return OSystem_SDL::hasFeature(f); +} + +bool OSystem_RISCOS::openUrl(const Common::String &url) { + int flags; + if (_swix(URI_Dispatch, _INR(0,2)|_OUT(0), 0, url.c_str(), 0, &flags) != NULL) { + warning("openUrl() (RISCOS) failed to open URL"); + return false; + } + if ((flags & 1) == 1) { + warning("openUrl() (RISCOS) failed to open URL"); + return false; + } + return true; +} + +Common::String OSystem_RISCOS::getDefaultConfigFileName() { + return "//ScummVM/scummvm.ini"; +} + +Common::WriteStream *OSystem_RISCOS::createLogFile() { + // Start out by resetting _logFilePath, so that in case + // of a failure, we know that no log file is open. + _logFilePath.clear(); + + Common::String logFile = "//ScummVM/Logs"; + + if (!Posix::assureDirectoryExists(logFile)) { + return 0; + } + + logFile += "/scummvm.log"; + + Common::FSNode file(logFile); + Common::WriteStream *stream = file.createWriteStream(); + if (stream) + _logFilePath = logFile; + return stream; +} + +#endif + diff --git a/backends/platform/sdl/riscos/riscos.h b/backends/platform/sdl/riscos/riscos.h new file mode 100644 index 0000000000..fb23a3e6e3 --- /dev/null +++ b/backends/platform/sdl/riscos/riscos.h @@ -0,0 +1,52 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * 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. + * + */ + +#ifndef PLATFORM_SDL_RISCOS_H +#define PLATFORM_SDL_RISCOS_H + +#include "backends/platform/sdl/sdl.h" + +class OSystem_RISCOS : public OSystem_SDL { +public: + virtual void init(); + virtual void initBackend(); + + virtual bool hasFeature(Feature f); + + virtual bool openUrl(const Common::String &url); + +protected: + /** + * The path of the currently open log file, if any. + * + * @note This is currently a string and not an FSNode for simplicity; + * e.g. we don't need to include fs.h here, and currently the + * only use of this value is to use it to open the log file in an + * editor; for that, we need it only as a string anyway. + */ + Common::String _logFilePath; + + virtual Common::String getDefaultConfigFileName(); + virtual Common::WriteStream *createLogFile(); +}; + +#endif diff --git a/backends/platform/sdl/riscos/riscos.mk b/backends/platform/sdl/riscos/riscos.mk new file mode 100644 index 0000000000..4b631016b7 --- /dev/null +++ b/backends/platform/sdl/riscos/riscos.mk @@ -0,0 +1,20 @@ +# Special target to create an RISC OS snapshot installation +riscosdist: $(EXECUTABLE) + mkdir -p !ScummVM + elf2aif $(EXECUTABLE) !ScummVM/$(EXECUTABLE),ff8 + cp ${srcdir}/dists/riscos/!Boot,feb !ScummVM/!Boot,feb + cp ${srcdir}/dists/riscos/!Run,feb !ScummVM/!Run,feb + cp ${srcdir}/dists/riscos/!Sprites,ff9 !ScummVM/!Sprites,ff9 + cp ${srcdir}/dists/riscos/!Sprites11,ff9 !ScummVM/!Sprites11,ff9 + mkdir -p !ScummVM/data + cp $(DIST_FILES_THEMES) !ScummVM/data/ +ifdef DIST_FILES_ENGINEDATA + cp $(DIST_FILES_ENGINEDATA) !ScummVM/data/ +endif +ifdef DYNAMIC_MODULES + mkdir -p !ScummVM/plugins + cp $(PLUGINS) !ScummVM/plugins/ +endif + mkdir -p !ScummVM/docs + cp ${srcdir}/dists/riscos/!Help,feb !ScummVM/!Help,feb + cp $(DIST_FILES_DOCS) !ScummVM/docs \ No newline at end of file -- cgit v1.2.3