This is an automated email from the git hooks/post-receive script. mgilbert pushed a commit to branch master in repository deng.
commit b6fef3a9dd034c6eec7246172e3ed010ce8b1304 Author: Michael Gilbert <[email protected]> Date: Sun Jan 3 01:26:00 2016 +0000 import upstream 1.15.7 --- doomsday/api/dd_version.h | 4 +- doomsday/build/scripts/packres.py | 1 + doomsday/client/net.dengine.client.pack/Info.dei | 2 +- .../net.dengine.client.pack/defaultstyle.pack/Info | 2 +- .../net.dengine.client.pack/renderer.pack/Info | 2 +- .../renderer.pack/lensflares.pack/Info | 2 +- doomsday/client/src/resource/resourcesystem.cpp | 2 +- .../client/src/ui/dialogs/vrsettingsdialog.cpp | 6 +- doomsday/doc/output/doomsday.6 | 2 +- doomsday/doc/readme/readme.ame | 2 +- doomsday/doc/server/server.ame | 2 +- doomsday/doc/shell-text/shell-text.ame | 2 +- doomsday/libappfw/appfw.doxy | 2 +- doomsday/libappfw/include/de/vr/oculusrift.h | 12 +- doomsday/libappfw/src/vr/oculusrift.cpp | 15 +- doomsday/libcore/include/de/data/reader.h | 4 +- doomsday/libcore/include/de/libcore.h | 2 +- doomsday/libcore/include/de/net/packet.h | 6 +- doomsday/libcore/net.dengine.stdlib.pack/Info | 2 +- doomsday/libcore/src/core/log.cpp | 2 +- doomsday/libcore/src/data/archive.cpp | 8 +- doomsday/libcore/src/data/record.cpp | 4 +- doomsday/libcore/src/data/value.cpp | 2 +- doomsday/libcore/src/data/variable.cpp | 2 +- doomsday/libcore/src/filesys/archivefeed.cpp | 4 +- doomsday/libcore/src/filesys/directoryfeed.cpp | 4 +- doomsday/libcore/src/filesys/filesystem.cpp | 2 +- .../libcore/src/scriptsys/builtinexpression.cpp | 4 +- .../libcore/src/scriptsys/dictionaryexpression.cpp | 16 +- doomsday/libcore/src/scriptsys/expression.cpp | 18 +- .../libcore/src/scriptsys/functionstatement.cpp | 10 +- doomsday/libcore/src/scriptsys/module.cpp | 6 +- .../libcore/src/scriptsys/operatorexpression.cpp | 26 +- doomsday/libcore/src/scriptsys/parser.cpp | 173 +++++++------- doomsday/libcore/src/scriptsys/process.cpp | 4 +- doomsday/libcore/src/scriptsys/scriptsystem.cpp | 2 +- doomsday/libcore/src/scriptsys/statement.cpp | 30 +-- doomsday/libgui/gui.doxy | 2 +- doomsday/libgui/net.dengine.stdlib.gui.pack/Info | 2 +- doomsday/libgui/src/graphics/atlas.cpp | 2 +- doomsday/libshell/src/abstractlink.cpp | 6 +- doomsday/net.dengine.base.pack/Info | 2 +- doomsday/plugins/common/include/dmu_archiveindex.h | 4 +- doomsday/plugins/doom/data/doom2-freedm.mapinfo | 262 +++++++++++++++++++++ doomsday/plugins/doom/defs/doom2-freedm.ded | 28 +++ doomsday/plugins/doom/include/doomdef.h | 6 +- doomsday/plugins/doom/src/d_api.c | 13 + doomsday/sdk-qch.doxy | 4 +- .../shell/shell-gui/src/localserverdialog.cpp | 13 +- 49 files changed, 533 insertions(+), 200 deletions(-) diff --git a/doomsday/api/dd_version.h b/doomsday/api/dd_version.h index cba9596..11bf2ee 100644 --- a/doomsday/api/dd_version.h +++ b/doomsday/api/dd_version.h @@ -51,8 +51,8 @@ extern "C" { * Revision number increases with each small (maintenance) release. */ -#define DOOMSDAY_VERSION_BASE "1.15.5" -#define DOOMSDAY_VERSION_NUMBER 1,15,5,0 // For WIN32 version info. +#define DOOMSDAY_VERSION_BASE "1.15.7" +#define DOOMSDAY_VERSION_NUMBER 1,15,7,0 // For WIN32 version info. //#define DOOMSDAY_RELEASE_NAME "Example" /** diff --git a/doomsday/build/scripts/packres.py b/doomsday/build/scripts/packres.py index 2181899..b8ae565 100755 --- a/doomsday/build/scripts/packres.py +++ b/doomsday/build/scripts/packres.py @@ -81,6 +81,7 @@ p.add_files( ('plugins/doom/data/doom1.mapinfo', 'data/jdoom/doom1.mapinfo'), ('plugins/doom/data/doom2-plut.mapinfo', 'data/jdoom/doom2-plut.mapinfo'), ('plugins/doom/data/doom2-tnt.mapinfo', 'data/jdoom/doom2-tnt.mapinfo'), + ('plugins/doom/data/doom2-freedm.mapinfo', 'data/jdoom/doom2-freedm.mapinfo'), ('plugins/doom/data/doom2.mapinfo', 'data/jdoom/doom2.mapinfo'), ('plugins/doom/data/hacx.mapinfo', 'data/jdoom/hacx.mapinfo'), ('plugins/doom/data/conhelp.txt', 'data/jdoom/conhelp.txt'), diff --git a/doomsday/client/net.dengine.client.pack/Info.dei b/doomsday/client/net.dengine.client.pack/Info.dei index a4efda1..823f334 100644 --- a/doomsday/client/net.dengine.client.pack/Info.dei +++ b/doomsday/client/net.dengine.client.pack/Info.dei @@ -1,7 +1,7 @@ # Client's primary resources title: Doomsday Client -version: 1.15.5 +version: 1.15.7 license: GPL 3+ tags: core client diff --git a/doomsday/client/net.dengine.client.pack/defaultstyle.pack/Info b/doomsday/client/net.dengine.client.pack/defaultstyle.pack/Info index d80f38f..3df38f8 100644 --- a/doomsday/client/net.dengine.client.pack/defaultstyle.pack/Info +++ b/doomsday/client/net.dengine.client.pack/defaultstyle.pack/Info @@ -1,4 +1,4 @@ title: Doomsday Default UI Style -version: 1.15.5 +version: 1.15.7 license: GPL 3+ tags: ui style diff --git a/doomsday/client/net.dengine.client.pack/renderer.pack/Info b/doomsday/client/net.dengine.client.pack/renderer.pack/Info index 3500c7a..c450fe9 100644 --- a/doomsday/client/net.dengine.client.pack/renderer.pack/Info +++ b/doomsday/client/net.dengine.client.pack/renderer.pack/Info @@ -1,6 +1,6 @@ # General resources for the renderer title: Doomsday Renderer -version: 1.15.5 +version: 1.15.7 license: GPL 3+ tags: core diff --git a/doomsday/client/net.dengine.client.pack/renderer.pack/lensflares.pack/Info b/doomsday/client/net.dengine.client.pack/renderer.pack/lensflares.pack/Info index 431f905..5030710 100644 --- a/doomsday/client/net.dengine.client.pack/renderer.pack/lensflares.pack/Info +++ b/doomsday/client/net.dengine.client.pack/renderer.pack/lensflares.pack/Info @@ -1,5 +1,5 @@ title: Doomsday Default Lens Flares -version: 1.15.5 +version: 1.15.7 license: GPL 3+ tags: core fx diff --git a/doomsday/client/src/resource/resourcesystem.cpp b/doomsday/client/src/resource/resourcesystem.cpp index e999fa2..52142c2 100644 --- a/doomsday/client/src/resource/resourcesystem.cpp +++ b/doomsday/client/src/resource/resourcesystem.cpp @@ -1697,7 +1697,7 @@ DENG2_PIMPL(ResourceSystem) if(!numFoundSkins) { - LOG_RES_WARNING("Model \"%s\" will be rendered without a skin (none found)") + LOG_RES_MSG("No skins found for model \"%s\" (it may use a custom skin specified in a DED)") << NativePath(modelFilePath).pretty(); } diff --git a/doomsday/client/src/ui/dialogs/vrsettingsdialog.cpp b/doomsday/client/src/ui/dialogs/vrsettingsdialog.cpp index af3263c..37a7a56 100644 --- a/doomsday/client/src/ui/dialogs/vrsettingsdialog.cpp +++ b/doomsday/client/src/ui/dialogs/vrsettingsdialog.cpp @@ -63,9 +63,13 @@ DENG_GUI_PIMPL(VRSettingsDialog) << new ChoiceItem(tr("Side-by-side"), VRConfig::SideBySide) << new ChoiceItem(tr("Parallel"), VRConfig::Parallel) << new ChoiceItem(tr("Cross-eye"), VRConfig::CrossEye) - << new ChoiceItem(tr("Oculus Rift"), VRConfig::OculusRift) << new ChoiceItem(tr("Hardware stereo"), VRConfig::QuadBuffered); + if(vrCfg().oculusRift().isEnabled()) + { + mode->items() << new ChoiceItem(tr("Oculus Rift"), VRConfig::OculusRift); + } + area.add(swapEyes = new CVarToggleWidget("rend-vr-swap-eyes", tr("Swap Eyes"))); area.add(dominantEye = new CVarSliderWidget("rend-vr-dominant-eye")); area.add(humanHeight = new CVarSliderWidget("rend-vr-player-height")); diff --git a/doomsday/doc/output/doomsday.6 b/doomsday/doc/output/doomsday.6 index e94a751..22b292e 100644 --- a/doomsday/doc/output/doomsday.6 +++ b/doomsday/doc/output/doomsday.6 @@ -1,5 +1,5 @@ .\" manual page generated by Amethyst (mdoc+tbl) -.Dd November 1, 2015 +.Dd January 1, 2016 .Os .Dt "DOOMSDAY" 6 .Sh NAME diff --git a/doomsday/doc/readme/readme.ame b/doomsday/doc/readme/readme.ame index aefeb6b..dfb96b3 100644 --- a/doomsday/doc/readme/readme.ame +++ b/doomsday/doc/readme/readme.ame @@ -5,7 +5,7 @@ @macro{TITLE}{ doomsday } } @macro{ONELINER}{ Enhanced source port of Doom, Heretic and Hexen } -@macro{VERSION}{ Version 1.15.5 } +@macro{VERSION}{ Version 1.15.7 } @macro{AUTHOR}{ Deng Team } @macro{LINK}{ http://dengine.net/ } @require{amestd} diff --git a/doomsday/doc/server/server.ame b/doomsday/doc/server/server.ame index fdc0a7a..8c8c422 100644 --- a/doomsday/doc/server/server.ame +++ b/doomsday/doc/server/server.ame @@ -1,7 +1,7 @@ $ Man page for doomsday-server @macro{TITLE}{ doomsday-server } @macro{ONELINER}{ Doomsday Engine multiplayer daemon } -@macro{VERSION}{ Version 1.15.5 } +@macro{VERSION}{ Version 1.15.7 } @macro{AUTHOR}{ Deng Team } @macro{LINK}{ http://dengine.net/ } @require{amestd} diff --git a/doomsday/doc/shell-text/shell-text.ame b/doomsday/doc/shell-text/shell-text.ame index d8a9460..a89f962 100644 --- a/doomsday/doc/shell-text/shell-text.ame +++ b/doomsday/doc/shell-text/shell-text.ame @@ -1,7 +1,7 @@ $ Man page for doomsday-shell-text @macro{TITLE}{ doomsday-shell-text } @macro{ONELINER}{ Utility for controlling and monitoring Doomsday servers } -@macro{VERSION}{ Version 1.15.5 } +@macro{VERSION}{ Version 1.15.7 } @macro{AUTHOR}{ Deng Team } @macro{LINK}{ http://dengine.net/ } @require{amestd} diff --git a/doomsday/libappfw/appfw.doxy b/doomsday/libappfw/appfw.doxy index 3b8bbba..762ff48 100644 --- a/doomsday/libappfw/appfw.doxy +++ b/doomsday/libappfw/appfw.doxy @@ -2,7 +2,7 @@ @INCLUDE = ../doomsday.doxy PROJECT_NAME = "libappfw" -PROJECT_NUMBER = 1.15.5 +PROJECT_NUMBER = 1.15.7 PROJECT_BRIEF = "Application Framework" OUTPUT_DIRECTORY = ../apidoc/appfw/ diff --git a/doomsday/libappfw/include/de/vr/oculusrift.h b/doomsday/libappfw/include/de/vr/oculusrift.h index dcc3093..c62a23e 100644 --- a/doomsday/libappfw/include/de/vr/oculusrift.h +++ b/doomsday/libappfw/include/de/vr/oculusrift.h @@ -14,7 +14,7 @@ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser * General Public License for more details. You should have received a copy of * the GNU Lesser General Public License along with this program; if not, see: - * http://www.gnu.org/licenses</small> + * http://www.gnu.org/licenses</small> */ #ifndef LIBAPPFW_OCULUSRIFT_H @@ -28,6 +28,8 @@ namespace de { /** * Oculus Rift configuration and head tracking. + * + * @ingroup vr */ class LIBAPPFW_PUBLIC OculusRift { @@ -38,6 +40,12 @@ public: public: OculusRift(); + /** + * Checks if the Oculus Rift functionality is available. This returns + * @c true if LibOVR is enabled in the build. + */ + bool isEnabled() const; + void glPreInit(); /** @@ -97,7 +105,7 @@ public: * yaw angles, in radians. If no head tracking is available, the returned values are * not valid. */ - Vector3f headOrientation() const; + Vector3f headOrientation() const; /** * Returns the current real-world head position. diff --git a/doomsday/libappfw/src/vr/oculusrift.cpp b/doomsday/libappfw/src/vr/oculusrift.cpp index 1af06ed..3ca99e7 100644 --- a/doomsday/libappfw/src/vr/oculusrift.cpp +++ b/doomsday/libappfw/src/vr/oculusrift.cpp @@ -14,7 +14,7 @@ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser * General Public License for more details. You should have received a copy of * the GNU Lesser General Public License along with this program; if not, see: - * http://www.gnu.org/licenses</small> + * http://www.gnu.org/licenses</small> */ #include "de/OculusRift" @@ -390,7 +390,7 @@ DENG2_PIMPL(OculusRift) if(screen == HMDScreen) { if(isWindowOnHMD()) return; // Nothing further to do. -#ifdef WIN32 +#ifdef WIN32 oldGeometry = window->geometry(); window->setGeometry(screenGeometry(HMDScreen)); window->showFullScreen(); @@ -542,6 +542,15 @@ DENG2_PIMPL(OculusRift) OculusRift::OculusRift() : d(new Instance(this)) {} +bool OculusRift::isEnabled() const +{ +#ifdef DENG_HAVE_OCULUS_API + return true; +#else + return false; +#endif +} + void OculusRift::glPreInit() { #ifdef DENG_HAVE_OCULUS_API @@ -574,7 +583,7 @@ void OculusRift::deinit() void OculusRift::beginFrame() { -#ifdef DENG_HAVE_OCULUS_API +#ifdef DENG_HAVE_OCULUS_API if(!isReady() || !d->inited || d->frameOngoing) return; // Begin the frame and acquire timing information. diff --git a/doomsday/libcore/include/de/data/reader.h b/doomsday/libcore/include/de/data/reader.h index a710d62..31d5b94 100644 --- a/doomsday/libcore/include/de/data/reader.h +++ b/doomsday/libcore/include/de/data/reader.h @@ -14,7 +14,7 @@ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser * General Public License for more details. You should have received a copy of * the GNU Lesser General Public License along with this program; if not, see: - * http://www.gnu.org/licenses</small> + * http://www.gnu.org/licenses</small> */ #ifndef LIBDENG2_READER_HH @@ -197,7 +197,7 @@ public: duint32 count; *this >> count; while(count-- > 0) { - std::auto_ptr<ObjectType> entry(new ObjectType); + std::unique_ptr<ObjectType> entry(new ObjectType); *this >> *entry.get(); list.push_back(entry.release()); } diff --git a/doomsday/libcore/include/de/libcore.h b/doomsday/libcore/include/de/libcore.h index b535edb..383a432 100644 --- a/doomsday/libcore/include/de/libcore.h +++ b/doomsday/libcore/include/de/libcore.h @@ -340,7 +340,7 @@ struct IPrivate { }; /** - * Pointer to the private implementation. Behaves like std::auto_ptr, but with + * Pointer to the private implementation. Behaves like std::unique_ptr, but with * the additional requirement that the pointed/owned instance must be derived * from de::IPrivate. */ diff --git a/doomsday/libcore/include/de/net/packet.h b/doomsday/libcore/include/de/net/packet.h index 0faf1e9..cfd2754 100644 --- a/doomsday/libcore/include/de/net/packet.h +++ b/doomsday/libcore/include/de/net/packet.h @@ -14,7 +14,7 @@ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser * General Public License for more details. You should have received a copy of * the GNU Lesser General Public License along with this program; if not, see: - * http://www.gnu.org/licenses</small> + * http://www.gnu.org/licenses</small> */ #ifndef LIBDENG2_PACKET_H @@ -28,7 +28,7 @@ namespace de { class String; - + /** * Base class for all network packets in the libcore network communications * protocol. All packets are based on this class. @@ -108,7 +108,7 @@ public: Reader from(block); if(checkType(from, packetTypeIdentifier)) { - std::auto_ptr<PacketType> p(new PacketType); + std::unique_ptr<PacketType> p(new PacketType); from >> *static_cast<IReadable *>(p.get()); return p.release(); } diff --git a/doomsday/libcore/net.dengine.stdlib.pack/Info b/doomsday/libcore/net.dengine.stdlib.pack/Info index 3e32197..55a4ab2 100644 --- a/doomsday/libcore/net.dengine.stdlib.pack/Info +++ b/doomsday/libcore/net.dengine.stdlib.pack/Info @@ -1,5 +1,5 @@ title: Doomsday Script Standard Library -version: 1.15.5 +version: 1.15.7 license: GPL 3+ tags: core script diff --git a/doomsday/libcore/src/core/log.cpp b/doomsday/libcore/src/core/log.cpp index 2b5acab..f1d8619 100644 --- a/doomsday/libcore/src/core/log.cpp +++ b/doomsday/libcore/src/core/log.cpp @@ -61,7 +61,7 @@ public: } // namespace internal /// The logs table contains the log of each thread that uses logging. -static std::auto_ptr<internal::Logs> logsPtr; +static std::unique_ptr<internal::Logs> logsPtr; /// Unused entry arguments are stored here in the pool. static FIFO<LogEntry::Arg> argPool; diff --git a/doomsday/libcore/src/data/archive.cpp b/doomsday/libcore/src/data/archive.cpp index bfc5a2d..edd3f45 100644 --- a/doomsday/libcore/src/data/archive.cpp +++ b/doomsday/libcore/src/data/archive.cpp @@ -13,7 +13,7 @@ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser * General Public License for more details. You should have received a copy of * the GNU Lesser General Public License along with this program; if not, see: - * http://www.gnu.org/licenses</small> + * http://www.gnu.org/licenses</small> */ #include "de/Archive" @@ -168,7 +168,7 @@ Block const &Archive::entryBlock(Path const &path) const // Got it. return *entry.data; } - std::auto_ptr<Block> cached(new Block); + std::unique_ptr<Block> cached(new Block); d->readEntry(path, *cached.get()); entry.data = cached.release(); return *entry.data; @@ -188,14 +188,14 @@ Block &Archive::entryBlock(Path const &path) } Block const &block = const_cast<Archive const *>(this)->entryBlock(path); - + // Mark for recompression. Entry &entry = static_cast<Entry &>(d->index->find(path, PathTree::MatchFull | PathTree::NoBranch)); entry.maybeChanged = true; entry.modifiedAt = Time(); d->modified = true; - + return const_cast<Block &>(block); } diff --git a/doomsday/libcore/src/data/record.cpp b/doomsday/libcore/src/data/record.cpp index cef65da..2f602de 100644 --- a/doomsday/libcore/src/data/record.cpp +++ b/doomsday/libcore/src/data/record.cpp @@ -328,7 +328,7 @@ bool Record::hasSubrecord(String const &subrecordName) const Variable &Record::add(Variable *variable) { - std::auto_ptr<Variable> var(variable); + std::unique_ptr<Variable> var(variable); if(variable->name().empty()) { /// @throw UnnamedError All variables in a record must have a name. @@ -429,7 +429,7 @@ Variable &Record::addFunction(const String &name, Function *func) Record &Record::add(String const &name, Record *subrecord) { - std::auto_ptr<Record> sub(subrecord); + std::unique_ptr<Record> sub(subrecord); d->parentRecordByPath(name) .add(new Variable(Instance::memberNameFromPath(name), new RecordValue(sub.release(), RecordValue::OwnsRecord))); diff --git a/doomsday/libcore/src/data/value.cpp b/doomsday/libcore/src/data/value.cpp index 8b25928..fd36562 100644 --- a/doomsday/libcore/src/data/value.cpp +++ b/doomsday/libcore/src/data/value.cpp @@ -187,7 +187,7 @@ Value *Value::constructFrom(Reader &reader) reader >> id; reader.rewind(); - std::auto_ptr<Value> result; + std::unique_ptr<Value> result; switch(id) { case NONE: diff --git a/doomsday/libcore/src/data/variable.cpp b/doomsday/libcore/src/data/variable.cpp index a3941e9..eec1004 100644 --- a/doomsday/libcore/src/data/variable.cpp +++ b/doomsday/libcore/src/data/variable.cpp @@ -72,7 +72,7 @@ Variable::Variable(String const &name, Value *initial, Flags const &m) d->name = name; d->mode = m; - std::auto_ptr<Value> v(initial); + std::unique_ptr<Value> v(initial); if(!initial) { v.reset(new NoneValue); diff --git a/doomsday/libcore/src/filesys/archivefeed.cpp b/doomsday/libcore/src/filesys/archivefeed.cpp index f61ec49..5b992ca 100644 --- a/doomsday/libcore/src/filesys/archivefeed.cpp +++ b/doomsday/libcore/src/filesys/archivefeed.cpp @@ -14,7 +14,7 @@ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser * General Public License for more details. You should have received a copy of * the GNU Lesser General Public License along with this program; if not, see: - * http://www.gnu.org/licenses</small> + * http://www.gnu.org/licenses</small> */ #include "de/ArchiveFeed" @@ -168,7 +168,7 @@ DENG2_PIMPL(ArchiveFeed) String entry = basePath / *i; - std::auto_ptr<ArchiveEntryFile> archFile(new ArchiveEntryFile(*i, archive(), entry)); + std::unique_ptr<ArchiveEntryFile> archFile(new ArchiveEntryFile(*i, archive(), entry)); // Write access is inherited from the main source file. if(allowWrite) archFile->setMode(File::Write); diff --git a/doomsday/libcore/src/filesys/directoryfeed.cpp b/doomsday/libcore/src/filesys/directoryfeed.cpp index ebc17b3..1d726b2 100644 --- a/doomsday/libcore/src/filesys/directoryfeed.cpp +++ b/doomsday/libcore/src/filesys/directoryfeed.cpp @@ -14,7 +14,7 @@ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser * General Public License for more details. You should have received a copy of * the GNU Lesser General Public License along with this program; if not, see: - * http://www.gnu.org/licenses</small> + * http://www.gnu.org/licenses</small> */ #include "de/DirectoryFeed" @@ -110,7 +110,7 @@ void DirectoryFeed::populateFile(Folder &folder, String const &entryName) NativePath entryPath = _nativePath / entryName; // Open the native file. - std::auto_ptr<NativeFile> nativeFile(new NativeFile(entryName, entryPath)); + std::unique_ptr<NativeFile> nativeFile(new NativeFile(entryName, entryPath)); nativeFile->setStatus(fileStatus(entryPath)); if(_mode & AllowWrite) { diff --git a/doomsday/libcore/src/filesys/filesystem.cpp b/doomsday/libcore/src/filesys/filesystem.cpp index 6287432..da25f99 100644 --- a/doomsday/libcore/src/filesys/filesystem.cpp +++ b/doomsday/libcore/src/filesys/filesystem.cpp @@ -154,7 +154,7 @@ File *FileSystem::interpret(File *sourceData) try { // It is a ZIP archive: we will represent it as a folder. - std::auto_ptr<ArchiveFolder> package; + std::unique_ptr<ArchiveFolder> package; if(sourceData->name().fileNameExtension() == ".save") { diff --git a/doomsday/libcore/src/scriptsys/builtinexpression.cpp b/doomsday/libcore/src/scriptsys/builtinexpression.cpp index bb174b1..b5cfe4e 100644 --- a/doomsday/libcore/src/scriptsys/builtinexpression.cpp +++ b/doomsday/libcore/src/scriptsys/builtinexpression.cpp @@ -57,7 +57,7 @@ void BuiltInExpression::push(Evaluator &evaluator, Value *scope) const Value *BuiltInExpression::evaluate(Evaluator &evaluator) const { - std::auto_ptr<Value> value(evaluator.popResult()); + std::unique_ptr<Value> value(evaluator.popResult()); ArrayValue const &args = value.get()->as<ArrayValue>(); switch(_type) @@ -269,7 +269,7 @@ Value *BuiltInExpression::evaluate(Evaluator &evaluator) const throw WrongArgumentsError("BuiltInExpression::evaluate", "Expected exactly one argument for SERIALIZE"); } - std::auto_ptr<BlockValue> data(new BlockValue); + std::unique_ptr<BlockValue> data(new BlockValue); Writer(*data.get()) << args.at(1); return data.release(); } diff --git a/doomsday/libcore/src/scriptsys/dictionaryexpression.cpp b/doomsday/libcore/src/scriptsys/dictionaryexpression.cpp index f0ca717..9a5e92e 100644 --- a/doomsday/libcore/src/scriptsys/dictionaryexpression.cpp +++ b/doomsday/libcore/src/scriptsys/dictionaryexpression.cpp @@ -14,7 +14,7 @@ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser * General Public License for more details. You should have received a copy of * the GNU Lesser General Public License along with this program; if not, see: - * http://www.gnu.org/licenses</small> + * http://www.gnu.org/licenses</small> */ #include "de/DictionaryExpression" @@ -55,7 +55,7 @@ void DictionaryExpression::add(Expression *key, Expression *value) void DictionaryExpression::push(Evaluator &evaluator, Value *scope) const { Expression::push(evaluator, scope); - + // The arguments in reverse order (so they are evaluated in // natural order, i.e., the same order they are in the source). for(Arguments::const_reverse_iterator i = _arguments.rbegin(); @@ -63,15 +63,15 @@ void DictionaryExpression::push(Evaluator &evaluator, Value *scope) const { i->second->push(evaluator); i->first->push(evaluator); - } + } } Value *DictionaryExpression::evaluate(Evaluator &evaluator) const { - std::auto_ptr<DictionaryValue> dict(new DictionaryValue); - + std::unique_ptr<DictionaryValue> dict(new DictionaryValue); + std::list<Value *> keys, values; - + // Collect the right number of results into the array. for(Arguments::const_reverse_iterator i = _arguments.rbegin(); i != _arguments.rend(); ++i) @@ -88,7 +88,7 @@ Value *DictionaryExpression::evaluate(Evaluator &evaluator) const { dict->add(*key, *value); } - + return dict.release(); } @@ -111,7 +111,7 @@ void DictionaryExpression::operator << (Reader &from) from >> id; if(id != DICTIONARY) { - /// @throw DeserializationError The identifier that species the type of the + /// @throw DeserializationError The identifier that species the type of the /// serialized expression was invalid. throw DeserializationError("DictionaryExpression::operator <<", "Invalid ID"); } diff --git a/doomsday/libcore/src/scriptsys/expression.cpp b/doomsday/libcore/src/scriptsys/expression.cpp index 2be7838..71e3165 100644 --- a/doomsday/libcore/src/scriptsys/expression.cpp +++ b/doomsday/libcore/src/scriptsys/expression.cpp @@ -14,7 +14,7 @@ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser * General Public License for more details. You should have received a copy of * the GNU Lesser General Public License along with this program; if not, see: - * http://www.gnu.org/licenses</small> + * http://www.gnu.org/licenses</small> */ #include "de/Expression" @@ -47,22 +47,22 @@ Expression *Expression::constructFrom(Reader &reader) reader.mark(); reader >> id; reader.rewind(); - - std::auto_ptr<Expression> result; + + std::unique_ptr<Expression> result; switch(id) { case ARRAY: result.reset(new ArrayExpression()); break; - + case BUILT_IN: result.reset(new BuiltInExpression()); break; - + case CONSTANT: result.reset(new ConstantExpression()); break; - + case DICTIONARY: result.reset(new DictionaryExpression()); break; @@ -74,16 +74,16 @@ Expression *Expression::constructFrom(Reader &reader) case OPERATOR: result.reset(new OperatorExpression()); break; - + default: - /// @throw DeserializationError The identifier that species the type of the + /// @throw DeserializationError The identifier that species the type of the /// serialized expression was invalid. throw DeserializationError("Expression::constructFrom", "Invalid expression identifier"); } // Deserialize it. reader >> *result.get(); - return result.release(); + return result.release(); } Expression::Flags const &Expression::flags () const diff --git a/doomsday/libcore/src/scriptsys/functionstatement.cpp b/doomsday/libcore/src/scriptsys/functionstatement.cpp index e08355f..6adc8ed 100644 --- a/doomsday/libcore/src/scriptsys/functionstatement.cpp +++ b/doomsday/libcore/src/scriptsys/functionstatement.cpp @@ -14,7 +14,7 @@ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser * General Public License for more details. You should have received a copy of * the GNU Lesser General Public License along with this program; if not, see: - * http://www.gnu.org/licenses</small> + * http://www.gnu.org/licenses</small> */ #include "de/FunctionStatement" @@ -68,7 +68,7 @@ void FunctionStatement::execute(Context &context) const // Variable that will store the function. eval.evaluateTo<RefValue>(_identifier); - std::auto_ptr<RefValue> ref(eval.popResultAs<RefValue>()); + std::unique_ptr<RefValue> ref(eval.popResultAs<RefValue>()); // Evaluate the argument default values. DictionaryValue &dict = eval.evaluateTo<DictionaryValue>(&_defaults); @@ -76,10 +76,10 @@ void FunctionStatement::execute(Context &context) const { _function->defaults()[i->first.value->asText()] = i->second->duplicate(); } - + // The value takes a reference to the function. ref->assign(new FunctionValue(_function)); - + context.proceed(); } @@ -94,7 +94,7 @@ void FunctionStatement::operator << (Reader &from) from >> id; if(id != FUNCTION) { - /// @throw DeserializationError The identifier that species the type of the + /// @throw DeserializationError The identifier that species the type of the /// serialized statement was invalid. throw DeserializationError("FunctionStatement::operator <<", "Invalid ID"); } diff --git a/doomsday/libcore/src/scriptsys/module.cpp b/doomsday/libcore/src/scriptsys/module.cpp index b5a9627..9d1834c 100644 --- a/doomsday/libcore/src/scriptsys/module.cpp +++ b/doomsday/libcore/src/scriptsys/module.cpp @@ -14,9 +14,9 @@ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser * General Public License for more details. You should have received a copy of * the GNU Lesser General Public License along with this program; if not, see: - * http://www.gnu.org/licenses</small> + * http://www.gnu.org/licenses</small> */ - + #include "de/Module" #include "de/File" #include "de/Process" @@ -40,7 +40,7 @@ Module::Module(File const &sourceFile) : _sourcePath(sourceFile.path()), _proces void Module::initialize(Script const &script) { // Execute the script. - std::auto_ptr<Process> proc(new Process(script)); + std::unique_ptr<Process> proc(new Process(script)); proc->execute(); _process = proc.release(); } diff --git a/doomsday/libcore/src/scriptsys/operatorexpression.cpp b/doomsday/libcore/src/scriptsys/operatorexpression.cpp index 3af323e..90d438c 100644 --- a/doomsday/libcore/src/scriptsys/operatorexpression.cpp +++ b/doomsday/libcore/src/scriptsys/operatorexpression.cpp @@ -14,7 +14,7 @@ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser * General Public License for more details. You should have received a copy of * the GNU Lesser General Public License along with this program; if not, see: - * http://www.gnu.org/licenses</small> + * http://www.gnu.org/licenses</small> */ #include "de/OperatorExpression" @@ -64,11 +64,11 @@ OperatorExpression::~OperatorExpression() void OperatorExpression::push(Evaluator &evaluator, Value *scope) const { Expression::push(evaluator); - + if(_op == MEMBER) { // The MEMBER operator works a bit differently. Just push the left side - // now. We'll push the other side when we've found out what is the + // now. We'll push the other side when we've found out what is the // scope defined by the result of the left side. _leftOperand->push(evaluator, scope); } @@ -132,7 +132,7 @@ Value *OperatorExpression::evaluate(Evaluator &evaluator) const case PLUS_ASSIGN: verifyAssignable(leftValue); leftValue->sum(*rightValue); - break; + break; case MINUS: if(leftValue) @@ -149,7 +149,7 @@ Value *OperatorExpression::evaluate(Evaluator &evaluator) const case MINUS_ASSIGN: verifyAssignable(leftValue); leftValue->subtract(*rightValue); - break; + break; case DIVIDE: leftValue->divide(*rightValue); @@ -158,7 +158,7 @@ Value *OperatorExpression::evaluate(Evaluator &evaluator) const case DIVIDE_ASSIGN: verifyAssignable(leftValue); leftValue->divide(*rightValue); - break; + break; case MULTIPLY: leftValue->multiply(*rightValue); @@ -167,7 +167,7 @@ Value *OperatorExpression::evaluate(Evaluator &evaluator) const case MULTIPLY_ASSIGN: verifyAssignable(leftValue); leftValue->multiply(*rightValue); - break; + break; case MODULO: leftValue->modulo(*rightValue); @@ -246,11 +246,11 @@ Value *OperatorExpression::evaluate(Evaluator &evaluator) const break; } - case SLICE: + case SLICE: result = performSlice(*leftValue, *rightValue); break; - case MEMBER: + case MEMBER: { Record *scope = (leftValue? leftValue->memberScope() : 0); if(!scope) @@ -288,7 +288,7 @@ Value *OperatorExpression::evaluate(Evaluator &evaluator) const // Delete the unnecessary values. if(result != rightValue) delete rightValue; if(result != leftValue) delete leftValue; - + return result; } @@ -320,7 +320,7 @@ void OperatorExpression::operator << (Reader &from) from >> id; if(id != OPERATOR) { - /// @throw DeserializationError The identifier that species the type of the + /// @throw DeserializationError The identifier that species the type of the /// serialized expression was invalid. throw DeserializationError("OperatorExpression::operator <<", "Invalid ID"); } @@ -335,7 +335,7 @@ void OperatorExpression::operator << (Reader &from) delete _rightOperand; _leftOperand = 0; _rightOperand = 0; - + _rightOperand = Expression::constructFrom(from); if(header & HAS_LEFT_OPERAND) { @@ -385,7 +385,7 @@ Value *OperatorExpression::performSlice(Value &leftValue, Value &rightValue) con DENG2_ASSERT(args != NULL); // Parser makes sure. // The resulting slice of leftValue's elements. - std::auto_ptr<SliceTarget> slice; + std::unique_ptr<SliceTarget> slice; if(dynamic_cast<TextValue *>(&leftValue)) { slice.reset(new TextSliceTarget); diff --git a/doomsday/libcore/src/scriptsys/parser.cpp b/doomsday/libcore/src/scriptsys/parser.cpp index 26dc40b..549547d 100644 --- a/doomsday/libcore/src/scriptsys/parser.cpp +++ b/doomsday/libcore/src/scriptsys/parser.cpp @@ -14,7 +14,7 @@ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser * General Public License for more details. You should have received a copy of * the GNU Lesser General Public License along with this program; if not, see: - * http://www.gnu.org/licenses</small> + * http://www.gnu.org/licenses</small> */ #include "de/Parser" @@ -46,7 +46,6 @@ #include <sstream> -using std::auto_ptr; using namespace de; Parser::Parser() @@ -59,7 +58,7 @@ void Parser::parse(String const &input, Script &output) { // Lexical analyzer for Haw scripts. _analyzer = ScriptLex(input); - + // Get the tokens of the first statement. if(nextStatement() > 0) { @@ -74,18 +73,18 @@ void Parser::parse(String const &input, Script &output) duint Parser::nextStatement() { duint result = _analyzer.getStatement(_tokens); - + // Begin with the whole thing. _statementRange = TokenRange(_tokens); //std::cout << "Next statement: '" << _statementRange.asText() << "'\n"; - + return result; } void Parser::parseCompound(Compound &compound) { - while(_statementRange.size() > 0) + while(_statementRange.size() > 0) { if(_statementRange.firstToken().equals(ScriptLex::ELSIF) || _statementRange.firstToken().equals(ScriptLex::ELSE) || @@ -95,7 +94,7 @@ void Parser::parseCompound(Compound &compound) // End of compound. break; } - + // We have a list of tokens, which form a statement. // Figure out what it is and generate the correct statement(s) // and expressions. @@ -106,7 +105,7 @@ void Parser::parseCompound(Compound &compound) void Parser::parseStatement(Compound &compound) { DENG2_ASSERT(!_statementRange.empty()); - + Token const &firstToken = _statementRange.firstToken(); // Statements with a compound: if, for, while, def. @@ -135,7 +134,7 @@ void Parser::parseStatement(Compound &compound) parseTryCatchSequence(compound); return; } - + // Statements without a compound (must advance to next statement manually). if(firstToken.equals(ScriptLex::IMPORT)) { @@ -197,7 +196,7 @@ void Parser::parseStatement(Compound &compound) { compound.add(parseExpressionStatement()); } - + // We've fully parsed the current set of tokens, get the next statement. nextStatement(); } @@ -206,29 +205,29 @@ IfStatement *Parser::parseIfStatement() { // The "end" keyword is necessary in the full form. bool expectEnd = !_statementRange.hasBracketless(Token::COLON); - - auto_ptr<IfStatement> statement(new IfStatement()); + + std::unique_ptr<IfStatement> statement(new IfStatement()); statement->newBranch(); statement->setBranchCondition( - parseConditionalCompound(statement->branchCompound(), + parseConditionalCompound(statement->branchCompound(), HasCondition | StayAtClosingStatement)); - + while(_statementRange.beginsWith(ScriptLex::ELSIF)) { expectEnd = !_statementRange.hasBracketless(Token::COLON); statement->newBranch(); statement->setBranchCondition( - parseConditionalCompound(statement->branchCompound(), + parseConditionalCompound(statement->branchCompound(), HasCondition | StayAtClosingStatement)); } - + if(_statementRange.beginsWith(ScriptLex::ELSE)) { expectEnd = !_statementRange.has(Token::COLON); parseConditionalCompound(statement->elseCompound(), StayAtClosingStatement); } - - if(expectEnd) + + if(expectEnd) { if(_statementRange.size() != 1 || !_statementRange.firstToken().equals(ScriptLex::END)) { @@ -238,15 +237,15 @@ IfStatement *Parser::parseIfStatement() nextStatement(); } - return statement.release(); + return statement.release(); } WhileStatement *Parser::parseWhileStatement() { // "while" expr ":" statement // "while" expr "\n" compound - - auto_ptr<WhileStatement> statement(new WhileStatement()); + + std::unique_ptr<WhileStatement> statement(new WhileStatement()); statement->setCondition(parseConditionalCompound(statement->compound(), HasCondition)); return statement.release(); } @@ -255,7 +254,7 @@ ForStatement *Parser::parseForStatement() { // "for" by-ref-expr "in" expr ":" statement // "for" by-ref-expr "in" expr "\n" compound - + dint colonPos = _statementRange.find(Token::COLON); dint inPos = _statementRange.find(ScriptLex::IN); if(inPos < 0 || (colonPos > 0 && inPos > colonPos)) @@ -263,23 +262,23 @@ ForStatement *Parser::parseForStatement() throw MissingTokenError("Parser::parseForStatement", "Expected 'in' to follow " + _statementRange.firstToken().asText()); } - - auto_ptr<Expression> iter(parseExpression(_statementRange.between(1, inPos), + + std::unique_ptr<Expression> iter(parseExpression(_statementRange.between(1, inPos), Expression::ByReference | Expression::NewVariable | Expression::LocalOnly)); Expression *iterable = parseExpression(_statementRange.between(inPos + 1, colonPos)); - - auto_ptr<ForStatement> statement(new ForStatement(iter.release(), iterable)); + + std::unique_ptr<ForStatement> statement(new ForStatement(iter.release(), iterable)); // Parse the statements of the method. parseConditionalCompound(statement->compound(), IgnoreExtraBeforeColon); - + return statement.release(); } ExpressionStatement *Parser::parseImportStatement() { // "import" ["record"] name-expr ["," name-expr]* - + if(_statementRange.size() < 2) { throw MissingTokenError("Parser::parseImportStatement", @@ -322,7 +321,7 @@ Statement *Parser::parseDeclarationStatement() { throw MissingTokenError("Parser::parseDeclarationStatement", "Expected identifier to follow " + _statementRange.firstToken().asText()); - } + } // Is this a class record declaration? dint pos = _statementRange.find(Token::PARENTHESIS_OPEN); @@ -348,12 +347,12 @@ Statement *Parser::parseDeclarationStatement() DeleteStatement *Parser::parseDeleteStatement() { // "del" name-expr ["," name-expr]* - + if(_statementRange.size() < 2) { throw MissingTokenError("Parser::parseDeleteStatement", "Expected identifier to follow " + _statementRange.firstToken().asText()); - } + } return new DeleteStatement(parseList(_statementRange.startingFrom(1), Token::COMMA, Expression::LocalOnly | Expression::ByReference)); } @@ -370,8 +369,8 @@ FunctionStatement *Parser::parseFunctionStatement() } // The function must have a name that is not already in use in the scope. - auto_ptr<FunctionStatement> statement(new FunctionStatement( - parseExpression(_statementRange.between(1, pos), + std::unique_ptr<FunctionStatement> statement(new FunctionStatement( + parseExpression(_statementRange.between(1, pos), Expression::LocalOnly | Expression::ByReference | Expression::NewVariable | Expression::NotInScope))); @@ -388,7 +387,7 @@ FunctionStatement *Parser::parseFunctionStatement() // Just the name of the argument. statement->addArgument(delim.firstToken().str()); } - else if(delim.size() >= 3 && + else if(delim.size() >= 3 && delim.token(0).type() == Token::IDENTIFIER && delim.token(1).equals(ScriptLex::ASSIGN)) { @@ -407,7 +406,7 @@ FunctionStatement *Parser::parseFunctionStatement() // Parse the statements of the function. parseConditionalCompound(statement->compound(), IgnoreExtraBeforeColon); - + return statement.release(); } @@ -415,8 +414,8 @@ void Parser::parseTryCatchSequence(Compound &compound) { // "try" cond-compound catch-compound [catch-compound]* // catch-compound: "catch" name-expr ["," ref-name-expr] cond-compound - - auto_ptr<TryStatement> tryStat(new TryStatement); + + std::unique_ptr<TryStatement> tryStat(new TryStatement); parseConditionalCompound(tryStat->compound(), StayAtClosingStatement); compound.add(tryStat.release()); @@ -434,7 +433,7 @@ void Parser::parseTryCatchSequence(Compound &compound) expectEnd = (colon < 0); // Parse the arguments. - auto_ptr<ArrayExpression> args; + std::unique_ptr<ArrayExpression> args; if(_statementRange.size() > 1) { TokenRange argRange; @@ -450,7 +449,7 @@ void Parser::parseTryCatchSequence(Compound &compound) Expression::ByReference | Expression::LocalOnly | Expression::NewVariable)); } - auto_ptr<CatchStatement> catchStat(new CatchStatement(args.release())); + std::unique_ptr<CatchStatement> catchStat(new CatchStatement(args.release())); parseConditionalCompound(catchStat->compound(), StayAtClosingStatement | IgnoreExtraBeforeColon); @@ -459,7 +458,7 @@ void Parser::parseTryCatchSequence(Compound &compound) // Add it to the compound. compound.add(catchStat.release()); - } + } finalCatch->flags |= CatchStatement::FinalCompound; if(expectEnd) { @@ -473,7 +472,7 @@ void Parser::parseTryCatchSequence(Compound &compound) } PrintStatement *Parser::parsePrintStatement() -{ +{ ArrayExpression *args = 0; if(_statementRange.size() == 1) // Just the keyword. { @@ -484,13 +483,13 @@ PrintStatement *Parser::parsePrintStatement() // Parse the arguments of the print statement. args = parseList(_statementRange.startingFrom(1)); } - return new PrintStatement(args); + return new PrintStatement(args); } AssignStatement *Parser::parseAssignStatement() { Expression::Flags flags = Expression::NewVariable | Expression::ByReference | Expression::LocalOnly; - + /// "export" will export the newly assigned variable. if(_statementRange.firstToken().equals(ScriptLex::EXPORT)) { @@ -504,7 +503,7 @@ AssignStatement *Parser::parseAssignStatement() flags |= Expression::ReadOnly; _statementRange = _statementRange.startingFrom(1); } - + dint pos = _statementRange.find(ScriptLex::ASSIGN); if(pos < 0) { @@ -517,7 +516,7 @@ AssignStatement *Parser::parseAssignStatement() flags |= Expression::ThrowawayIfInScope; } } - + // Has indices been specified? AssignStatement::Indices indices; dint nameEndPos = pos; @@ -533,7 +532,7 @@ AssignStatement *Parser::parseAssignStatement() indices.push_back(indexExpr); bracketPos = nameEndPos - 1; } - + if(indices.size() > 0 && (flags & Expression::ThrowawayIfInScope)) { throw SyntaxError("Parser::parseAssignStatement", @@ -547,7 +546,7 @@ AssignStatement *Parser::parseAssignStatement() lValue.take(); rValue.take(); - + return st; } catch(Error const &) @@ -570,12 +569,12 @@ Expression *Parser::parseConditionalCompound(Compound &compound, CompoundFlags c { // keyword [expr] ":" statement // keyword [expr] "\n" compound - + TokenRange range = _statementRange; - + // See if there is a colon on this line. dint colon = range.findBracketless(Token::COLON); - + QScopedPointer<Expression> condition; if(flags.testFlag(HasCondition)) { @@ -595,7 +594,7 @@ Expression *Parser::parseConditionalCompound(Compound &compound, CompoundFlags c throw UnexpectedTokenError("Parser::parseConditionalCompound", range.token(1).asText() + " was unexpected"); } - + if(colon > 0) { if(colon == dint(range.size()) - 1) @@ -643,13 +642,13 @@ Expression *Parser::parseExpression(TokenRange const &fullRange, Expression::Fla LOG_AS("parseExpression"); LOGDEV_SCR_XVERBOSE_DEBUGONLY("%s (flags:%x)", range.asText() << flags); - + if(!range.size()) { // Empty expression yields a None value. return ConstantExpression::None(); } - + // We can ignore extra parenthesis around the range. while(range.firstToken().equals(Token::PARENTHESIS_OPEN) && range.closingBracket(0) == range.size() - 1) { @@ -673,10 +672,10 @@ Expression *Parser::parseExpression(TokenRange const &fullRange, Expression::Fla TokenRange leftSide = range.between(0, 0); TokenRange rightSide = leftSide; - + // Locate the lowest-ranking operator. Operator op = findLowestOperator(range, leftSide, rightSide); - + if(op == NONE) { // This is a constant or a variable reference. @@ -695,7 +694,7 @@ Expression *Parser::parseExpression(TokenRange const &fullRange, Expression::Fla return parseCallExpression(leftSide, rightSide); } else - { + { // Left side is empty with unary operators. // The right side inherits the flags of the expression (e.g., name-by-reference). return parseOperatorExpression(op, leftSide, rightSide, flags); @@ -708,9 +707,9 @@ ArrayExpression *Parser::parseArrayExpression(TokenRange const &range) range.closingBracket(0) != range.size() - 1) { throw MissingTokenError("Parser::parseArrayExpression", - "Expected brackets for the array expression beginning at " + + "Expected brackets for the array expression beginning at " + range.firstToken().asText()); - } + } return parseList(range.shrink(1)); } @@ -720,12 +719,12 @@ DictionaryExpression *Parser::parseDictionaryExpression(TokenRange const &range) range.closingBracket(0) != range.size() - 1) { throw MissingTokenError("Parser::parseDictionaryExpression", - "Expected brackets for the dictionary expression beginning at " + + "Expected brackets for the dictionary expression beginning at " + range.firstToken().asText()); } TokenRange shrunk = range.shrink(1); - - auto_ptr<DictionaryExpression> exp(new DictionaryExpression); + + std::unique_ptr<DictionaryExpression> exp(new DictionaryExpression); if(shrunk.size() > 0) { // The arguments are comma-separated. @@ -739,7 +738,7 @@ DictionaryExpression *Parser::parseDictionaryExpression(TokenRange const &range) "Colon is missing from '" + delim.asText() + "' at " + delim.firstToken().asText()); } - + QScopedPointer<Expression> key(parseExpression(delim.endingTo(colonPos))); Expression *value = parseExpression(delim.startingFrom(colonPos + 1)); exp->add(key.take(), value); @@ -752,22 +751,22 @@ Expression *Parser::parseCallExpression(TokenRange const &nameRange, TokenRange { //std::cerr << "call name: " << nameRange.asText() << "\n"; //std::cerr << "call args: " << argumentRange.asText() << "\n"; - + if(!argumentRange.firstToken().equals(Token::PARENTHESIS_OPEN) || argumentRange.closingBracket(0) < argumentRange.size() - 1) { throw SyntaxError("Parser::parseCallExpression", - "Call arguments must be enclosed in parenthesis for " + + "Call arguments must be enclosed in parenthesis for " + argumentRange.firstToken().asText()); } - + // Parse the arguments, with possible labels included. // The named arguments are evaluated by a dictionary which is always // included as the first expression in the array. QScopedPointer<ArrayExpression> args(new ArrayExpression); DictionaryExpression *namedArgs = new DictionaryExpression; args->add(namedArgs); - + TokenRange argsRange = argumentRange.shrink(1); if(!argsRange.empty()) { @@ -778,7 +777,7 @@ Expression *Parser::parseCallExpression(TokenRange const &nameRange, TokenRange if(delim.has(ScriptLex::ASSIGN)) { // A label is included. - if(delim.size() < 3 || + if(delim.size() < 3 || delim.firstToken().type() != Token::IDENTIFIER || !delim.token(1).equals(ScriptLex::ASSIGN)) { @@ -796,7 +795,7 @@ Expression *Parser::parseCallExpression(TokenRange const &nameRange, TokenRange } } } - + // Check for some built-in methods, which are usable everywhere. if(nameRange.size() == 1) { @@ -810,11 +809,11 @@ Expression *Parser::parseCallExpression(TokenRange const &nameRange, TokenRange return new OperatorExpression(CALL, identifier.take(), args.take()); } -OperatorExpression *Parser::parseOperatorExpression(Operator op, TokenRange const &leftSide, +OperatorExpression *Parser::parseOperatorExpression(Operator op, TokenRange const &leftSide, TokenRange const &rightSide, Expression::Flags const &rightFlags) { //std::cerr << "left: " << leftSide.asText() << ", right: " << rightSide.asText() << "\n"; - + if(leftSide.empty()) { // Must be unary. @@ -909,7 +908,7 @@ Expression *Parser::parseTokenExpression(TokenRange const &range, Expression::Fl } else { - throw UnexpectedTokenError("Parser::parseTokenExpression", + throw UnexpectedTokenError("Parser::parseTokenExpression", "Unexpected token " + range.token(1).asText()); } @@ -922,7 +921,7 @@ Expression *Parser::parseTokenExpression(TokenRange const &range, Expression::Fl case Token::LITERAL_NUMBER: return new ConstantExpression( new NumberValue(ScriptLex::tokenToNumber(token))); - + default: throw UnexpectedTokenError("Parser::parseTokenExpression", "Unexpected " + token.asText() + " which was identified as " + @@ -955,20 +954,20 @@ Operator Parser::findLowestOperator(TokenRange const &range, TokenRange &leftSid for(duint i = 0, continueFrom = 0; i < range.size(); i = continueFrom) { continueFrom = i + 1; - + int rank = MAX_RANK; Operator op = NONE; Direction direction = LEFT_TO_RIGHT; - + Token const &token = range.token(i); - + if(token.equals(Token::PARENTHESIS_OPEN)) { continueFrom = range.closingBracket(i) + 1; if((previousOp == NONE || previousOp == INDEX || previousOp == SLICE || previousOp == PARENTHESIS || previousOp == CALL) && i > 0) { - // The previous token was not an operator, but there + // The previous token was not an operator, but there // was something before this one. It must be a function // call. op = CALL; @@ -1040,8 +1039,8 @@ Operator Parser::findLowestOperator(TokenRange const &range, TokenRange &leftSid { "%", MODULO, 10, LEFT_TO_RIGHT }, { ".", DOT, RANK_DOT, LEFT_TO_RIGHT }, { 0, NONE, MAX_RANK, LEFT_TO_RIGHT } - }; - + }; + // Operator precedence: // . // function call @@ -1052,13 +1051,13 @@ Operator Parser::findLowestOperator(TokenRange const &range, TokenRange &leftSid // + - // & | ^ // << >> - // < > <= >= + // < > <= >= // == != // in // not // and // or - + // Check the rankings table. for(int k = 0; rankings[k].token; ++k) { @@ -1067,7 +1066,7 @@ Operator Parser::findLowestOperator(TokenRange const &range, TokenRange &leftSid op = rankings[k].op; rank = rankings[k].rank; direction = rankings[k].direction; - + if(op == DOT) // && previousOp == NONE) { op = MEMBER; @@ -1090,8 +1089,8 @@ Operator Parser::findLowestOperator(TokenRange const &range, TokenRange &leftSid } } } - - if(op != NONE && + + if(op != NONE && ((direction == LEFT_TO_RIGHT && rank <= lowestRank) || (direction == RIGHT_TO_LEFT && rank < lowestRank))) { @@ -1104,13 +1103,13 @@ Operator Parser::findLowestOperator(TokenRange const &range, TokenRange &leftSid } else { - rightSide = range.startingFrom(op == CALL || op == ARRAY || + rightSide = range.startingFrom(op == CALL || op == ARRAY || op == DICTIONARY? i : i + 1); } } - - previousOp = op; + + previousOp = op; } - + return lowestOp; } diff --git a/doomsday/libcore/src/scriptsys/process.cpp b/doomsday/libcore/src/scriptsys/process.cpp index 45ad671..4baa8a8 100644 --- a/doomsday/libcore/src/scriptsys/process.cpp +++ b/doomsday/libcore/src/scriptsys/process.cpp @@ -28,8 +28,6 @@ #include <sstream> -using std::auto_ptr; - namespace de { DENG2_PIMPL(Process) @@ -327,7 +325,7 @@ void Process::finish(Value *returnValue) if(depth() > 1) { // Finish the topmost context. - std::auto_ptr<Context> topmost(popContext()); + std::unique_ptr<Context> topmost(popContext()); if(topmost->type() == Context::FunctionCall) { // Return value to the new topmost level. diff --git a/doomsday/libcore/src/scriptsys/scriptsystem.cpp b/doomsday/libcore/src/scriptsys/scriptsystem.cpp index 5238104..c850ded 100644 --- a/doomsday/libcore/src/scriptsys/scriptsystem.cpp +++ b/doomsday/libcore/src/scriptsys/scriptsystem.cpp @@ -292,7 +292,7 @@ namespace internal { File const *ScriptSystem::tryFindModuleSource(String const &name, String const &localPath) { // Fall back on the default if the config hasn't been imported yet. - std::auto_ptr<ArrayValue> defaultImportPath(new ArrayValue); + std::unique_ptr<ArrayValue> defaultImportPath(new ArrayValue); defaultImportPath->add(""); defaultImportPath->add("*"); // Newest module with a matching name. ArrayValue const *importPath = defaultImportPath.get(); diff --git a/doomsday/libcore/src/scriptsys/statement.cpp b/doomsday/libcore/src/scriptsys/statement.cpp index 4a24407..49c7449 100644 --- a/doomsday/libcore/src/scriptsys/statement.cpp +++ b/doomsday/libcore/src/scriptsys/statement.cpp @@ -14,7 +14,7 @@ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser * General Public License for more details. You should have received a copy of * the GNU Lesser General Public License along with this program; if not, see: - * http://www.gnu.org/licenses</small> + * http://www.gnu.org/licenses</small> */ #include "de/Statement" @@ -46,14 +46,14 @@ Statement *Statement::constructFrom(Reader &reader) reader.mark(); reader >> id; reader.rewind(); - - std::auto_ptr<Statement> result; + + std::unique_ptr<Statement> result; switch(id) { case ASSIGN: result.reset(new AssignStatement); break; - + case CATCH: result.reset(new CatchStatement); break; @@ -65,31 +65,31 @@ Statement *Statement::constructFrom(Reader &reader) case EXPRESSION: result.reset(new ExpressionStatement); break; - + case FLOW: result.reset(new FlowStatement); break; - + case FOR: result.reset(new ForStatement); break; - + case FUNCTION: result.reset(new FunctionStatement); break; - + case IF: result.reset(new IfStatement); break; - + case PRINT: result.reset(new PrintStatement); break; - + case TRY: result.reset(new TryStatement); - break; - + break; + case WHILE: result.reset(new WhileStatement); break; @@ -97,14 +97,14 @@ Statement *Statement::constructFrom(Reader &reader) case SCOPE: result.reset(new ScopeStatement); break; - + default: - /// @throw DeserializationError The identifier that species the type of the + /// @throw DeserializationError The identifier that species the type of the /// serialized statement was invalid. throw DeserializationError("Statement::constructFrom", "Invalid statement identifier"); } // Deserialize it. reader >> *result.get(); - return result.release(); + return result.release(); } diff --git a/doomsday/libgui/gui.doxy b/doomsday/libgui/gui.doxy index 173ec89..26e58c4 100644 --- a/doomsday/libgui/gui.doxy +++ b/doomsday/libgui/gui.doxy @@ -2,7 +2,7 @@ @INCLUDE = ../doomsday.doxy PROJECT_NAME = "libgui" -PROJECT_NUMBER = 1.15.5 +PROJECT_NUMBER = 1.15.7 PROJECT_BRIEF = "Graphics, Audio and Input Library" OUTPUT_DIRECTORY = ../apidoc/gui/ diff --git a/doomsday/libgui/net.dengine.stdlib.gui.pack/Info b/doomsday/libgui/net.dengine.stdlib.gui.pack/Info index 9b1e3f8..93f79af 100644 --- a/doomsday/libgui/net.dengine.stdlib.gui.pack/Info +++ b/doomsday/libgui/net.dengine.stdlib.gui.pack/Info @@ -1,5 +1,5 @@ title: Doomsday Script Standard Library: GUI -version: 1.15.5 +version: 1.15.7 license: GPL 3+ tags: core script gui diff --git a/doomsday/libgui/src/graphics/atlas.cpp b/doomsday/libgui/src/graphics/atlas.cpp index da6d2f7..a548ebc 100644 --- a/doomsday/libgui/src/graphics/atlas.cpp +++ b/doomsday/libgui/src/graphics/atlas.cpp @@ -31,7 +31,7 @@ DENG2_PIMPL(Atlas) Size totalSize; int margin; int border; - std::auto_ptr<IAllocator> allocator; + std::unique_ptr<IAllocator> allocator; Image backing; bool needCommit; bool needFullCommit; diff --git a/doomsday/libshell/src/abstractlink.cpp b/doomsday/libshell/src/abstractlink.cpp index 1bb987a..3020e62 100644 --- a/doomsday/libshell/src/abstractlink.cpp +++ b/doomsday/libshell/src/abstractlink.cpp @@ -13,7 +13,7 @@ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser * General Public License for more details. You should have received a copy of * the GNU Lesser General Public License along with this program; if not, see: - * http://www.gnu.org/licenses</small> + * http://www.gnu.org/licenses</small> */ #include "de/shell/AbstractLink" @@ -33,7 +33,7 @@ DENG2_PIMPL(AbstractLink) Time startedTryingAt; TimeDelta timeout; Address peerAddress; - std::auto_ptr<Socket> socket; + std::unique_ptr<Socket> socket; Status status; Time connectedAt; @@ -150,7 +150,7 @@ Packet *AbstractLink::nextPacket() { if(!d->socket->hasIncoming()) return 0; - std::auto_ptr<Message> data(d->socket->receive()); + std::unique_ptr<Message> data(d->socket->receive()); Packet *packet = interpret(*data.get()); if(packet) packet->setFrom(data->address()); return packet; diff --git a/doomsday/net.dengine.base.pack/Info b/doomsday/net.dengine.base.pack/Info index a935a78..768d778 100644 --- a/doomsday/net.dengine.base.pack/Info +++ b/doomsday/net.dengine.base.pack/Info @@ -1,6 +1,6 @@ # Shared resources for all Doomsday applications title: Doomsday Base -version: 1.15.5 +version: 1.15.7 license: GPL 3+ tags: core diff --git a/doomsday/plugins/common/include/dmu_archiveindex.h b/doomsday/plugins/common/include/dmu_archiveindex.h index 2dbafd7..06ccfdb 100644 --- a/doomsday/plugins/common/include/dmu_archiveindex.h +++ b/doomsday/plugins/common/include/dmu_archiveindex.h @@ -41,7 +41,7 @@ public: * * @param elementType DMU element type of the objects to be indexed. */ - ArchiveIndex() : _indexBase(-1), _lut(0) + ArchiveIndex() : _indexBase(-1) {} /** @@ -152,7 +152,7 @@ private: typedef std::vector<MapElementPtr> ElementLut; int _indexBase; - std::auto_ptr<ElementLut> _lut; + std::unique_ptr<ElementLut> _lut; }; ///@{ diff --git a/doomsday/plugins/doom/data/doom2-freedm.mapinfo b/doomsday/plugins/doom/data/doom2-freedm.mapinfo new file mode 100644 index 0000000..21946a8 --- /dev/null +++ b/doomsday/plugins/doom/data/doom2-freedm.mapinfo @@ -0,0 +1,262 @@ +; Episode 1 ------------------------------------------------------------ + +episode MAP01 +name "Hell On Earth" +key h + +map MAP01 lookup HUSTR_1 +next MAP02 +warptrans 1 +sky1 SKY1 0 +par 30 +music D_RUNNIN +titlepatch CWILV00 + +map MAP02 lookup HUSTR_2 +next MAP03 +warptrans 2 +sky1 SKY1 0 +par 90 +music D_STALKS +titlepatch CWILV01 + +map MAP03 lookup HUSTR_3 +next MAP04 +warptrans 3 +sky1 SKY1 0 +par 120 +music D_COUNTD +titlepatch CWILV02 + +map MAP04 lookup HUSTR_4 +next MAP05 +warptrans 4 +sky1 SKY1 0 +par 120 +music D_BETWEE +titlepatch CWILV03 + +map MAP05 lookup HUSTR_5 +next MAP06 +warptrans 5 +sky1 SKY1 0 +par 90 +music D_DOOM +titlepatch CWILV04 + +map MAP06 lookup HUSTR_6 +next MAP07 +warptrans 6 +sky1 SKY1 0 +par 150 +music D_THE_DA +titlepatch CWILV05 + +map MAP07 lookup HUSTR_7 +next MAP08 +warptrans 7 +sky1 SKY1 0 +par 120 +music D_SHAWN +titlepatch CWILV06 + +map MAP08 lookup HUSTR_8 +next MAP09 +warptrans 8 +sky1 SKY1 0 +par 120 +music D_DDTBLU +titlepatch CWILV07 + +map MAP09 lookup HUSTR_9 +next MAP10 +warptrans 9 +sky1 SKY1 0 +par 270 +music D_IN_CIT +titlepatch CWILV08 + +map MAP10 lookup HUSTR_10 +next MAP11 +warptrans 10 +sky1 SKY1 0 +par 90 +music D_DEAD +titlepatch CWILV09 + +map MAP11 lookup HUSTR_11 +next MAP12 +warptrans 11 +sky1 SKY1 0 +par 210 +music D_STLKS2 +titlepatch CWILV10 + +map MAP12 lookup HUSTR_12 +next MAP13 +warptrans 12 +sky1 SKY2 0 +par 150 +music D_THEDA2 +titlepatch CWILV11 + +map MAP13 lookup HUSTR_13 +next MAP14 +warptrans 13 +sky1 SKY2 0 +par 150 +music D_DOOM2 +titlepatch CWILV12 + +map MAP14 lookup HUSTR_14 +next MAP15 +warptrans 14 +sky1 SKY2 0 +par 150 +music D_DDTBL2 +titlepatch CWILV13 + +map MAP15 lookup HUSTR_15 +next MAP16 +secretnext MAP31 +warptrans 15 +sky1 SKY2 0 +par 210 +music D_RUNNI2 +titlepatch CWILV14 + +map MAP16 lookup HUSTR_16 +next MAP17 +warptrans 16 +sky1 SKY2 0 +par 150 +music D_DEAD2 +titlepatch CWILV15 + +map MAP17 lookup HUSTR_17 +next MAP18 +warptrans 17 +sky1 SKY2 0 +par 420 +music D_STLKS3 +titlepatch CWILV16 + +map MAP18 lookup HUSTR_18 +next MAP19 +warptrans 18 +sky1 SKY2 0 +par 150 +music D_ROMERO +titlepatch CWILV17 + +map MAP19 lookup HUSTR_19 +next MAP20 +warptrans 19 +sky1 SKY2 0 +par 210 +music D_SHAWN2 +titlepatch CWILV18 + +map MAP20 lookup HUSTR_20 +next MAP21 +warptrans 20 +sky1 SKY2 0 +par 150 +music D_MESSAG +titlepatch CWILV19 + +map MAP21 lookup HUSTR_21 +next MAP22 +warptrans 21 +sky1 SKY3 0 +par 240 +music D_COUNT2 +titlepatch CWILV20 + +map MAP22 lookup HUSTR_22 +next MAP23 +warptrans 22 +sky1 SKY3 0 +par 150 +music D_DDTBL3 +titlepatch CWILV21 + +map MAP23 lookup HUSTR_23 +next MAP24 +warptrans 23 +sky1 SKY3 0 +par 180 +music D_AMPIE +titlepatch CWILV22 + +map MAP24 lookup HUSTR_24 +next MAP25 +warptrans 24 +sky1 SKY3 0 +par 150 +music D_THEDA3 +titlepatch CWILV23 + +map MAP25 lookup HUSTR_25 +next MAP26 +warptrans 25 +sky1 SKY3 0 +par 150 +music D_ADRIAN +titlepatch CWILV24 + +map MAP26 lookup HUSTR_26 +next MAP27 +warptrans 26 +sky1 SKY3 0 +par 300 +music D_MESSG2 +titlepatch CWILV25 + +map MAP27 lookup HUSTR_27 +next MAP28 +warptrans 27 +sky1 SKY3 0 +par 330 +music D_ROMER2 +titlepatch CWILV26 + +map MAP28 lookup HUSTR_28 +next MAP29 +warptrans 28 +sky1 SKY3 0 +par 420 +music D_TENSE +titlepatch CWILV27 + +map MAP29 lookup HUSTR_29 +next MAP30 +warptrans 29 +sky1 SKY3 0 +par 300 +music D_SHAWN3 +titlepatch CWILV28 + +map MAP30 lookup HUSTR_30 +warptrans 30 +sky1 SKY3 0 +par 180 +music D_OPENIN +titlepatch CWILV29 + +map MAP31 lookup HUSTR_31 +next MAP16 +secretnext MAP32 +warptrans 31 +sky1 SKY3 0 +par 120 +music D_EVIL +titlepatch CWILV30 + +map MAP32 lookup HUSTR_32 +next MAP16 +warptrans 32 +sky1 SKY3 0 +par 30 +music D_ULTIMA +titlepatch CWILV31 diff --git a/doomsday/plugins/doom/defs/doom2-freedm.ded b/doomsday/plugins/doom/defs/doom2-freedm.ded new file mode 100644 index 0000000..6162093 --- /dev/null +++ b/doomsday/plugins/doom/defs/doom2-freedm.ded @@ -0,0 +1,28 @@ +# +# FreeDM - Doomsday Engine definitions +# +# For information about DED syntax and semantics, see http://wiki.dengine.net/w/DED +# + +# Common definitions +Include "jdoom.ded"; + +# MAPINFO interoperability patches +Include "doom2/patchmapinfo.ded"; + +Include "doom1/anim.ded"; +Include "doom2/anim.ded"; +Include "doom2/skies.ded"; +Include "doom2/finales.ded"; +Include "doom1/fonts.ded"; +Include "doom1/materials.ded"; +Include "doom1/materialenvironments.ded"; +Include "doom2/materialenvironments.ded"; +Include "doom1/particles.ded"; +Include "doom2/particles.ded"; +Include "doom1/lights.ded"; +Include "doom2/lights.ded"; +Include "doom2/music.ded"; +Include "doom1/menu.ded"; +Include "doom1/hud.ded"; +Include "doom1/inlude.ded"; diff --git a/doomsday/plugins/doom/include/doomdef.h b/doomsday/plugins/doom/include/doomdef.h index 62e5d92..8868939 100644 --- a/doomsday/plugins/doom/include/doomdef.h +++ b/doomsday/plugins/doom/include/doomdef.h @@ -72,10 +72,11 @@ typedef enum { doom2_plut, doom2_tnt, doom2_hacx, + doom2_freedm, NUM_GAME_MODES } gamemode_t; -// Game mode bits for the above. +// Game mode bits for the above (must match the enum order). #define GM_DOOM_SHAREWARE 0x1 #define GM_DOOM 0x2 #define GM_DOOM_ULTIMATE 0x4 @@ -84,9 +85,10 @@ typedef enum { #define GM_DOOM2_PLUT 0x20 #define GM_DOOM2_TNT 0x40 #define GM_DOOM2_HACX 0x80 +#define GM_DOOM2_FREEDM 0x100 #define GM_ANY_DOOM (GM_DOOM|GM_DOOM_SHAREWARE|GM_DOOM_ULTIMATE|GM_DOOM_CHEX) -#define GM_ANY_DOOM2 (GM_DOOM2|GM_DOOM2_PLUT|GM_DOOM2_TNT|GM_DOOM2_HACX) +#define GM_ANY_DOOM2 (GM_DOOM2|GM_DOOM2_PLUT|GM_DOOM2_TNT|GM_DOOM2_HACX|GM_DOOM2_FREEDM) #define GM_ANY (GM_ANY_DOOM|GM_ANY_DOOM2) #define SCREENWIDTH 320 diff --git a/doomsday/plugins/doom/src/d_api.c b/doomsday/plugins/doom/src/d_api.c index 8704589..fa089a8 100644 --- a/doomsday/plugins/doom/src/d_api.c +++ b/doomsday/plugins/doom/src/d_api.c @@ -99,6 +99,12 @@ int G_RegisterGames(int hookType, int param, void *data) LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER, "$(App.DataPath)/$(GamePlugin.Name)/doom2.mapinfo" }; + GameDef const freeDMDef = { + "doom2-freedm", "doom", + "FreeDM", "Freedoom Project", + LEGACYSAVEGAMENAMEEXP, LEGACYSAVEGAMESUBFOLDER, + "$(App.DataPath)/$(GamePlugin.Name)/doom2-freedm.mapinfo" + }; GameDef const doomUltimateDef = { "doom1-ultimate", "doom", "Ultimate DOOM", "id Software", @@ -144,6 +150,12 @@ int G_RegisterGames(int hookType, int param, void *data) DD_AddGameResource(GID(doom2_plut), RC_PACKAGE, FF_STARTUP, "plutonia.wad", "_DEUTEX_;MAP01;MAP25;MC5;MC11;MC16;MC20"); DD_AddGameResource(GID(doom2_plut), RC_DEFINITION, 0, "doom2-plut.ded", 0); + /* DOOM2 - FreeDM */ + gameIds[doom2_freedm] = DD_DefineGame(&freeDMDef); + DD_AddGameResource(GID(doom2_freedm), RC_PACKAGE, FF_STARTUP, STARTUPPK3, 0); + DD_AddGameResource(GID(doom2_freedm), RC_PACKAGE, FF_STARTUP, "freedm.wad", "MAP01"); + DD_AddGameResource(GID(doom2_freedm), RC_DEFINITION, 0, "doom2-freedm.ded", 0); + /* DOOM2 */ gameIds[doom2] = DD_DefineGame(&doom2Def); DD_AddGameResource(GID(doom2), RC_PACKAGE, FF_STARTUP, STARTUPPK3, 0); @@ -186,6 +198,7 @@ void DP_Load(void) gameIds[doom2_tnt] = DD_GameIdForKey("doom2-tnt"); gameIds[doom2_plut] = DD_GameIdForKey("doom2-plut"); gameIds[doom2_hacx] = DD_GameIdForKey("hacx"); + gameIds[doom2_freedm] = DD_GameIdForKey("doom2-freedm"); Plug_AddHook(HOOK_VIEWPORT_RESHAPE, R_UpdateViewport); } diff --git a/doomsday/sdk-qch.doxy b/doomsday/sdk-qch.doxy index 8c3a9ba..77a42bb 100644 --- a/doomsday/sdk-qch.doxy +++ b/doomsday/sdk-qch.doxy @@ -5,8 +5,8 @@ OUTPUT_DIRECTORY = apidoc-qch/ # Also generate help files for Qt Creator GENERATE_QHP = YES QCH_FILE = "doomsday.qch" -QHP_NAMESPACE = "net.dengine.sdk.1155" -QHP_VIRTUAL_FOLDER = "doomsday-1.15.5" +QHP_NAMESPACE = "net.dengine.sdk.1157" +QHP_VIRTUAL_FOLDER = "doomsday-1.15.7" QHG_LOCATION = "../build/scripts/qhelp.py" # Dynamic HTML doesn't work inside Qt Creator diff --git a/doomsday/tools/shell/shell-gui/src/localserverdialog.cpp b/doomsday/tools/shell/shell-gui/src/localserverdialog.cpp index dca5219..47fc917 100644 --- a/doomsday/tools/shell/shell-gui/src/localserverdialog.cpp +++ b/doomsday/tools/shell/shell-gui/src/localserverdialog.cpp @@ -21,6 +21,7 @@ #include "guishellapp.h" #include <de/libcore.h> #include <de/Socket> +#include <de/CommandLine> #include <de/shell/DoomsdayInfo> #include <QVBoxLayout> #include <QDialogButtonBox> @@ -226,7 +227,15 @@ QStringList LocalServerDialog::additionalOptions() const QStringList opts; opts << "-cmd" << QString("server-password \"%1\"").arg(d->password->text()); opts << "-cmd" << QString("server-public %1").arg(d->announce->isChecked()? 1 : 0); - opts << d->options->toPlainText().split(' ', QString::SkipEmptyParts); + + // Parse the provided options using libcore so quotes and other special + // behavior matches Doomsday. + CommandLine cmdLine; + cmdLine.parse(d->options->toPlainText()); + for(int i = 0; i < cmdLine.count(); ++i) + { + opts << cmdLine.at(i); + } return opts; } @@ -241,7 +250,7 @@ void LocalServerDialog::portChanged() } void LocalServerDialog::configureGameOptions() -{ +{ } void LocalServerDialog::saveState() -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/deng.git _______________________________________________ Pkg-games-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits

