From 4bb82a8dae26e8bd56a8bc943c97959d37fb36ea Mon Sep 17 00:00:00 2001 From: lolbot-iichan Date: Sat, 29 Jun 2019 18:01:39 +0300 Subject: WINTERMUTE: Add dummy implementation of Directory global object Source: http://docs.dead-code.org/wme/generated/scripting_ref_directory.html --- .../wintermute/base/scriptables/script_engine.cpp | 7 + .../base/scriptables/script_ext_directory.cpp | 170 +++++++++++++++++++++ .../base/scriptables/script_ext_directory.h | 48 ++++++ 3 files changed, 225 insertions(+) create mode 100644 engines/wintermute/base/scriptables/script_ext_directory.cpp create mode 100644 engines/wintermute/base/scriptables/script_ext_directory.h (limited to 'engines/wintermute/base/scriptables') 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 -- cgit v1.2.3