diff options
author | lolbot-iichan | 2019-06-29 18:01:39 +0300 |
---|---|---|
committer | Filippos Karapetis | 2019-07-16 20:24:42 +0300 |
commit | 4bb82a8dae26e8bd56a8bc943c97959d37fb36ea (patch) | |
tree | d1c7f466df3cfbcf38a7de0b3754397467e14dd1 /engines/wintermute/base/scriptables | |
parent | 64406b09a8f6bdf6f9dd63d3ab9fcd334739550d (diff) | |
download | scummvm-rg350-4bb82a8dae26e8bd56a8bc943c97959d37fb36ea.tar.gz scummvm-rg350-4bb82a8dae26e8bd56a8bc943c97959d37fb36ea.tar.bz2 scummvm-rg350-4bb82a8dae26e8bd56a8bc943c97959d37fb36ea.zip |
WINTERMUTE: Add dummy implementation of Directory global object
Source:
http://docs.dead-code.org/wme/generated/scripting_ref_directory.html
Diffstat (limited to 'engines/wintermute/base/scriptables')
3 files changed, 225 insertions, 0 deletions
diff --git a/engines/wintermute/base/scriptables/script_engine.cpp b/engines/wintermute/base/scriptables/script_engine.cpp index 0e16006d46..3a62d2e644 100644 --- a/engines/wintermute/base/scriptables/script_engine.cpp +++ b/engines/wintermute/base/scriptables/script_engine.cpp @@ -67,6 +67,13 @@ ScEngine::ScEngine(BaseGame *inGame) : BaseClass(inGame) { _globals->setProp("Math", &val); } + // register 'Directory' as global variable + if (!_globals->propExists("Directory")) { + ScValue val(_gameRef); + val.setNative(_gameRef->_directoryClass, true); + _globals->setProp("Directory", &val); + } + // prepare script cache for (int i = 0; i < MAX_CACHED_SCRIPTS; i++) { _cachedScripts[i] = nullptr; diff --git a/engines/wintermute/base/scriptables/script_ext_directory.cpp b/engines/wintermute/base/scriptables/script_ext_directory.cpp new file mode 100644 index 0000000000..2926edb31f --- /dev/null +++ b/engines/wintermute/base/scriptables/script_ext_directory.cpp @@ -0,0 +1,170 @@ +/* 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. + * + */ + +/* + * This file is based on WME Lite. + * http://dead-code.org/redir.php?target=wmelite + * Copyright (c) 2011 Jan Nedoma + */ + +#include "engines/wintermute/base/scriptables/script_ext_directory.h" +#include "engines/wintermute/base/scriptables/script_stack.h" +#include "engines/wintermute/base/scriptables/script_value.h" +#include "engines/wintermute/persistent.h" + +namespace Wintermute { + +////////////////////////////////////////////////////////////////////// +// Construction/Destruction +////////////////////////////////////////////////////////////////////// + + +IMPLEMENT_PERSISTENT(SXDirectory, true) + +BaseScriptable *makeSXDirectory(BaseGame *inGame) { + return new SXDirectory(inGame); +} + +////////////////////////////////////////////////////////////////////////// +SXDirectory::SXDirectory(BaseGame *inGame) : BaseScriptable(inGame) { + +} + + +////////////////////////////////////////////////////////////////////////// +SXDirectory::~SXDirectory() { + +} + + +////////////////////////////////////////////////////////////////////////// +bool SXDirectory::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) { + ////////////////////////////////////////////////////////////////////////// + // Create + ////////////////////////////////////////////////////////////////////////// + if (strcmp(name, "Create") == 0) { + stack->correctParams(1); + const char *path = stack->pop()->getString(); + + warning("Directory.Create is not implemented! Returning false..."); + + stack->pushBool(false); + return STATUS_OK; + } + + ////////////////////////////////////////////////////////////////////////// + // Delete + ////////////////////////////////////////////////////////////////////////// + else if (strcmp(name, "Delete") == 0) { + stack->correctParams(1); + const char *path = stack->pop()->getString(); + + warning("Directory.Delete is not implemented! Returning false..."); + + stack->pushBool(false); + return STATUS_OK; + } + + ////////////////////////////////////////////////////////////////////////// + // GetFiles / GetDirectories + ////////////////////////////////////////////////////////////////////////// + else if (strcmp(name, "GetFiles") == 0 || strcmp(name, "GetDirectories") == 0) { + stack->correctParams(2); + const char *path = stack->pop()->getString(); + const char *mask = stack->pop()->getString(); + + stack->pushInt(0); + BaseScriptable *array = makeSXArray(_gameRef, stack); + + warning("Directory.%s is not implemented! Returning empty array...", name); + + stack->pushNative(array, false); + return STATUS_OK; + } + + ////////////////////////////////////////////////////////////////////////// + // GetDrives + ////////////////////////////////////////////////////////////////////////// + else if (strcmp(name, "GetDrives") == 0) { + stack->correctParams(0); + + warning("Directory.GetDrives is not implemented! Returning empty array..."); + + stack->pushInt(0); + stack->pushNative(makeSXArray(_gameRef, stack), false); + return STATUS_OK; + } else { + return STATUS_FAILED; + } +} + + +////////////////////////////////////////////////////////////////////////// +ScValue *SXDirectory::scGetProperty(const Common::String &name) { + _scValue->setNULL(); + + ////////////////////////////////////////////////////////////////////////// + // Type + ////////////////////////////////////////////////////////////////////////// + if (name == "Type") { + _scValue->setString("directory"); + return _scValue; + } + + ////////////////////////////////////////////////////////////////////////// + // PathSeparator + ////////////////////////////////////////////////////////////////////////// + else if (name == "PathSeparator") { + _scValue->setString("\\"); + return _scValue; + } + + ////////////////////////////////////////////////////////////////////////// + // CurrentDirectory + ////////////////////////////////////////////////////////////////////////// + else if (name == "CurrentDirectory") { + warning("Directory.CurrentDirectory is not implemented! Returning 'saves'..."); + _scValue->setString(""); // See also: BaseGame::scGetProperty("SaveDirectory") + return _scValue; + } + + ////////////////////////////////////////////////////////////////////////// + // TempDirectory + ////////////////////////////////////////////////////////////////////////// + else if (name == "TempDirectory") { + warning("Directory.TempDirectory is not implemented! Returning 'saves'..."); + _scValue->setString("temp"); // See also: BaseGame::scGetProperty("SaveDirectory") + return _scValue; + } else { + return _scValue; + } +} + + +////////////////////////////////////////////////////////////////////////// +bool SXDirectory::persist(BasePersistenceManager *persistMgr) { + + BaseScriptable::persist(persistMgr); + return STATUS_OK; +} + +} // End of namespace Wintermute diff --git a/engines/wintermute/base/scriptables/script_ext_directory.h b/engines/wintermute/base/scriptables/script_ext_directory.h new file mode 100644 index 0000000000..e29c3ffd19 --- /dev/null +++ b/engines/wintermute/base/scriptables/script_ext_directory.h @@ -0,0 +1,48 @@ +/* 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. + * + */ + +/* + * This file is based on WME Lite. + * http://dead-code.org/redir.php?target=wmelite + * Copyright (c) 2011 Jan Nedoma + */ + +#ifndef WINTERMUTE_SXDIRECTORY_H +#define WINTERMUTE_SXDIRECTORY_H + + +#include "engines/wintermute/base/base_scriptable.h" + +namespace Wintermute { + +class SXDirectory : public BaseScriptable { +public: + DECLARE_PERSISTENT(SXDirectory, BaseScriptable) + SXDirectory(BaseGame *inGame); + virtual ~SXDirectory(); + virtual ScValue *scGetProperty(const Common::String &name); + virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name); +}; + +} // End of namespace Wintermute + +#endif |