aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backends/fs/abstract-fs-factory.h48
-rw-r--r--backends/fs/abstract-fs.h109
-rw-r--r--backends/fs/amigaos4/amigaos4-fs-factory.cpp16
-rw-r--r--backends/fs/amigaos4/amigaos4-fs-factory.h27
-rw-r--r--backends/fs/amigaos4/amigaos4-fs.cpp164
-rw-r--r--backends/fs/dc/dc-fs.cpp102
-rw-r--r--backends/fs/dc/ronincd-fs-factory.cpp16
-rw-r--r--backends/fs/dc/ronincd-fs-factory.h27
-rw-r--r--backends/fs/ds/ds-fs-factory.cpp29
-rw-r--r--backends/fs/ds/ds-fs-factory.h27
-rw-r--r--backends/fs/ds/ds-fs.cpp230
-rw-r--r--backends/fs/ds/ds-fs.h116
-rw-r--r--backends/fs/fs-factory-maker.cpp113
-rw-r--r--backends/fs/gp32/gp32-fs-factory.cpp16
-rw-r--r--backends/fs/gp32/gp32-fs-factory.h27
-rw-r--r--backends/fs/gp32/gp32-fs.cpp125
-rw-r--r--backends/fs/morphos/abox-fs-factory.cpp16
-rw-r--r--backends/fs/morphos/abox-fs-factory.h27
-rw-r--r--backends/fs/morphos/abox-fs.cpp266
-rw-r--r--backends/fs/palmos/palmos-fs-factory.cpp16
-rw-r--r--backends/fs/palmos/palmos-fs-factory.h27
-rw-r--r--backends/fs/palmos/palmos-fs.cpp137
-rw-r--r--backends/fs/posix/posix-fs-factory.cpp18
-rw-r--r--backends/fs/posix/posix-fs-factory.h27
-rw-r--r--backends/fs/posix/posix-fs.cpp147
-rw-r--r--backends/fs/ps2/ps2-fs-factory.cpp16
-rw-r--r--backends/fs/ps2/ps2-fs-factory.h27
-rw-r--r--backends/fs/ps2/ps2-fs.cpp128
-rw-r--r--backends/fs/psp/psp-fs-factory.cpp16
-rw-r--r--backends/fs/psp/psp-fs-factory.h27
-rw-r--r--backends/fs/psp/psp_fs.cpp108
-rw-r--r--backends/fs/symbian/symbian-fs-factory.cpp18
-rw-r--r--backends/fs/symbian/symbian-fs-factory.h27
-rw-r--r--backends/fs/symbian/symbian-fs.cpp118
-rw-r--r--backends/fs/windows/windows-fs-factory.cpp16
-rw-r--r--backends/fs/windows/windows-fs-factory.h27
-rw-r--r--backends/fs/windows/windows-fs.cpp210
-rwxr-xr-xbackends/platform/PalmOS/Src/launcher/forms/formSelect.cpp4
-rw-r--r--backends/platform/ds/arm9/makefile.in350
-rw-r--r--backends/platform/symbian/res/scummvm.cer21
-rw-r--r--backends/platform/symbian/res/scummvm.key15
-rw-r--r--backends/platform/wince/README-WinCE.txt616
-rw-r--r--backends/plugins/dc/dc-provider.cpp6
-rw-r--r--backends/plugins/posix/posix-provider.cpp6
-rw-r--r--backends/plugins/sdl/sdl-provider.cpp6
-rw-r--r--backends/plugins/win32/win32-provider.cpp6
-rw-r--r--base/commandLine.cpp48
-rw-r--r--common/advancedDetector.cpp6
-rw-r--r--common/file.cpp28
-rw-r--r--common/fs.cpp194
-rw-r--r--common/fs.h120
-rw-r--r--common/iff_container.h4
-rw-r--r--common/keyboard.h266
-rw-r--r--common/md5.cpp11
-rw-r--r--dists/pred.dic7986
-rwxr-xr-xdists/slackware/scummvm.SlackBuild.in58
-rw-r--r--engines/agi/agi_v3.cpp6
-rw-r--r--engines/agi/detection.cpp4
-rw-r--r--engines/agi/wagparser.cpp229
-rw-r--r--engines/agi/wagparser.h288
-rw-r--r--engines/agos/detection.cpp4
-rw-r--r--engines/agos/detection_tables.h4
-rw-r--r--engines/cine/sound.cpp4
-rw-r--r--engines/cine/sound.h4
-rw-r--r--engines/cruise/actor.cpp4
-rw-r--r--engines/cruise/actor.h4
-rw-r--r--engines/cruise/background.cpp4
-rw-r--r--engines/cruise/background.h4
-rw-r--r--engines/cruise/backgroundIncrust.cpp4
-rw-r--r--engines/cruise/backgroundIncrust.h4
-rw-r--r--engines/cruise/cell.cpp4
-rw-r--r--engines/cruise/cell.h4
-rw-r--r--engines/cruise/cruise.cpp4
-rw-r--r--engines/cruise/cruise.h4
-rw-r--r--engines/cruise/cruise_main.cpp4
-rw-r--r--engines/cruise/cruise_main.h4
-rw-r--r--engines/cruise/ctp.cpp4
-rw-r--r--engines/cruise/ctp.h4
-rw-r--r--engines/cruise/dataLoader.cpp4
-rw-r--r--engines/cruise/dataLoader.h4
-rw-r--r--engines/cruise/decompiler.cpp4
-rw-r--r--engines/cruise/delphine-unpack.cpp4
-rw-r--r--engines/cruise/detection.cpp4
-rw-r--r--engines/cruise/font.cpp4
-rw-r--r--engines/cruise/font.h4
-rw-r--r--engines/cruise/fontCharacterTable.cpp4
-rw-r--r--engines/cruise/fontCharacterTable.h4
-rw-r--r--engines/cruise/function.cpp4
-rw-r--r--engines/cruise/function.h4
-rw-r--r--engines/cruise/gfxModule.cpp4
-rw-r--r--engines/cruise/gfxModule.h4
-rw-r--r--engines/cruise/linker.cpp4
-rw-r--r--engines/cruise/linker.h4
-rw-r--r--engines/cruise/mainDraw.cpp4
-rw-r--r--engines/cruise/mainDraw.h4
-rw-r--r--engines/cruise/menu.cpp4
-rw-r--r--engines/cruise/menu.h4
-rw-r--r--engines/cruise/mouse.cpp4
-rw-r--r--engines/cruise/mouse.h4
-rw-r--r--engines/cruise/object.cpp4
-rw-r--r--engines/cruise/object.h4
-rw-r--r--engines/cruise/overlay.cpp4
-rw-r--r--engines/cruise/overlay.h4
-rw-r--r--engines/cruise/perso.cpp4
-rw-r--r--engines/cruise/perso.h4
-rw-r--r--engines/cruise/polys.cpp4
-rw-r--r--engines/cruise/polys.h4
-rw-r--r--engines/cruise/saveload.cpp4
-rw-r--r--engines/cruise/saveload.h4
-rw-r--r--engines/cruise/script.cpp4
-rw-r--r--engines/cruise/script.h4
-rw-r--r--engines/cruise/stack.cpp4
-rw-r--r--engines/cruise/stack.h4
-rw-r--r--engines/cruise/stringSupport.cpp4
-rw-r--r--engines/cruise/stringSupport.h4
-rw-r--r--engines/cruise/various.cpp4
-rw-r--r--engines/cruise/various.h4
-rw-r--r--engines/cruise/vars.cpp4
-rw-r--r--engines/cruise/vars.h4
-rw-r--r--engines/cruise/volume.cpp4
-rw-r--r--engines/cruise/volume.h4
-rw-r--r--engines/gob/init_v3.cpp4
-rw-r--r--engines/kyra/detection.cpp4
-rw-r--r--engines/kyra/kyra_v1.cpp4
-rw-r--r--engines/kyra/kyra_v1.h4
-rw-r--r--engines/kyra/kyra_v2.cpp4
-rw-r--r--engines/kyra/kyra_v2.h4
-rw-r--r--engines/kyra/kyra_v3.cpp4
-rw-r--r--engines/kyra/kyra_v3.h4
-rw-r--r--engines/kyra/resource.cpp10
-rw-r--r--engines/lure/detection.cpp4
-rw-r--r--engines/lure/fights.cpp583
-rw-r--r--engines/lure/fights.h111
-rw-r--r--engines/lure/sound.cpp37
-rw-r--r--engines/lure/sound.h41
-rw-r--r--engines/parallaction/font.cpp4
-rw-r--r--engines/parallaction/sound.cpp4
-rw-r--r--engines/parallaction/sound.h4
-rw-r--r--engines/queen/queen.cpp2
-rw-r--r--engines/saga/detection.cpp4
-rw-r--r--engines/saga/detection_tables.h4
-rw-r--r--engines/saga/displayinfo.h4
-rw-r--r--engines/scumm/detection.cpp14
-rw-r--r--engines/scumm/detection.h4
-rw-r--r--engines/scumm/detection_tables.h4
-rw-r--r--engines/sky/sky.cpp6
-rw-r--r--engines/sword1/sword1.cpp6
-rw-r--r--engines/sword2/sword2.cpp8
-rw-r--r--engines/touche/detection.cpp4
-rw-r--r--graphics/iff.cpp4
-rw-r--r--graphics/iff.h4
-rw-r--r--gui/browser.cpp11
-rw-r--r--gui/launcher.cpp16
-rw-r--r--gui/massadd.cpp6
-rw-r--r--gui/options.cpp21
-rw-r--r--gui/themebrowser.cpp9
-rw-r--r--sound/iff.cpp4
-rw-r--r--sound/iff.h4
-rw-r--r--sound/mods/soundfx.cpp4
-rw-r--r--sound/rate_arm.cpp431
-rw-r--r--sound/rate_arm_asm.s692
161 files changed, 2242 insertions, 12987 deletions
diff --git a/backends/fs/abstract-fs-factory.h b/backends/fs/abstract-fs-factory.h
new file mode 100644
index 0000000000..41bfaaa34b
--- /dev/null
+++ b/backends/fs/abstract-fs-factory.h
@@ -0,0 +1,48 @@
+#ifndef ABSTRACT_FILESYSTEM_FACTORY_H
+#define ABSTRACT_FILESYSTEM_FACTORY_H
+
+#include "common/str.h"
+
+/**
+ * Creates concrete FilesystemNode objects depending on the current architecture.
+ */
+class AbstractFilesystemFactory {
+public:
+ typedef Common::String String;
+
+ /**
+ * Destructor.
+ */
+ virtual ~AbstractFilesystemFactory() {};
+
+ /**
+ * Returns a node representing the "current directory".
+ * If your system does not support this concept, you can either try to
+ * emulate it or simply return some "sensible" default directory node,
+ * e.g. the same value as getRoot() returns.
+ */
+ virtual AbstractFilesystemNode *makeCurrentDirectoryFileNode() const = 0;
+
+ /**
+ * Construct a node based on a path; the path is in the same format as it
+ * would be for calls to fopen().
+ *
+ * Furthermore getNodeForPath(oldNode.path()) should create a new node
+ * identical to oldNode. Hence, we can use the "path" value for persistent
+ * storage e.g. in the config file.
+ *
+ * @param path The path string to create a FilesystemNode for.
+ */
+ virtual AbstractFilesystemNode *makeFileNodePath(const String &path) const = 0;
+
+ /**
+ * Returns a special node representing the filesystem root.
+ * The starting point for any file system browsing.
+ *
+ * On Unix, this will be simply the node for / (the root directory).
+ * On Windows, it will be a special node which "contains" all drives (C:, D:, E:).
+ */
+ virtual AbstractFilesystemNode *makeRootFileNode() const = 0;
+};
+
+#endif /*ABSTRACT_FILESYSTEM_FACTORY_H*/
diff --git a/backends/fs/abstract-fs.h b/backends/fs/abstract-fs.h
index 09b08cfe60..371c38a495 100644
--- a/backends/fs/abstract-fs.h
+++ b/backends/fs/abstract-fs.h
@@ -27,7 +27,6 @@
#include "common/array.h"
#include "common/str.h"
-
#include "common/fs.h"
class AbstractFilesystemNode;
@@ -49,86 +48,88 @@ protected:
typedef FilesystemNode::ListMode ListMode;
/**
- * The parent node of this directory.
- * The parent of the root is the root itself.
- */
- virtual AbstractFilesystemNode *parent() const = 0;
-
- /**
- * The child node with the given name. If no child with this name
+ * Returns the child node with the given name. If no child with this name
* exists, returns 0. When called on a non-directory node, it should
* handle this gracefully by returning 0.
*
+ * Example:
+ * Calling getChild() for a node with path "/foo/bar" using name="file.txt",
+ * would produce a new node with "/foo/bar/file.txt" as path.
+ *
+ * @note This function will append a separator char (\ or /) to the end of the
+ * path if needed.
+ *
* @note Handling calls on non-dir nodes gracefully makes it possible to
* switch to a lazy type detection scheme in the future.
+ *
+ * @param name String containing the name of the child to create a new node.
*/
- virtual AbstractFilesystemNode *child(const String &name) const = 0;
-
+ virtual AbstractFilesystemNode *getChild(const String &name) const = 0;
/**
- * Returns a special node representing the FS root. The starting point for
- * any file system browsing.
- * On Unix, this will be simply the node for / (the root directory).
- * On Windows, it will be a special node which "contains" all drives (C:, D:, E:).
+ * The parent node of this directory.
+ * The parent of the root is the root itself.
*/
- static AbstractFilesystemNode *getRoot();
+ virtual AbstractFilesystemNode *getParent() const = 0;
+public:
/**
- * Returns a node representing the "current directory". If your system does
- * not support this concept, you can either try to emulate it or
- * simply return some "sensible" default directory node, e.g. the same
- * value as getRoot() returns.
+ * Destructor.
*/
- static AbstractFilesystemNode *getCurrentDirectory();
+ virtual ~AbstractFilesystemNode() {}
+ /*
+ * Indicates whether the object refered by this path exists in the filesystem or not.
+ */
+ virtual bool exists() const = 0;
/**
- * Construct a node based on a path; the path is in the same format as it
- * would be for calls to fopen().
- *
- * Furthermore getNodeForPath(oldNode.path()) should create a new node
- * identical to oldNode. Hence, we can use the "path" value for persistent
- * storage e.g. in the config file.
- *
- * @todo: This is of course a place where non-portable code easily will sneak
- * in, because the format of the path used here is not well-defined.
- * So we really should reconsider this API and try to come up with
- * something which is more portable but still flexible enough for our
- * purposes.
+ * Return a list of child nodes of this directory node. If called on a node
+ * that does not represent a directory, false is returned.
+ *
+ * @param list List to put the contents of the directory in.
+ * @param mode Mode to use while listing the directory.
+ * @param hidden Whether to include hidden files or not in the results.
+ *
+ * @return true if succesful, false otherwise (e.g. when the directory does not exist).
*/
- static AbstractFilesystemNode *getNodeForPath(const String &path);
+ virtual bool getChildren(AbstractFSList &list, ListMode mode, bool hidden) const = 0;
+ /**
+ * Returns a human readable path string.
+ *
+ * @note By default, this method returns the value of getName().
+ */
+ virtual String getDisplayName() const { return getName(); }
-public:
- virtual ~AbstractFilesystemNode() {}
-
- virtual String name() const = 0;
+ /**
+ * Returns a string with an architecture dependent path description.
+ */
+ virtual String getName() const = 0;
- // By default, we use the actual file name as 'display name'.
- virtual String displayName() const { return name(); }
-
- virtual bool isValid() const = 0;
-
+ /**
+ * Returns the 'path' of the current node, usable in fopen().
+ */
+ virtual String getPath() const = 0;
+
+ /**
+ * Indicates whether this path refers to a directory or not.
+ */
virtual bool isDirectory() const = 0;
/**
- * Return the 'path' of the current node, usable in fopen(). See also
- * the static getNodeForPath() method.
+ * Indicates whether this path can be read from or not.
*/
- virtual String path() const = 0;
- virtual bool listDir(AbstractFSList &list, ListMode mode) const = 0;
-
+ virtual bool isReadable() const = 0;
+
+ /**
+ * Indicates whether this path can be written to or not.
+ */
+ virtual bool isWritable() const = 0;
/* TODO:
- bool exists();
-
- bool isDirectory();
bool isFile();
-
- bool isReadable();
- bool isWriteable();
*/
};
-
#endif
diff --git a/backends/fs/amigaos4/amigaos4-fs-factory.cpp b/backends/fs/amigaos4/amigaos4-fs-factory.cpp
new file mode 100644
index 0000000000..becbd49003
--- /dev/null
+++ b/backends/fs/amigaos4/amigaos4-fs-factory.cpp
@@ -0,0 +1,16 @@
+#include "backends/fs/amigaos4/amigaos4-fs-factory.h"
+#include "backends/fs/amigaos4/amigaos4-fs.cpp"
+
+DECLARE_SINGLETON(AmigaOSFilesystemFactory);
+
+AbstractFilesystemNode *AmigaOSFilesystemFactory::makeRootFileNode() const {
+ return new AmigaOSFilesystemNode();
+}
+
+AbstractFilesystemNode *AmigaOSFilesystemFactory::makeCurrentDirectoryFileNode() const {
+ return new AmigaOSFilesystemNode();
+}
+
+AbstractFilesystemNode *AmigaOSFilesystemFactory::makeFileNodePath(const String &path) const {
+ return new AmigaOSFilesystemNode(path);
+}
diff --git a/backends/fs/amigaos4/amigaos4-fs-factory.h b/backends/fs/amigaos4/amigaos4-fs-factory.h
new file mode 100644
index 0000000000..ed8af24648
--- /dev/null
+++ b/backends/fs/amigaos4/amigaos4-fs-factory.h
@@ -0,0 +1,27 @@
+#ifndef AMIGAOS_FILESYSTEM_FACTORY_H
+#define AMIGAOS_FILESYSTEM_FACTORY_H
+
+#include "common/singleton.h"
+#include "backends/fs/abstract-fs-factory.h"
+
+/**
+ * Creates AmigaOSFilesystemNode objects.
+ *
+ * Parts of this class are documented in the base interface class, AbstractFilesystemFactory.
+ */
+class AmigaOSFilesystemFactory : public AbstractFilesystemFactory, public Common::Singleton<AmigaOSFilesystemFactory> {
+public:
+ typedef Common::String String;
+
+ virtual AbstractFilesystemNode *makeRootFileNode() const;
+ virtual AbstractFilesystemNode *makeCurrentDirectoryFileNode() const;
+ virtual AbstractFilesystemNode *makeFileNodePath(const String &path) const;
+
+protected:
+ AmigaOSFilesystemFactory() {};
+
+private:
+ friend class Common::Singleton<SingletonBaseType>;
+};
+
+#endif /*AMIGAOS_FILESYSTEM_FACTORY_H*/
diff --git a/backends/fs/amigaos4/amigaos4-fs.cpp b/backends/fs/amigaos4/amigaos4-fs.cpp
index ffed8bc87c..88af467ae5 100644
--- a/backends/fs/amigaos4/amigaos4-fs.cpp
+++ b/backends/fs/amigaos4/amigaos4-fs.cpp
@@ -38,58 +38,76 @@
#include <common/stdafx.h>
#include "common/util.h"
-
#include "engines/engine.h"
#include "backends/fs/abstract-fs.h"
#define ENTER() /* debug(6, "Enter") */
#define LEAVE() /* debug(6, "Leave") */
-
const uint32 kExAllBufferSize = 40960; // TODO: is this okay for sure?
+/**
+ * Implementation of the ScummVM file system API.
+ *
+ * Parts of this class are documented in the base interface class, AbstractFilesystemNode.
+ */
class AmigaOSFilesystemNode : public AbstractFilesystemNode {
- protected:
- BPTR _pFileLock;
- String _sDisplayName;
- bool _bIsDirectory;
- bool _bIsValid;
- String _sPath;
-
- public:
- AmigaOSFilesystemNode();
- AmigaOSFilesystemNode(BPTR pLock, const char *pDisplayName = 0);
- AmigaOSFilesystemNode(const String &p);
-
- // Note: Copy constructor is needed because it duplicates the file lock
- AmigaOSFilesystemNode(const AmigaOSFilesystemNode &node);
-
- virtual ~AmigaOSFilesystemNode();
-
- virtual String displayName() const { return _sDisplayName; };
- virtual String name() const { return _sDisplayName; };
- virtual bool isValid() const { return _bIsValid; };
- virtual bool isDirectory() const { return _bIsDirectory; };
- virtual String path() const { return _sPath; };
-
- virtual bool listDir(AbstractFSList &list, ListMode mode) const;
- virtual AbstractFSList listVolumes() const;
- virtual AbstractFilesystemNode *parent() const;
- virtual AbstractFilesystemNode *child(const String &n) const;
+protected:
+ BPTR _pFileLock;
+ String _sDisplayName;
+ String _sPath;
+ bool _bIsDirectory;
+ bool _bIsValid;
+
+public:
+ /**
+ * Creates a AmigaOSFilesystemNode with the root node as path.
+ */
+ AmigaOSFilesystemNode();
+
+ /**
+ * Creates a AmigaOSFilesystemNode for a given path.
+ *
+ * @param path String with the path the new node should point to.
+ */
+ AmigaOSFilesystemNode(const String &p);
+
+ /**
+ * FIXME: document this constructor.
+ */
+ AmigaOSFilesystemNode(BPTR pLock, const char *pDisplayName = 0);
+
+ /**
+ * Copy constructor.
+ *
+ * @note Needed because it duplicates the file lock
+ */
+ AmigaOSFilesystemNode(const AmigaOSFilesystemNode &node);
+
+ /**
+ * Destructor.
+ */
+ virtual ~AmigaOSFilesystemNode();
+
+ virtual bool exists() const { return true; } //FIXME: this is just a stub
+ virtual String getDisplayName() const { return _sDisplayName; };
+ virtual String getName() const { return _sDisplayName; };
+ virtual String getPath() const { return _sPath; };
+ virtual bool isDirectory() const { return _bIsDirectory; };
+ virtual bool isReadable() const { return true; } //FIXME: this is just a stub
+ virtual bool isValid() const { return _bIsValid; };
+ virtual bool isWritable() const { return true; } //FIXME: this is just a stub
+
+ virtual AbstractFilesystemNode *getChild(const String &n) const;
+ virtual bool getChildren(AbstractFSList &list, ListMode mode) const;
+ virtual AbstractFilesystemNode *getParent() const;
+
+ /**
+ * Creates a list with all the volumes present in the root node.
+ */
+ virtual AbstractFSList listVolumes() const;
};
-AbstractFilesystemNode *AbstractFilesystemNode::getCurrentDirectory() {
- return AbstractFilesystemNode::getRoot();
-}
-
-AbstractFilesystemNode *AbstractFilesystemNode::getRoot() {
- return new AmigaOSFilesystemNode();
-}
-
-AbstractFilesystemNode *AbstractFilesystemNode::getNodeForPath(const String &path) {
- return new AmigaOSFilesystemNode(path);
-}
-
AmigaOSFilesystemNode::AmigaOSFilesystemNode() {
ENTER();
_sDisplayName = "Available Disks";
@@ -100,7 +118,6 @@ AmigaOSFilesystemNode::AmigaOSFilesystemNode() {
LEAVE();
}
-
AmigaOSFilesystemNode::AmigaOSFilesystemNode(const String &p) {
ENTER();
@@ -150,7 +167,6 @@ AmigaOSFilesystemNode::AmigaOSFilesystemNode(const String &p) {
const char c = _sPath.lastChar();
if (c != '/' && c != ':')
_sPath += '/';
-
}
else {
//_bIsDirectory = false;
@@ -170,7 +186,7 @@ AmigaOSFilesystemNode::AmigaOSFilesystemNode(BPTR pLock, const char *pDisplayNam
int bufSize = MAXPATHLEN;
_pFileLock = 0;
- while (1) {
+ while (true) {
char *n = new char[bufSize];
if (IDOS->NameFromLock(pLock, (STRPTR)n, bufSize) != DOSFALSE) {
_sPath = n;
@@ -186,6 +202,7 @@ AmigaOSFilesystemNode::AmigaOSFilesystemNode(BPTR pLock, const char *pDisplayNam
delete [] n;
return;
}
+
bufSize *= 2;
delete [] n;
}
@@ -238,7 +255,31 @@ AmigaOSFilesystemNode::~AmigaOSFilesystemNode() {
LEAVE();
}
-bool AmigaOSFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const {
+AbstractFilesystemNode *AmigaOSFilesystemNode::getChild(const String &n) const {
+ if (!_bIsDirectory) {
+ debug(6, "Not a directory");
+ return 0;
+ }
+
+ String newPath(_sPath);
+
+ if (_sPath.lastChar() != '/')
+ newPath += '/';
+
+ newPath += n;
+ BPTR lock = IDOS->Lock(newPath.c_str(), SHARED_LOCK);
+
+ if (!lock) {
+ debug(6, "Bad path");
+ return 0;
+ }
+
+ IDOS->UnLock(lock);
+
+ return new AmigaOSFilesystemNode(newPath);
+}
+
+bool AmigaOSFilesystemNode::getChildren(AbstractFSList &myList, ListMode mode) const {
ENTER();
if (!_bIsValid) {
@@ -308,10 +349,11 @@ bool AmigaOSFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const
}
LEAVE();
+
return true;
}
-AbstractFilesystemNode *AmigaOSFilesystemNode::parent() const {
+AbstractFilesystemNode *AmigaOSFilesystemNode::getParent() const {
ENTER();
if (!_bIsDirectory) {
@@ -337,33 +379,8 @@ AbstractFilesystemNode *AmigaOSFilesystemNode::parent() const {
node = new AmigaOSFilesystemNode();
LEAVE();
- return node;
-}
-
-AbstractFilesystemNode *AmigaOSFilesystemNode::child(const String &n) const {
- if (!_bIsDirectory) {
- debug(6, "Not a directory");
- return 0;
- }
-
- String newPath(_sPath);
-
- if (_sPath.lastChar() != '/')
- newPath += '/';
-
- newPath += n;
-
- BPTR lock = IDOS->Lock(newPath.c_str(), SHARED_LOCK);
-
- if (!lock) {
- debug(6, "Bad path");
- return 0;
- }
-
- IDOS->UnLock(lock);
-
- return new AmigaOSFilesystemNode(newPath);
+ return node;
}
AbstractFSList AmigaOSFilesystemNode::listVolumes() const {
@@ -431,7 +448,8 @@ AbstractFSList AmigaOSFilesystemNode::listVolumes() const {
IDOS->UnLockDosList(kLockFlags);
LEAVE();
+
return myList;
}
-#endif
+#endif //defined(__amigaos4__)
diff --git a/backends/fs/dc/dc-fs.cpp b/backends/fs/dc/dc-fs.cpp
index 010ca20276..070c9b075b 100644
--- a/backends/fs/dc/dc-fs.cpp
+++ b/backends/fs/dc/dc-fs.cpp
@@ -25,40 +25,62 @@
#if defined(__DC__)
#include "common/stdafx.h"
-
#include "backends/fs/abstract-fs.h"
#include <ronin/cdfs.h>
#include <stdio.h>
#include <unistd.h>
-/*
- * Implementation of the ScummVM file system API based on ronin.
+/**
+ * Implementation of the ScummVM file system API based on POSIX.
+ *
+ * Parts of this class are documented in the base interface class, AbstractFilesystemNode.
*/
-
class RoninCDFilesystemNode : public AbstractFilesystemNode {
protected:
String _displayName;
+ String _path;
bool _isDirectory;
bool _isValid;
- String _path;
public:
+ /**
+ * Creates a RoninCDFilesystemNode with the root node as path.
+ */
RoninCDFilesystemNode();
+
+ /**
+ * Creates a RoninCDFilesystemNode for a given path.
+ *
+ * @param path String with the path the new node should point to.
+ * @param verify true if the isValid and isDirectory flags should be verified during the construction.
+ */
RoninCDFilesystemNode(const String &path, bool verify);
- virtual String displayName() const { return _displayName; }
- virtual String name() const { return _displayName; }
- virtual bool isValid() const { return _isValid; }
+ virtual bool exists() const { return true; } //FIXME: this is just a stub
+ virtual String getDisplayName() const { return _displayName; }
+ virtual String getName() const { return _displayName; }
+ virtual String getPath() const { return _path; }
virtual bool isDirectory() const { return _isDirectory; }
- virtual String path() const { return _path; }
+ virtual bool isReadable() const { return true; } //FIXME: this is just a stub
+ virtual bool isValid() const { return _isValid; }
+ virtual bool isWritable() const { return true; } //FIXME: this is just a stub
- virtual bool listDir(AbstractFSList &list, ListMode mode) const;
- virtual AbstractFilesystemNode *parent() const;
- virtual AbstractFilesystemNode *child(const String &n) const;
+ virtual AbstractFilesystemNode *getChild(const String &n) const;
+ virtual bool getChildren(AbstractFSList &list, ListMode mode) const;
+ virtual AbstractFilesystemNode *getParent() const;
};
-
+/**
+ * Returns the last component of a given path.
+ *
+ * Examples:
+ * /foo/bar.txt would return /bar.txt
+ * /foo/bar/ would return /bar/
+ *
+ * @param str String containing the path.
+ * @return Pointer to the first char of the last component inside str.
+ */
static const char *lastPathComponent(const Common::String &str) {
const char *start = str.c_str();
const char *cur = start + str.size() - 2;
@@ -70,22 +92,6 @@ static const char *lastPathComponent(const Common::String &str) {
return cur + 1;
}
-
-AbstractFilesystemNode *AbstractFilesystemNode::getCurrentDirectory() {
- // Since there is no way to _set_ the current directory,
- // it will always be /...
-
- return getRoot();
-}
-
-AbstractFilesystemNode *AbstractFilesystemNode::getRoot() {
- return new RoninCDFilesystemNode();
-}
-
-AbstractFilesystemNode *AbstractFilesystemNode::getNodeForPath(const String &path) {
- return new RoninCDFilesystemNode(path, true);
-}
-
RoninCDFilesystemNode::RoninCDFilesystemNode() {
// The root dir.
_path = "/";
@@ -118,10 +124,23 @@ RoninCDFilesystemNode::RoninCDFilesystemNode(const String &p, bool verify) {
}
}
-bool RoninCDFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const {
+AbstractFilesystemNode *RoninCDFilesystemNode::getChild(const String &n) const {
+ // FIXME: Pretty lame implementation! We do no error checking to speak
+ // of, do not check if this is a special node, etc.
assert(_isDirectory);
- DIR *dirp = opendir(_path.c_str());
+
+ String newPath(_path);
+ if (_path.lastChar() != '/')
+ newPath += '/';
+ newPath += n;
+
+ return new RoninCDFilesystemNode(newPath, true);
+}
+bool RoninCDFilesystemNode::getChildren(AbstractFSList &myList, ListMode mode) const {
+ assert(_isDirectory);
+
+ DIR *dirp = opendir(_path.c_str());
struct dirent *dp;
if (dirp == NULL)
@@ -150,35 +169,22 @@ bool RoninCDFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const
if (entry._isDirectory)
entry._path += "/";
+
myList.push_back(new RoninCDFilesystemNode(entry));
}
closedir(dirp);
+
return true;
}
-AbstractFilesystemNode *RoninCDFilesystemNode::parent() const {
+AbstractFilesystemNode *RoninCDFilesystemNode::getParent() const {
if (_path == "/")
return 0;
const char *start = _path.c_str();
const char *end = lastPathComponent(_path);
- RoninCDFilesystemNode *p = new RoninCDFilesystemNode(String(start, end - start), false);
-
- return p;
-}
-
-AbstractFilesystemNode *RoninCDFilesystemNode::child(const String &n) const {
- // FIXME: Pretty lame implementation! We do no error checking to speak
- // of, do not check if this is a special node, etc.
- assert(_isDirectory);
- String newPath(_path);
- if (_path.lastChar() != '/')
- newPath += '/';
- newPath += n;
- RoninCDFilesystemNode *p = new RoninCDFilesystemNode(newPath, true);
-
- return p;
+ return new RoninCDFilesystemNode(String(start, end - start), false);
}
#endif // defined(__DC__)
diff --git a/backends/fs/dc/ronincd-fs-factory.cpp b/backends/fs/dc/ronincd-fs-factory.cpp
new file mode 100644
index 0000000000..0229a44c45
--- /dev/null
+++ b/backends/fs/dc/ronincd-fs-factory.cpp
@@ -0,0 +1,16 @@
+#include "backends/fs/dc/ronincd-fs-factory.h"
+#include "backends/fs/dc/dc-fs.cpp"
+
+DECLARE_SINGLETON(RoninCDFilesystemFactory);
+
+AbstractFilesystemNode *RoninCDFilesystemFactory::makeRootFileNode() const {
+ return new RoninCDFilesystemNode();
+}
+
+AbstractFilesystemNode *RoninCDFilesystemFactory::makeCurrentDirectoryFileNode() const {
+ return new RoninCDFilesystemNode();
+}
+
+AbstractFilesystemNode *RoninCDFilesystemFactory::makeFileNodePath(const String &path) const {
+ return new RoninCDFilesystemNode(path, true);
+}
diff --git a/backends/fs/dc/ronincd-fs-factory.h b/backends/fs/dc/ronincd-fs-factory.h
new file mode 100644
index 0000000000..426ef7ef2c
--- /dev/null
+++ b/backends/fs/dc/ronincd-fs-factory.h
@@ -0,0 +1,27 @@
+#ifndef RONINCD_FILESYSTEM_FACTORY_H
+#define RONINCD_FILESYSTEM_FACTORY_H
+
+#include "common/singleton.h"
+#include "backends/fs/abstract-fs-factory.h"
+
+/**
+ * Creates RoninCDFilesystemNode objects.
+ *
+ * Parts of this class are documented in the base interface class, AbstractFilesystemFactory.
+ */
+class RoninCDFilesystemFactory : public AbstractFilesystemFactory, public Common::Singleton<RoninCDFilesystemFactory> {
+public:
+ typedef Common::String String;
+
+ virtual AbstractFilesystemNode *makeRootFileNode() const;
+ virtual AbstractFilesystemNode *makeCurrentDirectoryFileNode() const;
+ virtual AbstractFilesystemNode *makeFileNodePath(const String &path) const;
+
+protected:
+ RoninCDFilesystemFactory() {};
+
+private:
+ friend class Common::Singleton<SingletonBaseType>;
+};
+
+#endif /*RONINCD_FILESYSTEM_FACTORY_H*/
diff --git a/backends/fs/ds/ds-fs-factory.cpp b/backends/fs/ds/ds-fs-factory.cpp
new file mode 100644
index 0000000000..7e64b37411
--- /dev/null
+++ b/backends/fs/ds/ds-fs-factory.cpp
@@ -0,0 +1,29 @@
+#include "backends/fs/ds/ds-fs-factory.h"
+#include "backends/fs/ds/ds-fs.cpp"
+#include "dsmain.h" //for the isGBAMPAvailable() function
+
+DECLARE_SINGLETON(DSFilesystemFactory);
+
+AbstractFilesystemNode *DSFilesystemFactory::makeRootFileNode() const {
+ if (DS::isGBAMPAvailable()) {
+ return new DS::GBAMPFileSystemNode();
+ } else {
+ return new DS::DSFileSystemNode();
+ }
+}
+
+AbstractFilesystemNode *DSFilesystemFactory::makeCurrentDirectoryFileNode() const {
+ if (DS::isGBAMPAvailable()) {
+ return new DS::GBAMPFileSystemNode();
+ } else {
+ return new DS::DSFileSystemNode();
+ }
+}
+
+AbstractFilesystemNode *DSFilesystemFactory::makeFileNodePath(const String &path) const {
+ if (DS::isGBAMPAvailable()) {
+ return new DS::GBAMPFileSystemNode(path);
+ } else {
+ return new DS::DSFileSystemNode(path);
+ }
+}
diff --git a/backends/fs/ds/ds-fs-factory.h b/backends/fs/ds/ds-fs-factory.h
new file mode 100644
index 0000000000..a2e96aa548
--- /dev/null
+++ b/backends/fs/ds/ds-fs-factory.h
@@ -0,0 +1,27 @@
+#ifndef DS_FILESYSTEM_FACTORY_H
+#define DS_FILESYSTEM_FACTORY_H
+
+#include "common/singleton.h"
+#include "backends/fs/abstract-fs-factory.h"
+
+/**
+ * Creates DSFilesystemNode objects.
+ *
+ * Parts of this class are documented in the base interface class, AbstractFilesystemFactory.
+ */
+class DSFilesystemFactory : public AbstractFilesystemFactory, public Common::Singleton<DSFilesystemFactory> {
+public:
+ typedef Common::String String;
+
+ virtual AbstractFilesystemNode *makeRootFileNode() const;
+ virtual AbstractFilesystemNode *makeCurrentDirectoryFileNode() const;
+ virtual AbstractFilesystemNode *makeFileNodePath(const String &path) const;
+
+protected:
+ DSFilesystemFactory() {};
+
+private:
+ friend class Common::Singleton<SingletonBaseType>;
+};
+
+#endif /*DS_FILESYSTEM_FACTORY_H*/
diff --git a/backends/fs/ds/ds-fs.cpp b/backends/fs/ds/ds-fs.cpp
index abfd0397c6..c0138459a9 100644
--- a/backends/fs/ds/ds-fs.cpp
+++ b/backends/fs/ds/ds-fs.cpp
@@ -20,24 +20,18 @@
*
*/
-
#include "stdafx.h"
#include "str.h"
-#include "fs.h"
#include "common/util.h"
//#include <NDS/ARM9/console.h> //basic print funcionality
#include "ds-fs.h"
#include "dsmain.h"
#include "gba_nds_fat.h"
-
namespace DS {
-
-
-
//////////////////////////////////////////////////////////////
-// DSFileSystemNode - Flash ROM file system using Zip files
+// DSFileSystemNode - Flash ROM file system using Zip files //
//////////////////////////////////////////////////////////////
ZipFile* DSFileSystemNode::_zipFile = NULL;
@@ -66,7 +60,6 @@ DSFileSystemNode::DSFileSystemNode(const String& path) {
char disp[128];
char* pathStr = (char *) path.c_str();
-
int lastSlash = 3;
for (int r = 0; r < (int) strlen(pathStr) - 1; r++) {
if (path[r] == '\\') {
@@ -81,13 +74,10 @@ DSFileSystemNode::DSFileSystemNode(const String& path) {
// _isValid = true;
// _isDirectory = false;
-
-
if (!strncmp(pathStr, "ds:/", 4)) {
pathStr += 4;
}
-
if (*pathStr == '\0') {
_isValid = true;
_isDirectory = true;
@@ -130,35 +120,10 @@ DSFileSystemNode::DSFileSystemNode(const String& path, bool isDir) {
}
DSFileSystemNode::DSFileSystemNode(const DSFileSystemNode* node) {
-
+ //TODO: not implemented?
}
-AbstractFilesystemNode* DSFileSystemNode::parent() const {
-// consolePrintf("parent\n");
- DSFileSystemNode *p;
-
- if (_path != "ds:/") {
- char *path = (char *) _path.c_str();
- int lastSlash = 4;
-
- for (int r = 4; r < (int) strlen((char *) path); r++) {
- if (path[r] == '\\') {
- lastSlash = r;
- }
- }
-
- p = new DSFileSystemNode(String(path, lastSlash));
- ((DSFileSystemNode *) (p))->_isDirectory = true;
- } else {
- p = new DSFileSystemNode();
- }
-
- return p;
-
-}
-
-
-AbstractFilesystemNode *DSFileSystemNode::child(const Common::String& n) const {
+AbstractFilesystemNode *DSFileSystemNode::getChild(const Common::String& n) const {
if (_path.lastChar() == '\\') {
return new DSFileSystemNode(_path + n);
} else {
@@ -168,14 +133,10 @@ AbstractFilesystemNode *DSFileSystemNode::child(const Common::String& n) const {
return NULL;
}
-
-bool DSFileSystemNode::listDir(AbstractFSList &dirList, ListMode mode) const {
+bool DSFileSystemNode::getChildren(AbstractFSList &dirList, ListMode mode) const {
// consolePrintf("Listdir\n");
-
-
// consolePrintf("Directory\n");
-
char temp[128];
strcpy(temp, _path.c_str());
@@ -190,14 +151,13 @@ bool DSFileSystemNode::listDir(AbstractFSList &dirList, ListMode mode) const {
/* // This is the root dir, so add the RAM folder
DSFileSystemNode* dsfsn = new DSFileSystemNode("ds:/ram");
dsfsn->_isDirectory = true;
- dirList->push_back(wrap(dsfsn));*/
+ dirList->push_back(wrap(dsfsn));
+*/
}
} else {
_zipFile->changeDirectory(temp);
}
-
-
if (_zipFile->restartFile()) {
do {
char n[128];
@@ -218,12 +178,32 @@ bool DSFileSystemNode::listDir(AbstractFSList &dirList, ListMode mode) const {
return true;
}
+AbstractFilesystemNode* DSFileSystemNode::getParent() const {
+// consolePrintf("parent\n");
+ DSFileSystemNode *p;
+ if (_path != "ds:/") {
+ char *path = (char *) _path.c_str();
+ int lastSlash = 4;
+
+ for (int r = 4; r < (int) strlen((char *) path); r++) {
+ if (path[r] == '\\') {
+ lastSlash = r;
+ }
+ }
+ p = new DSFileSystemNode(String(path, lastSlash));
+ ((DSFileSystemNode *) (p))->_isDirectory = true;
+ } else {
+ p = new DSFileSystemNode();
+ }
+
+ return p;
+}
-/////////////////////////////////////////////////////////////////////////
-// GBAMPFileSystemNode - File system using GBA Movie Player and CF card
-/////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// GBAMPFileSystemNode - File system using GBA Movie Player and CF card //
+//////////////////////////////////////////////////////////////////////////
GBAMPFileSystemNode::GBAMPFileSystemNode() {
_displayName = "mp:/";
@@ -290,35 +270,10 @@ GBAMPFileSystemNode::GBAMPFileSystemNode(const String& path, bool isDirectory) {
GBAMPFileSystemNode::GBAMPFileSystemNode(const GBAMPFileSystemNode* node) {
-
-}
-
-
-AbstractFilesystemNode* GBAMPFileSystemNode::parent() const {
-// consolePrintf("parent\n");
- GBAMPFileSystemNode *p;
-
- if (_path != "mp:/") {
- char *path = (char *) _path.c_str();
- int lastSlash = 4;
-
- for (int r = 4; r < (int) strlen((char *) path); r++) {
- if (path[r] == '/') {
- lastSlash = r;
- }
- }
-
- p = new GBAMPFileSystemNode(String(path, lastSlash));
- p->_isDirectory = true;
- } else {
- p = new GBAMPFileSystemNode();
- }
-
- return p;
-
+ //TODO: not implemented?
}
-AbstractFilesystemNode *GBAMPFileSystemNode::child(const Common::String& n) const {
+AbstractFilesystemNode *GBAMPFileSystemNode::getChild(const Common::String& n) const {
if (_path.lastChar() == '\\') {
return new DSFileSystemNode(_path + n);
} else {
@@ -328,7 +283,7 @@ AbstractFilesystemNode *GBAMPFileSystemNode::child(const Common::String& n) cons
return NULL;
}
-bool GBAMPFileSystemNode::listDir(AbstractFSList& dirList, ListMode mode) const {
+bool GBAMPFileSystemNode::getChildren(AbstractFSList& dirList, ListMode mode) const {
// consolePrintf("Listdir\n");
enum { TYPE_NO_MORE = 0, TYPE_FILE = 1, TYPE_DIR = 2 };
@@ -346,7 +301,6 @@ bool GBAMPFileSystemNode::listDir(AbstractFSList& dirList, ListMode mode) const
pathTemp++;
}
-
// consolePrintf("This dir: %s\n", path);
FAT_chdir(path);
@@ -369,8 +323,6 @@ bool GBAMPFileSystemNode::listDir(AbstractFSList& dirList, ListMode mode) const
// dsfsn->_isDirectory = entryType == DIR;
dirList.push_back((dsfsn));
}
-
-
} else {
// consolePrintf("Skipping %s\n", fname);
}
@@ -385,6 +337,28 @@ bool GBAMPFileSystemNode::listDir(AbstractFSList& dirList, ListMode mode) const
return true;
}
+AbstractFilesystemNode* GBAMPFileSystemNode::getParent() const {
+// consolePrintf("parent\n");
+ GBAMPFileSystemNode *p;
+
+ if (_path != "mp:/") {
+ char *path = (char *) _path.c_str();
+ int lastSlash = 4;
+
+ for (int r = 4; r < (int) strlen((char *) path); r++) {
+ if (path[r] == '/') {
+ lastSlash = r;
+ }
+ }
+
+ p = new GBAMPFileSystemNode(String(path, lastSlash));
+ p->_isDirectory = true;
+ } else {
+ p = new GBAMPFileSystemNode();
+ }
+
+ return p;
+}
// Stdio replacements
#define MAX_FILE_HANDLES 32
@@ -393,9 +367,6 @@ bool inited = false;
DS::fileHandle handle[MAX_FILE_HANDLES];
FILE* std_fopen(const char* name, const char* mode) {
-
-
-
if (!inited) {
for (int r = 0; r < MAX_FILE_HANDLES; r++) {
handle[r].used = false;
@@ -403,9 +374,6 @@ FILE* std_fopen(const char* name, const char* mode) {
inited = true;
currentDir[0] = '\0';
}
-
-
-
char* realName = (char *) name;
@@ -413,7 +381,7 @@ FILE* std_fopen(const char* name, const char* mode) {
if ((name[0] == 'd') && (name[1] == 's') && (name[2] == ':') && (name[3] == '/')) {
realName += 4;
}
-
+
if ((name[0] == 'm') && (name[1] == 'p') && (name[2] == ':') && (name[3] == '/')) {
realName += 4;
}
@@ -421,7 +389,6 @@ FILE* std_fopen(const char* name, const char* mode) {
// consolePrintf("Open file:");
// consolePrintf("'%s', [%s]", realName, mode);
-
if (DS::isGBAMPAvailable()) {
FAT_chdir("/");
@@ -443,10 +410,9 @@ FILE* std_fopen(const char* name, const char* mode) {
return (FILE *) result;
}
-
// Fail to open file for writing. It's in ROM!
-
+
// Allocate a file handle
int r = 0;
while (handle[r].used) r++;
@@ -459,7 +425,6 @@ FILE* std_fopen(const char* name, const char* mode) {
handle[r].sramFile = (DSSaveFile *) DSSaveFileManager::instance()->openSavefile(realName, false);
}
-
if (handle[r].sramFile) {
handle[r].used = true;
handle[r].pos = 0;
@@ -513,6 +478,7 @@ FILE* std_fopen(const char* name, const char* mode) {
return NULL;
}
}
+
void std_fclose(FILE* handle) {
if (DS::isGBAMPAvailable()) {
@@ -528,14 +494,9 @@ void std_fclose(FILE* handle) {
}
size_t std_fread(const void* ptr, size_t size, size_t numItems, FILE* handle) {
-
// consolePrintf("fread %d,%d %d ", size, numItems, ptr);
-
-
if (DS::isGBAMPAvailable()) {
-
-
int bytes = FAT_fread((void *) ptr, size, numItems, (FAT_FILE *) handle);
if (!std_feof(handle)) {
return numItems;
@@ -560,27 +521,24 @@ size_t std_fread(const void* ptr, size_t size, size_t numItems, FILE* handle) {
}
- return item;*/
-
-
+ return item;
+*/
int items = 0;
//for (int r = 0; r < numItems; r++) {
if (!std_feof(handle)) {
-
-
-
/* for (int t = 0; t < size; t++) {
if (feof(handle)) eof = true;
*(((char *) (ptr)) + r * size + t) = getc(handle);
}*/
int left = size * numItems;
int bytesRead = -1;
+
while ((left > 0) && (!FAT_feof((FAT_FILE *) handle))) {
int amount = left > 8192? 8192: left;
// do {
bytesRead = FAT_fread((void *) ptr, 1, amount, (FAT_FILE *) handle);
- /* if (bytesRead == 0) {
+/* if (bytesRead == 0) {
consolePrintf("Pos:%d items:%d num:%d amount:%d read:%d\n", ftell(handle), items, numItems, amount, bytesRead);
left++;
@@ -592,27 +550,24 @@ size_t std_fread(const void* ptr, size_t size, size_t numItems, FILE* handle) {
fread(ptr, 1024, 1, handle);
swiWaitForVBlank();
//while (true);
- }*/
- //} while (bytesRead == 0);
+ }
+
+ } while (bytesRead == 0);
+*/
left -= bytesRead;
ptr = ((char *) (ptr)) + bytesRead;
}
items = numItems - (left / size);
-
-
-
-
+
// FAT_fread((void *) ptr, size, 1, ((int) (handle)) - 1);
- // ptr = ((char *) (ptr)) + size;
-
+// ptr = ((char *) (ptr)) + size;
}
- //}
+// }
// consolePrintf("...done %d \n", items)
return items;
-
}
if (handle->sramFile) {
@@ -630,7 +585,6 @@ size_t std_fread(const void* ptr, size_t size, size_t numItems, FILE* handle) {
return bytes / size;
}
-
if (handle->pos + size * numItems > handle->size) {
numItems = (handle->size - handle->pos) / size;
if (numItems < 0) numItems = 0;
@@ -639,10 +593,8 @@ size_t std_fread(const void* ptr, size_t size, size_t numItems, FILE* handle) {
// consolePrintf("read %d ", size * numItems);
memcpy((void *) ptr, handle->data + handle->pos, size * numItems);
-
handle->pos += size * numItems;
-
return numItems;
}
@@ -657,7 +609,6 @@ size_t std_fwrite(const void* ptr, size_t size, size_t numItems, FILE* handle) {
//consolePrintf("fwrite size=%d\n", size * numItems);
if (DS::isGBAMPAvailable()) {
-
FAT_fwrite(((char *) (ptr)), size, numItems, (FAT_FILE *) handle);
return numItems;
@@ -675,7 +626,6 @@ size_t std_fwrite(const void* ptr, size_t size, size_t numItems, FILE* handle) {
return numItems;
}
-
if (handle->sramFile) {
handle->sramFile->write(ptr, size);
return size;
@@ -704,6 +654,7 @@ bool std_feof(FILE* handle) {
}
void std_fflush(FILE* handle) {
+ //FIXME: not implemented?
// consolePrintf("fflush ");
}
@@ -711,7 +662,6 @@ char* std_fgets(char* str, int size, FILE* file) {
// consolePrintf("fgets file=%d ", file);
if (DS::isGBAMPAvailable()) {
-
char* s = str;
while ((*s++ = std_getc(file)) >= 32) {
// consolePrintf("%d ", *s);
@@ -723,7 +673,6 @@ char* std_fgets(char* str, int size, FILE* file) {
return str;
}
-
if (file->sramFile) {
file->pos--;
int p = -1;
@@ -743,7 +692,6 @@ char* std_fgets(char* str, int size, FILE* file) {
}
long int std_ftell(FILE* handle) {
-
if (DS::isGBAMPAvailable()) {
return FAT_ftell((FAT_FILE *) handle);
}
@@ -758,39 +706,30 @@ int std_fseek(FILE* handle, long int offset, int whence) {
return FAT_fseek((FAT_FILE *) handle, offset, whence);
}
-
switch (whence) {
- case SEEK_CUR: {
+ case SEEK_CUR:
handle->pos += offset;
break;
- }
-
- case SEEK_SET: {
+ case SEEK_SET:
handle->pos = offset;
break;
- }
-
- case SEEK_END: {
+ case SEEK_END:
handle->pos = handle->size + offset;
break;
- }
-
- default: {
+ default:
handle->pos = offset;
break;
- }
-
}
return 0;
}
void std_clearerr(FILE* handle) {
+ //FIXME: not implemented?
// consolePrintf("clearerr ");
}
int std_getc(FILE* handle) {
-
if (DS::isGBAMPAvailable()) {
char c;
FAT_fread(&c, 1, 1, (FAT_FILE *) handle);
@@ -852,24 +791,3 @@ int std_ferror(FILE* handle) {
}
} // namespace DS
-
-// These functions are added to AbstractFileSystemNode and are therefore outside
-// the DS namespace.
-
-AbstractFilesystemNode *AbstractFilesystemNode::getCurrentDirectory() {
-// consolePrintf("New node");
-
- if (DS::isGBAMPAvailable()) {
- return new DS::GBAMPFileSystemNode();
- } else {
- return new DS::DSFileSystemNode();
- }
-}
-
-AbstractFilesystemNode* AbstractFilesystemNode::getNodeForPath(const String& path) {
- if (DS::isGBAMPAvailable()) {
- return new DS::GBAMPFileSystemNode(path);
- } else {
- return new DS::DSFileSystemNode(path);
- }
-}
diff --git a/backends/fs/ds/ds-fs.h b/backends/fs/ds/ds-fs.h
index ef651b7ea7..e3014d0d2e 100644
--- a/backends/fs/ds/ds-fs.h
+++ b/backends/fs/ds/ds-fs.h
@@ -23,8 +23,6 @@
#ifndef _DS_FS_H
#define _DS_FS_H
-
-
//#include <NDS/ARM9/console.h>
#include "fs.h"
#include "zipreader.h"
@@ -32,81 +30,134 @@
#include "scummconsole.h"
#include "gba_nds_fat.h"
#include "backends/fs/abstract-fs.h"
-//#include "backends/fs/fs.h"
namespace DS {
/**
+ * Implementation of the ScummVM file system API.
* This class is used when a Flash cart is in use.
+ *
+ * Parts of this class are documented in the base interface class, AbstractFilesystemNode.
*/
class DSFileSystemNode : public AbstractFilesystemNode {
protected:
- static ZipFile* _zipFile;
-
typedef class Common::String String;
+ static ZipFile* _zipFile;
+
String _displayName;
+ String _path;
bool _isDirectory;
bool _isValid;
- String _path;
int _refCountVal;
public:
+ /**
+ * Creates a DSFilesystemNode with the root node as path.
+ */
DSFileSystemNode();
+
+ /**
+ * Creates a DSFilesystemNode for a given path.
+ *
+ * @param path String with the path the new node should point to.
+ */
DSFileSystemNode(const String &path);
- DSFileSystemNode(const DSFileSystemNode *node);
+
+ /**
+ * Creates a DSFilesystemNode for a given path.
+ *
+ * @param path String with the path the new node should point to.
+ * @param path true if path is a directory, false otherwise.
+ */
DSFileSystemNode(const String& path, bool isDir);
- virtual String displayName() const { return _displayName; }
- virtual String name() const { return _displayName; }
- virtual bool isValid() const { return _isValid; }
+ /**
+ * Copy constructor.
+ */
+ DSFileSystemNode(const DSFileSystemNode *node);
+
+ virtual bool exists() const { return true; } //FIXME: this is just a stub
+ virtual String getDisplayName() const { return _displayName; }
+ virtual String getName() const { return _displayName; }
+ virtual String getPath() const { return _path; }
virtual bool isDirectory() const { return _isDirectory; }
- virtual String path() const { return _path; }
+ virtual bool isReadable() const { return true; } //FIXME: this is just a stub
+ virtual bool isValid() const { return _isValid; }
+ virtual bool isWritable() const { return true; } //FIXME: this is just a stub
- virtual bool listDir(AbstractFSList &list, ListMode mode = FilesystemNode::kListDirectoriesOnly) const;
- virtual AbstractFilesystemNode *parent() const;
+ /**
+ * Returns a copy of this node.
+ */
virtual AbstractFilesystemNode *clone() const { return new DSFileSystemNode(this); }
- virtual AbstractFilesystemNode *child(const Common::String& name) const;
+ virtual AbstractFilesystemNode *getChild(const Common::String& name) const;
+ virtual bool getChildren(AbstractFSList &list, ListMode mode = FilesystemNode::kListDirectoriesOnly) const;
+ virtual AbstractFilesystemNode *getParent() const;
+
+ /**
+ * Returns the zip file this node points to.
+ * TODO: check this documentation.
+ */
static ZipFile* getZip() { return _zipFile; }
};
-
-/**
+ /**
+ * Implementation of the ScummVM file system API.
* This class is used when the GBAMP (GBA Movie Player) is used with a CompactFlash card.
+ *
+ * Parts of this class are documented in the base interface class, AbstractFilesystemNode.
*/
class GBAMPFileSystemNode : public AbstractFilesystemNode {
protected:
typedef class Common::String String;
String _displayName;
+ String _path;
bool _isDirectory;
bool _isValid;
- String _path;
-
int _refCountVal;
public:
+ /**
+ * Creates a GBAMPFilesystemNode with the root node as path.
+ */
GBAMPFileSystemNode();
+
+ /**
+ * Creates a GBAMPFilesystemNode for a given path.
+ *
+ * @param path String with the path the new node should point to.
+ */
GBAMPFileSystemNode(const String &path);
+
+ /**
+ * Creates a DSFilesystemNode for a given path.
+ *
+ * @param path String with the path the new node should point to.
+ * @param path true if path is a directory, false otherwise.
+ */
GBAMPFileSystemNode(const String &path, bool isDirectory);
+
+ /**
+ * Copy constructor.
+ */
GBAMPFileSystemNode(const GBAMPFileSystemNode *node);
- virtual String displayName() const { return _displayName; }
- virtual String name() const { return _displayName; }
-
- virtual bool isValid() const { return _isValid; }
+ virtual String getDisplayName() const { return _displayName; }
+ virtual String getName() const { return _displayName; }
+ virtual String getPath() const { return _path; }
virtual bool isDirectory() const { return _isDirectory; }
- virtual String path() const { return _path; }
- virtual bool listDir(AbstractFSList &list, ListMode mode = FilesystemNode::kListDirectoriesOnly) const;
- virtual AbstractFilesystemNode *parent() const;
- virtual AbstractFilesystemNode *clone() const { return new GBAMPFileSystemNode(this); }
- virtual AbstractFilesystemNode *child(const Common::String& name) const;
+ virtual bool isValid() const { return _isValid; }
+ /**
+ * Returns a copy of this node.
+ */
+ virtual AbstractFilesystemNode *clone() const { return new GBAMPFileSystemNode(this); }
+ virtual AbstractFilesystemNode *getChild(const Common::String& name) const;
+ virtual bool getChildren(AbstractFSList &list, ListMode mode = FilesystemNode::kListDirectoriesOnly) const;
+ virtual AbstractFilesystemNode *getParent() const;
};
-
-
-
struct fileHandle {
int pos;
bool used;
@@ -116,7 +167,6 @@ struct fileHandle {
DSSaveFile* sramFile;
};
-
#undef stderr
#undef stdout
#undef stdin
@@ -140,6 +190,6 @@ void std_clearerr(FILE* handle);
void std_cwd(char* dir);
void std_fflush(FILE* handle);
-}
+} //namespace DS
-#endif
+#endif //_DS_FS_H
diff --git a/backends/fs/fs-factory-maker.cpp b/backends/fs/fs-factory-maker.cpp
new file mode 100644
index 0000000000..bae3d1a30a
--- /dev/null
+++ b/backends/fs/fs-factory-maker.cpp
@@ -0,0 +1,113 @@
+#include "backends/fs/abstract-fs-factory.h"
+
+/*
+ * All the following includes choose, at compile time, which specific backend will be used
+ * during the execution of the ScummVM.
+ *
+ * It has to be done this way because not all the necessary libraries will be available in
+ * all build environments. Additionally, this results in smaller binaries.
+ */
+#if defined(__amigaos4__)
+ #include "backends/fs/amigaos4/amigaos4-fs-factory.cpp"
+#endif
+
+#if defined(__DC__)
+ #include "backends/fs/dc/ronincd-fs-factory.cpp"
+#endif
+
+#if defined(__DS__)
+ #include "backends/fs/ds/ds-fs-factory.cpp"
+#endif
+
+#if defined(__GP32__)
+ #include "backends/fs/gp32/gp32-fs-factory.cpp"
+#endif
+
+#if defined(__MORPHOS__)
+ #include "backends/fs/morphos/abox-fs-factory.cpp"
+#endif
+
+#if defined(PALMOS_MODE)
+ #include "backends/fs/palmos/palmos-fs-factory.cpp"
+#endif
+
+#if defined(__PLAYSTATION2__)
+ #include "backends/fs/ps2/ps2-fs-factory.cpp"
+#endif
+
+#if defined(__PSP__)
+ #include "backends/fs/psp/psp-fs-factory.cpp"
+#endif
+
+#if defined(__SYMBIAN32__)
+ #include "backends/fs/symbian/symbian-fs-factory.cpp"
+#endif
+
+#if defined(UNIX)
+ #include "backends/fs/posix/posix-fs-factory.cpp"
+#endif
+
+#if defined(WIN32)
+ #include "backends/fs/windows/windows-fs-factory.cpp"
+#endif
+
+/**
+ * Creates concrete FilesystemFactory objects depending on the current architecture.
+ */
+class FilesystemFactoryMaker {
+public:
+
+ /**
+ * Returns the correct concrete factory depending on the current build architecture.
+ */
+ static AbstractFilesystemFactory *makeFactory();
+
+protected:
+ FilesystemFactoryMaker() {}; // avoid instances of this class
+};
+
+AbstractFilesystemFactory *FilesystemFactoryMaker::makeFactory(){
+ #if defined(__amigaos4__)
+ return &AmigaOSFilesystemFactory::instance();
+ #endif
+
+ #if defined(__DC__)
+ return &RoninCDFilesystemFactory::instance();
+ #endif
+
+ #if defined(__DS__)
+ return &DSFilesystemFactory::instance();
+ #endif
+
+ #if defined(__GP32__)
+ return &GP32FilesystemFactory::instance();
+ #endif
+
+ #if defined(__MORPHOS__)
+ return &ABoxFilesystemFactory::instance();
+ #endif
+
+ #if defined(PALMOS_MODE)
+ return &PalmOSFilesystemFactory::instance();
+ #endif
+
+ #if defined(__PLAYSTATION2__)
+ return &Ps2FilesystemFactory::instance();
+ #endif
+
+ #if defined(__PSP__)
+ return &PSPFilesystemFactory::instance();
+ #endif
+
+ #if defined(__SYMBIAN32__)
+ return &SymbianFilesystemFactory::instance();
+ #endif
+
+ #if defined(UNIX)
+ return &POSIXFilesystemFactory::instance();
+ #endif
+
+ #if defined(WIN32)
+ return &WindowsFilesystemFactory::instance();
+ #endif
+}
diff --git a/backends/fs/gp32/gp32-fs-factory.cpp b/backends/fs/gp32/gp32-fs-factory.cpp
new file mode 100644
index 0000000000..6328836c0e
--- /dev/null
+++ b/backends/fs/gp32/gp32-fs-factory.cpp
@@ -0,0 +1,16 @@
+#include "backends/fs/gp32/gp32-fs-factory.h"
+#include "backends/fs/gp32/gp32-fs.cpp"
+
+DECLARE_SINGLETON(GP32FilesystemFactory);
+
+AbstractFilesystemNode *GP32FilesystemFactory::makeRootFileNode() const {
+ return new GP32FilesystemNode();
+}
+
+AbstractFilesystemNode *GP32FilesystemFactory::makeCurrentDirectoryFileNode() const {
+ return new GP32FilesystemNode();
+}
+
+AbstractFilesystemNode *GP32FilesystemFactory::makeFileNodePath(const String &path) const {
+ return new GP32FilesystemNode(path);
+}
diff --git a/backends/fs/gp32/gp32-fs-factory.h b/backends/fs/gp32/gp32-fs-factory.h
new file mode 100644
index 0000000000..fc15b52bc6
--- /dev/null
+++ b/backends/fs/gp32/gp32-fs-factory.h
@@ -0,0 +1,27 @@
+#ifndef GP32_FILESYSTEM_FACTORY_H
+#define GP32_FILESYSTEM_FACTORY_H
+
+#include "common/singleton.h"
+#include "backends/fs/abstract-fs-factory.h"
+
+/**
+ * Creates GP32FilesystemNode objects.
+ *
+ * Parts of this class are documented in the base interface class, AbstractFilesystemFactory.
+ */
+class GP32FilesystemFactory : public AbstractFilesystemFactory, public Common::Singleton<GP32FilesystemFactory> {
+public:
+ typedef Common::String String;
+
+ virtual AbstractFilesystemNode *makeRootFileNode() const;
+ virtual AbstractFilesystemNode *makeCurrentDirectoryFileNode() const;
+ virtual AbstractFilesystemNode *makeFileNodePath(const String &path) const;
+
+protected:
+ GP32FilesystemFactory() {};
+
+private:
+ friend class Common::Singleton<SingletonBaseType>;
+};
+
+#endif /*GP32_FILESYSTEM_FACTORY_H*/
diff --git a/backends/fs/gp32/gp32-fs.cpp b/backends/fs/gp32/gp32-fs.cpp
index 017fa98349..92968b5976 100644
--- a/backends/fs/gp32/gp32-fs.cpp
+++ b/backends/fs/gp32/gp32-fs.cpp
@@ -24,38 +24,80 @@
*/
#include "stdafx.h"
-
#include "backends/fs/abstract-fs.h"
+#define MAX_PATH_SIZE 256
+
+/**
+ * Implementation of the ScummVM file system API.
+ *
+ * Parts of this class are documented in the base interface class, AbstractFilesystemNode.
+ */
class GP32FilesystemNode : public AbstractFilesystemNode {
protected:
String _displayName;
+ String _path;
bool _isDirectory;
bool _isRoot;
- String _path;
public:
+ /**
+ * Creates a GP32FilesystemNode with the root node as path.
+ */
GP32FilesystemNode();
+
+ /**
+ * Creates a GP32FilesystemNode for a given path.
+ *
+ * @param path String with the path the new node should point to.
+ */
GP32FilesystemNode(const String &path);
- virtual String displayName() const { return _displayName; }
- virtual String name() const { return _displayName; }
+ virtual String getDisplayName() const { return _displayName; }
+ virtual String getName() const { return _displayName; }
+ virtual String getPath() const { return _path; }
+ virtual bool isDirectory() const { return _isDirectory; }
// FIXME: isValid should return false if this Node can't be used!
- // client code can rely on the return value.
+ // so client code can rely on the return value.
+ virtual bool isReadable() const { return true; } //FIXME: this is just a stub
virtual bool isValid() const { return true; }
- virtual bool isDirectory() const { return _isDirectory; }
- virtual String path() const { return _path; }
+ virtual bool isWritable() const { return true; } //FIXME: this is just a stub
- virtual bool listDir(AbstractFSList &list, ListMode mode) const;
- virtual AbstractFilesystemNode *parent() const;
- virtual AbstractFilesystemNode *child(const String &n) const;
+ virtual AbstractFilesystemNode *getChild(const String &n) const;
+ virtual bool getChildren(AbstractFSList &list, ListMode mode) const;
+ virtual AbstractFilesystemNode *getParent() const;
};
-#define MAX_PATH_SIZE 256
-
const char gpRootPath[] = "gp:\\";
//char gpCurrentPath[MAX_PATH_SIZE] = "gp:\\"; // must end with '\'
+/**
+ * Returns the last component of a given path.
+ *
+ * Examples:
+ * gp:\foo\bar.txt would return "\bar.txt"
+ * gp:\foo\bar\ would return "\bar\"
+ *
+ * @param str Path to obtain the last component from.
+ * @return Pointer to the first char of the last component inside str.
+ */
+static const char *lastPathComponent(const Common::String &str) {
+ const char *start = str.c_str();
+ const char *cur = start + str.size() - 2;
+
+ while (cur >= start && *cur != '\\') {
+ --cur;
+ }
+
+ return cur + 1;
+}
+
+/**
+ * FIXME: document this function.
+ *
+ * @param path
+ * @param convPath
+ */
int gpMakePath(const char *path, char *convPath) {
// copy root or current directory
const char *p;
@@ -106,18 +148,6 @@ int gpMakePath(const char *path, char *convPath) {
return 0;
}
-AbstractFilesystemNode *AbstractFilesystemNode::getCurrentDirectory() {
- return AbstractFilesystemNode::getRoot();
-}
-
-AbstractFilesystemNode *AbstractFilesystemNode::getRoot() {
- return new GP32FilesystemNode();
-}
-
-AbstractFilesystemNode *AbstractFilesystemNode::getNodeForPath(const String &path) {
- return new GP32FilesystemNode(path);
-}
-
GP32FilesystemNode::GP32FilesystemNode() {
_isDirectory = true;
_isRoot = true;
@@ -132,8 +162,8 @@ GP32FilesystemNode::GP32FilesystemNode(const String &path) {
gpMakePath(path.c_str(), convPath);
_path = convPath;
-
pos = convPath;
+
while (*pos)
if (*pos++ == '\\')
dsplName = pos;
@@ -150,14 +180,25 @@ GP32FilesystemNode::GP32FilesystemNode(const String &path) {
_isDirectory = true;
}
-bool GP32FilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const {
+AbstractFilesystemNode *GP32FilesystemNode::getChild(const String &n) const {
+ // FIXME: Pretty lame implementation! We do no error checking to speak
+ // of, do not check if this is a special node, etc.
+ assert(_isDirectory);
+
+ String newPath(_path);
+ if (_path.lastChar() != '\\')
+ newPath += '\\';
+ newPath += n;
+
+ return new GP32FilesystemNode(newPath);
+}
+
+bool GP32FilesystemNode::getChildren(AbstractFSList &myList, ListMode mode) const {
assert(_isDirectory);
GPDIRENTRY dirEntry;
GPFILEATTR attr;
-
GP32FilesystemNode entry;
-
uint32 read;
if (mode == FilesystemNode::kListAll)
@@ -168,9 +209,11 @@ bool GP32FilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const {
int startIdx = 0; // current file
String listDir(_path);
//listDir += "/";
+
while (GpDirEnumList(listDir.c_str(), startIdx++, 1, &dirEntry, &read) == SM_OK) {
if (dirEntry.name[0] == '.')
continue;
+
entry._displayName = dirEntry.name;
entry._path = _path;
entry._path += dirEntry.name;
@@ -194,18 +237,7 @@ bool GP32FilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const {
return true;
}
-static const char *lastPathComponent(const Common::String &str) {
- const char *start = str.c_str();
- const char *cur = start + str.size() - 2;
-
- while (cur >= start && *cur != '\\') {
- --cur;
- }
-
- return cur + 1;
-}
-
-AbstractFilesystemNode *GP32FilesystemNode::parent() const {
+AbstractFilesystemNode *GP32FilesystemNode::getParent() const {
if(_isRoot)
return 0;
@@ -218,16 +250,3 @@ AbstractFilesystemNode *GP32FilesystemNode::parent() const {
return p;
}
-
-AbstractFilesystemNode *GP32FilesystemNode::child(const String &n) const {
- // FIXME: Pretty lame implementation! We do no error checking to speak
- // of, do not check if this is a special node, etc.
- assert(_isDirectory);
- String newPath(_path);
- if (_path.lastChar() != '\\')
- newPath += '\\';
- newPath += n;
- GP32FilesystemNode *p = new GP32FilesystemNode(newPath);
-
- return p;
-}
diff --git a/backends/fs/morphos/abox-fs-factory.cpp b/backends/fs/morphos/abox-fs-factory.cpp
new file mode 100644
index 0000000000..9de810c361
--- /dev/null
+++ b/backends/fs/morphos/abox-fs-factory.cpp
@@ -0,0 +1,16 @@
+#include "backends/fs/morphos/abox-fs-factory.h"
+#include "backends/fs/morphos/abox-fs.cpp"
+
+DECLARE_SINGLETON(ABoxFilesystemFactory);
+
+AbstractFilesystemNode *ABoxFilesystemFactory::makeRootFileNode() const {
+ return new ABoxFilesystemNode();
+}
+
+AbstractFilesystemNode *ABoxFilesystemFactory::makeCurrentDirectoryFileNode() const {
+ return new ABoxFilesystemNode();
+}
+
+AbstractFilesystemNode *ABoxFilesystemFactory::makeFileNodePath(const String &path) const {
+ return new ABoxFilesystemNode(path);
+}
diff --git a/backends/fs/morphos/abox-fs-factory.h b/backends/fs/morphos/abox-fs-factory.h
new file mode 100644
index 0000000000..35f4472b8b
--- /dev/null
+++ b/backends/fs/morphos/abox-fs-factory.h
@@ -0,0 +1,27 @@
+#ifndef ABOX_FILESYSTEM_FACTORY_H
+#define ABOX_FILESYSTEM_FACTORY_H
+
+#include "common/singleton.h"
+#include "backends/fs/abstract-fs-factory.h"
+
+/**
+ * Creates ABoxFilesystemNode objects.
+ *
+ * Parts of this class are documented in the base interface class, AbstractFilesystemFactory.
+ */
+class ABoxFilesystemFactory : public AbstractFilesystemFactory, public Common::Singleton<ABoxFilesystemFactory> {
+public:
+ typedef Common::String String;
+
+ virtual AbstractFilesystemNode *makeRootFileNode() const;
+ virtual AbstractFilesystemNode *makeCurrentDirectoryFileNode() const;
+ virtual AbstractFilesystemNode *makeFileNodePath(const String &path) const;
+
+protected:
+ ABoxFilesystemFactory() {};
+
+private:
+ friend class Common::Singleton<SingletonBaseType>;
+};
+
+#endif /*ABOX_FILESYSTEM_FACTORY_H*/
diff --git a/backends/fs/morphos/abox-fs.cpp b/backends/fs/morphos/abox-fs.cpp
index 8206e83030..8f46f9a9a8 100644
--- a/backends/fs/morphos/abox-fs.cpp
+++ b/backends/fs/morphos/abox-fs.cpp
@@ -35,52 +35,66 @@
#include "base/engine.h"
#include "backends/fs/abstract-fs.h"
-/*
+/**
* Implementation of the ScummVM file system API based on the MorphOS A-Box API.
+ *
+ * Parts of this class are documented in the base interface class, AbstractFilesystemNode.
*/
-
class ABoxFilesystemNode : public AbstractFilesystemNode {
- protected:
- BPTR _lock;
- String _displayName;
- bool _isDirectory;
- bool _isValid;
- String _path;
-
- public:
- ABoxFilesystemNode();
- ABoxFilesystemNode(BPTR lock, CONST_STRPTR display_name = NULL);
- ABoxFilesystemNode(const String &p);
- ABoxFilesystemNode(const ABoxFilesystemNode &node);
-
- ~ABoxFilesystemNode();
-
- virtual String displayName() const { return _displayName; }
- virtual String name() const { return _displayName; };
- virtual bool isValid() const { return _isValid; }
- virtual bool isDirectory() const { return _isDirectory; }
- virtual String path() const { return _path; }
-
- virtual bool listDir(AbstractFSList &list, ListMode mode) const;
- static AbstractFSList listRoot();
- virtual AbstractFilesystemNode *parent() const;
- virtual AbstractFilesystemNode *child(const String &name) const;
+protected:
+ BPTR _lock;
+ String _displayName;
+ String _path;
+ bool _isDirectory;
+ bool _isValid;
+
+public:
+ /**
+ * Creates a ABoxFilesystemNode with the root node as path.
+ */
+ ABoxFilesystemNode();
+
+ /**
+ * Creates a ABoxFilesystemNode for a given path.
+ *
+ * @param path String with the path the new node should point to.
+ */
+ ABoxFilesystemNode(const String &p);
+
+ /**
+ * FIXME: document this constructor.
+ */
+ ABoxFilesystemNode(BPTR lock, CONST_STRPTR display_name = NULL);
+
+ /**
+ * Copy constructor.
+ */
+ ABoxFilesystemNode(const ABoxFilesystemNode &node);
+
+ /**
+ * Destructor.
+ */
+ ~ABoxFilesystemNode();
+
+ virtual bool exists() const { return true; } //FIXME: this is just a stub
+ virtual String getDisplayName() const { return _displayName; }
+ virtual String getName() const { return _displayName; };
+ virtual String getPath() const { return _path; }
+ virtual bool isDirectory() const { return _isDirectory; }
+ virtual bool isReadable() const { return true; } //FIXME: this is just a stub
+ virtual bool isValid() const { return _isValid; }
+ virtual bool isWritable() const { return true; } //FIXME: this is just a stub
+
+ virtual AbstractFilesystemNode *getChild(const String &name) const;
+ virtual bool getChildren(AbstractFSList &list, ListMode mode) const;
+ virtual AbstractFilesystemNode *getParent() const;
+
+ /**
+ * Return the list of child nodes for the root node.
+ */
+ static AbstractFSList getRootChildren();
};
-
-AbstractFilesystemNode *AbstractFilesystemNode::getCurrentDirectory() {
- return AbstractFilesystemNode::getRoot();
-}
-
-AbstractFilesystemNode *AbstractFilesystemNode::getNodeForPath(const String &path) {
- return new ABoxFilesystemNode(path);
-}
-
-AbstractFilesystemNode *AbstractFilesystemNode::getRoot()
-{
- return new ABoxFilesystemNode();
-}
-
ABoxFilesystemNode::ABoxFilesystemNode()
{
_displayName = "Mounted Volumes";
@@ -90,57 +104,6 @@ ABoxFilesystemNode::ABoxFilesystemNode()
_lock = NULL;
}
-ABoxFilesystemNode::ABoxFilesystemNode(BPTR lock, CONST_STRPTR display_name)
-{
- int bufsize = 256;
-
- _lock = NULL;
- for (;;)
- {
- char name[bufsize];
- if (NameFromLock(lock, name, bufsize) != DOSFALSE)
- {
- _path = name;
- _displayName = display_name ? display_name : FilePart(name);
- break;
- }
- if (IoErr() != ERROR_LINE_TOO_LONG)
- {
- _isValid = false;
- debug(6, "Error while retrieving path name: %ld", IoErr());
- return;
- }
- bufsize *= 2;
- }
-
- _isDirectory = false;
- _isValid = false;
-
- FileInfoBlock *fib = (FileInfoBlock*) AllocDosObject(DOS_FIB, NULL);
- if (fib == NULL)
- {
- debug(6, "Failed to allocate memory for FileInfoBlock");
- return;
- }
-
- if (Examine(lock, fib) != DOSFALSE)
- {
- _isDirectory = fib->fib_EntryType > 0;
- if (_isDirectory)
- {
- if (fib->fib_EntryType != ST_ROOT)
- _path += "/";
- _lock = DupLock(lock);
- _isValid = (_lock != NULL);
- }
- else
- {
- _isValid = true;
- }
- }
- FreeDosObject(DOS_FIB, fib);
-}
-
ABoxFilesystemNode::ABoxFilesystemNode(const String &p) {
int len = 0, offset = p.size();
@@ -168,7 +131,6 @@ ABoxFilesystemNode::ABoxFilesystemNode(const String &p) {
}
// Check whether the node exists and if it is a directory
-
BPTR pLock = Lock((STRPTR)_path.c_str(), SHARED_LOCK);
if (pLock)
{
@@ -198,6 +160,58 @@ ABoxFilesystemNode::ABoxFilesystemNode(const String &p) {
FreeDosObject(DOS_FIB, fib);
}
+ABoxFilesystemNode::ABoxFilesystemNode(BPTR lock, CONST_STRPTR display_name)
+{
+ int bufsize = 256;
+
+ _lock = NULL;
+ for (;;)
+ {
+ char name[bufsize];
+ if (NameFromLock(lock, name, bufsize) != DOSFALSE)
+ {
+ _path = name;
+ _displayName = display_name ? display_name : FilePart(name);
+ break;
+ }
+ if (IoErr() != ERROR_LINE_TOO_LONG)
+ {
+ _isValid = false;
+ debug(6, "Error while retrieving path name: %ld", IoErr());
+ return;
+ }
+ bufsize *= 2;
+ }
+
+ _isDirectory = false;
+ _isValid = false;
+
+ FileInfoBlock *fib = (FileInfoBlock*) AllocDosObject(DOS_FIB, NULL);
+ if (fib == NULL)
+ {
+ debug(6, "Failed to allocate memory for FileInfoBlock");
+ return;
+ }
+
+ if (Examine(lock, fib) != DOSFALSE)
+ {
+ _isDirectory = fib->fib_EntryType > 0;
+ if (_isDirectory)
+ {
+ if (fib->fib_EntryType != ST_ROOT)
+ _path += "/";
+ _lock = DupLock(lock);
+ _isValid = (_lock != NULL);
+ }
+ else
+ {
+ _isValid = true;
+ }
+ }
+
+ FreeDosObject(DOS_FIB, fib);
+}
+
ABoxFilesystemNode::ABoxFilesystemNode(const ABoxFilesystemNode& node)
{
_displayName = node._displayName;
@@ -216,7 +230,27 @@ ABoxFilesystemNode::~ABoxFilesystemNode()
}
}
-bool ABoxFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const
+AbstractFilesystemNode *ABoxFilesystemNode::getChild(const String &name) const {
+ assert(_isDirectory);
+ String newPath(_path);
+
+ if (_path.lastChar() != '/')
+ newPath += '/';
+ newPath += name;
+
+ BPTR lock = Lock(newPath.c_str(), SHARED_LOCK);
+
+ if (!lock)
+ {
+ return 0;
+ }
+
+ UnLock(lock);
+
+ return new ABoxFilesystemNode(newPath);
+}
+
+bool ABoxFilesystemNode::getChildren(AbstractFSList &list, ListMode mode) const
{
if (!_isValid)
{
@@ -232,7 +266,7 @@ bool ABoxFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const
if (_lock == NULL)
{
/* This is the root node */
- myList = listRoot();
+ list = getRootChildren();
return true;
}
@@ -266,7 +300,7 @@ bool ABoxFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const
if (entry)
{
if (entry->isValid())
- myList.push_back(entry);
+ list.push_back(entry);
else
delete entry;
}
@@ -284,7 +318,7 @@ bool ABoxFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const
return true;
}
-AbstractFilesystemNode *ABoxFilesystemNode::parent() const
+AbstractFilesystemNode *ABoxFilesystemNode::getParent() const
{
AbstractFilesystemNode *node = NULL;
@@ -309,29 +343,9 @@ AbstractFilesystemNode *ABoxFilesystemNode::parent() const
return node;
}
-AbstractFilesystemNode *ABoxFilesystemNode::child(const String &name) const {
- assert(_isDirectory);
- String newPath(_path);
-
- if (_path.lastChar() != '/')
- newPath += '/';
- newPath += name;
-
- BPTR lock = Lock(newPath.c_str(), SHARED_LOCK);
-
- if (!lock)
- {
- return 0;
- }
-
- UnLock(lock);
-
- return new ABoxFilesystemNode(newPath);
-}
-
-AbstractFSList ABoxFilesystemNode::listRoot()
+AbstractFSList ABoxFilesystemNode::getRootChildren()
{
- AbstractFSList myList;
+ AbstractFSList list;
DosList *dosList;
CONST ULONG lockDosListFlags = LDF_READ | LDF_VOLUMES;
char name[256];
@@ -339,15 +353,15 @@ AbstractFSList ABoxFilesystemNode::listRoot()
dosList = LockDosList(lockDosListFlags);
if (dosList == NULL)
{
- return myList;
+ return list;
}
dosList = NextDosEntry(dosList, LDF_VOLUMES);
while (dosList)
{
- if (dosList->dol_Type == DLT_VOLUME && // Should always be true, but ...
- dosList->dol_Name && // Same here
- dosList->dol_Task // Will be NULL if volume is removed from drive but still in use by some program
+ if (dosList->dol_Type == DLT_VOLUME && // Should always be true, but ...
+ dosList->dol_Name && // Same here
+ dosList->dol_Task // Will be NULL if volume is removed from drive but still in use by some program
)
{
ABoxFilesystemNode *entry;
@@ -365,7 +379,7 @@ AbstractFSList ABoxFilesystemNode::listRoot()
if (entry)
{
if (entry->isValid())
- myList.push_back(entry);
+ list.push_back(entry);
else
delete entry;
}
@@ -377,9 +391,7 @@ AbstractFSList ABoxFilesystemNode::listRoot()
UnLockDosList(lockDosListFlags);
- return myList;
+ return list;
}
#endif // defined(__MORPHOS__)
-
-
diff --git a/backends/fs/palmos/palmos-fs-factory.cpp b/backends/fs/palmos/palmos-fs-factory.cpp
new file mode 100644
index 0000000000..1b0db0f042
--- /dev/null
+++ b/backends/fs/palmos/palmos-fs-factory.cpp
@@ -0,0 +1,16 @@
+#include "backends/fs/palmos/palmos-fs-factory.h"
+#include "backends/fs/palmos/palmos-fs.cpp"
+
+DECLARE_SINGLETON(PalmOSFilesystemFactory);
+
+AbstractFilesystemNode *PalmOSFilesystemFactory::makeRootFileNode() const {
+ return new PalmOSFilesystemNode();
+}
+
+AbstractFilesystemNode *PalmOSFilesystemFactory::makeCurrentDirectoryFileNode() const {
+ return new PalmOSFilesystemNode();
+}
+
+AbstractFilesystemNode *PalmOSFilesystemFactory::makeFileNodePath(const String &path) const {
+ return new PalmOSFilesystemNode(path);
+}
diff --git a/backends/fs/palmos/palmos-fs-factory.h b/backends/fs/palmos/palmos-fs-factory.h
new file mode 100644
index 0000000000..cfe246e806
--- /dev/null
+++ b/backends/fs/palmos/palmos-fs-factory.h
@@ -0,0 +1,27 @@
+#ifndef PALMOS_FILESYSTEM_FACTORY_H
+#define PALMOS_FILESYSTEM_FACTORY_H
+
+#include "common/singleton.h"
+#include "backends/fs/abstract-fs-factory.h"
+
+/**
+ * Creates PalmOSFilesystemNode objects.
+ *
+ * Parts of this class are documented in the base interface class, AbstractFilesystemFactory.
+ */
+class PalmOSFilesystemFactory : public AbstractFilesystemFactory, public Common::Singleton<PalmOSFilesystemFactory> {
+public:
+ typedef Common::String String;
+
+ virtual AbstractFilesystemNode *makeRootFileNode() const;
+ virtual AbstractFilesystemNode *makeCurrentDirectoryFileNode() const;
+ virtual AbstractFilesystemNode *makeFileNodePath(const String &path) const;
+
+protected:
+ PalmOSFilesystemFactory() {};
+
+private:
+ friend class Common::Singleton<SingletonBaseType>;
+};
+
+#endif /*PALMOS_FILESYSTEM_FACTORY_H*/
diff --git a/backends/fs/palmos/palmos-fs.cpp b/backends/fs/palmos/palmos-fs.cpp
index 2c524bb830..eae3581196 100644
--- a/backends/fs/palmos/palmos-fs.cpp
+++ b/backends/fs/palmos/palmos-fs.cpp
@@ -30,36 +30,68 @@
#include "common/stdafx.h"
#include "backends/fs/abstract-fs.h"
-/*
+/**
* Implementation of the ScummVM file system API based on PalmOS VFS API.
+ *
+ * Parts of this class are documented in the base interface class, AbstractFilesystemNode.
*/
-
class PalmOSFilesystemNode : public AbstractFilesystemNode {
protected:
String _displayName;
+ String _path;
bool _isDirectory;
bool _isValid;
bool _isPseudoRoot;
- String _path;
public:
+ /**
+ * Creates a PalmOSFilesystemNode with the root node as path.
+ */
PalmOSFilesystemNode();
+
+ /**
+ * Creates a POSIXFilesystemNode for a given path.
+ *
+ * @param path String with the path the new node should point to.
+ */
PalmOSFilesystemNode(const String &p);
- virtual String displayName() const { return _displayName; }
- virtual String name() const { return _displayName; }
- virtual bool isValid() const { return _isValid; }
+ virtual bool exists() const { return true; } //FIXME: this is just a stub
+ virtual String getDisplayName() const { return _displayName; }
+ virtual String getName() const { return _displayName; }
+ virtual String getPath() const { return _path; }
virtual bool isDirectory() const { return _isDirectory; }
- virtual String path() const { return _path; }
+ virtual bool isReadable() const { return true; } //FIXME: this is just a stub
+ virtual bool isValid() const { return _isValid; }
+ virtual bool isWritable() const { return true; } //FIXME: this is just a stub
- virtual bool listDir(AbstractFSList &list, ListMode mode) const;
- virtual AbstractFilesystemNode *parent() const;
- virtual AbstractFilesystemNode *child(const String &n) const;
+ virtual AbstractFilesystemNode *getChild(const String &n) const;
+ virtual bool getChildren(AbstractFSList &list, ListMode mode) const;
+ virtual AbstractFilesystemNode *getParent() const;
private:
- static void addFile (AbstractFSList &list, ListMode mode, const Char *base, FileInfoType* find_data);
+ /**
+ * Adds a single WindowsFilesystemNode to a given list.
+ * This method is used by getChildren() to populate the directory entries list.
+ *
+ * @param list List to put the file entry node in.
+ * @param mode Mode to use while adding the file entry to the list.
+ * @param base String with the directory being listed.
+ * @param find_data Describes a file that the FindFirstFile, FindFirstFileEx, or FindNextFile functions find.
+ */
+ static void addFile(AbstractFSList &list, ListMode mode, const Char *base, FileInfoType* find_data);
};
+/**
+ * Returns the last component of a given path.
+ *
+ * Examples:
+ * /foo/bar.txt would return /bar.txt
+ * /foo/bar/ would return /bar/
+ *
+ * @param str String containing the path.
+ * @return Pointer to the first char of the last component inside str.
+ */
static const char *lastPathComponent(const Common::String &str) {
const char *start = str.c_str();
const char *cur = start + str.size() - 2;
@@ -95,19 +127,6 @@ void PalmOSFilesystemNode::addFile(AbstractFSList &list, ListMode mode, const ch
list.push_back(new PalmOSFilesystemNode(entry));
}
-AbstractFilesystemNode *AbstractFilesystemNode::getCurrentDirectory() {
- return AbstractFilesystemNode::getRoot();
-}
-
-AbstractFilesystemNode *AbstractFilesystemNode::getRoot() {
- return new PalmOSFilesystemNode();
-}
-
-AbstractFilesystemNode *AbstractFilesystemNode::getNodeForPath(const String &path) {
- return new PalmOSFilesystemNode(path);
-}
-
-
PalmOSFilesystemNode::PalmOSFilesystemNode() {
_isDirectory = true;
_displayName = "Root";
@@ -122,13 +141,13 @@ PalmOSFilesystemNode::PalmOSFilesystemNode(const String &p) {
UInt32 attr;
FileRef handle;
- Err e = VFSFileOpen(gVars->VFS.volRefNum, _path.c_str(), vfsModeRead, &handle);
- if (!e) {
- e = VFSFileGetAttributes(handle, &attr);
+ Err error = VFSFileOpen(gVars->VFS.volRefNum, _path.c_str(), vfsModeRead, &handle);
+ if (!error) {
+ error = VFSFileGetAttributes(handle, &attr);
VFSFileClose(handle);
}
- if (e) {
+ if (error) {
_isValid = false;
_isDirectory = false;
@@ -139,8 +158,31 @@ PalmOSFilesystemNode::PalmOSFilesystemNode(const String &p) {
_isPseudoRoot = false;
}
-bool PalmOSFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const {
- Err e;
+AbstractFilesystemNode *PalmOSFilesystemNode::getChild(const String &n) const {
+ assert(_isDirectory);
+
+ String newPath(_path);
+ if (_path.lastChar() != '/')
+ newPath += '/';
+ newPath += n;
+
+ FileRef handle;
+ UInt32 attr;
+ Err error = VFSFileOpen(gVars->VFS.volRefNum, newPath.c_str(), vfsModeRead, &handle);
+ if (error)
+ return 0;
+
+ error = VFSFileGetAttributes(handle, &attr);
+ VFSFileClose(handle);
+
+ if (error || !(attr & vfsFileAttrDirectory))
+ return 0;
+
+ return new PalmOSFilesystemNode(newPath);
+}
+
+bool PalmOSFilesystemNode::getChildren(AbstractFSList &myList, ListMode mode) const {
+ Err error;
Char nameP[256];
FileInfoType desc;
FileRef handle;
@@ -148,14 +190,14 @@ bool PalmOSFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const
desc.nameP = nameP;
desc.nameBufLen = 256;
- e = VFSFileOpen(gVars->VFS.volRefNum, _path.c_str(), vfsModeRead, &handle);
+ error = VFSFileOpen(gVars->VFS.volRefNum, _path.c_str(), vfsModeRead, &handle);
- if (e)
+ if (error)
return false;
while(dirIterator != expIteratorStop) {
- e = VFSDirEntryEnumerate(handle, &dirIterator, &desc);
- if (!e) {
+ error = VFSDirEntryEnumerate(handle, &dirIterator, &desc);
+ if (!error) {
addFile(myList, mode, _path.c_str(), &desc);
}
}
@@ -165,8 +207,7 @@ bool PalmOSFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const
return true;
}
-
-AbstractFilesystemNode *PalmOSFilesystemNode::parent() const {
+AbstractFilesystemNode *PalmOSFilesystemNode::getParent() const {
PalmOSFilesystemNode *p = 0;
if (!_isPseudoRoot) {
@@ -180,31 +221,7 @@ AbstractFilesystemNode *PalmOSFilesystemNode::parent() const {
p->_displayName = lastPathComponent(p->_path);
p->_isPseudoRoot =(p->_path == "/");
}
- return p;
-}
-
-
-AbstractFilesystemNode *PalmOSFilesystemNode::child(const String &n) const {
- assert(_isDirectory);
- String newPath(_path);
-
- if (_path.lastChar() != '/')
- newPath += '/';
- newPath += n;
-
- FileRef handle;
- UInt32 attr;
- Err e = VFSFileOpen(gVars->VFS.volRefNum, newPath.c_str(), vfsModeRead, &handle);
- if (e)
- return 0;
- e = VFSFileGetAttributes(handle, &attr);
- VFSFileClose(handle);
-
- if (e || !(attr & vfsFileAttrDirectory))
- return 0;
-
- PalmOSFilesystemNode *p = new PalmOSFilesystemNode(newPath);
return p;
}
diff --git a/backends/fs/posix/posix-fs-factory.cpp b/backends/fs/posix/posix-fs-factory.cpp
new file mode 100644
index 0000000000..bed3dc5f8f
--- /dev/null
+++ b/backends/fs/posix/posix-fs-factory.cpp
@@ -0,0 +1,18 @@
+#include "backends/fs/posix/posix-fs-factory.h"
+#include "backends/fs/posix/posix-fs.cpp"
+
+DECLARE_SINGLETON(POSIXFilesystemFactory);
+
+AbstractFilesystemNode *POSIXFilesystemFactory::makeRootFileNode() const {
+ return new POSIXFilesystemNode();
+}
+
+AbstractFilesystemNode *POSIXFilesystemFactory::makeCurrentDirectoryFileNode() const {
+ char buf[MAXPATHLEN];
+ getcwd(buf, MAXPATHLEN);
+ return new POSIXFilesystemNode(buf, true);
+}
+
+AbstractFilesystemNode *POSIXFilesystemFactory::makeFileNodePath(const String &path) const {
+ return new POSIXFilesystemNode(path, true);
+}
diff --git a/backends/fs/posix/posix-fs-factory.h b/backends/fs/posix/posix-fs-factory.h
new file mode 100644
index 0000000000..93f0ac115b
--- /dev/null
+++ b/backends/fs/posix/posix-fs-factory.h
@@ -0,0 +1,27 @@
+#ifndef POSIX_FILESYSTEM_FACTORY_H
+#define POSIX_FILESYSTEM_FACTORY_H
+
+#include "common/singleton.h"
+#include "backends/fs/abstract-fs-factory.h"
+
+/**
+ * Creates POSIXFilesystemNode objects.
+ *
+ * Parts of this class are documented in the base interface class, AbstractFilesystemFactory.
+ */
+class POSIXFilesystemFactory : public AbstractFilesystemFactory, public Common::Singleton<POSIXFilesystemFactory> {
+public:
+ typedef Common::String String;
+
+ virtual AbstractFilesystemNode *makeRootFileNode() const;
+ virtual AbstractFilesystemNode *makeCurrentDirectoryFileNode() const;
+ virtual AbstractFilesystemNode *makeFileNodePath(const String &path) const;
+
+protected:
+ POSIXFilesystemFactory() {};
+
+private:
+ friend class Common::Singleton<SingletonBaseType>;
+};
+
+#endif /*POSIX_FILESYSTEM_FACTORY_H*/
diff --git a/backends/fs/posix/posix-fs.cpp b/backends/fs/posix/posix-fs.cpp
index ba1668a390..385bab833c 100644
--- a/backends/fs/posix/posix-fs.cpp
+++ b/backends/fs/posix/posix-fs.cpp
@@ -25,7 +25,6 @@
#if defined(UNIX)
#include "common/stdafx.h"
-
#include "backends/fs/abstract-fs.h"
#ifdef MACOSX
@@ -37,33 +36,61 @@
#include <stdio.h>
#include <unistd.h>
-/*
+/**
* Implementation of the ScummVM file system API based on POSIX.
+ *
+ * Parts of this class are documented in the base interface class, AbstractFilesystemNode.
*/
-
class POSIXFilesystemNode : public AbstractFilesystemNode {
protected:
String _displayName;
+ String _path;
bool _isDirectory;
bool _isValid;
- String _path;
public:
+ /**
+ * Creates a POSIXFilesystemNode with the root node as path.
+ */
POSIXFilesystemNode();
+
+ /**
+ * Creates a POSIXFilesystemNode for a given path.
+ *
+ * @param path String with the path the new node should point to.
+ * @param verify true if the isValid and isDirectory flags should be verified during the construction.
+ */
POSIXFilesystemNode(const String &path, bool verify);
-
- virtual String displayName() const { return _displayName; }
- virtual String name() const { return _displayName; }
- virtual bool isValid() const { return _isValid; }
+
+ virtual bool exists() const { return access(_path.c_str(), F_OK) == 0; }
+ virtual String getDisplayName() const { return _displayName; }
+ virtual String getName() const { return _displayName; }
+ virtual String getPath() const { return _path; }
virtual bool isDirectory() const { return _isDirectory; }
- virtual String path() const { return _path; }
-
- virtual bool listDir(AbstractFSList &list, ListMode mode) const;
- virtual AbstractFilesystemNode *parent() const;
- virtual AbstractFilesystemNode *child(const String &n) const;
+ virtual bool isReadable() const { return access(_path.c_str(), R_OK) == 0; }
+ virtual bool isWritable() const { return access(_path.c_str(), W_OK) == 0; }
+
+ virtual AbstractFilesystemNode *getChild(const String &n) const;
+ virtual bool getChildren(AbstractFSList &list, ListMode mode, bool hidden) const;
+ virtual AbstractFilesystemNode *getParent() const;
+
+private:
+ /**
+ * Tests and sets the _isValid and _isDirectory flags, using the stat() function.
+ */
+ virtual void setFlags();
};
-
+/**
+ * Returns the last component of a given path.
+ *
+ * Examples:
+ * /foo/bar.txt would return /bar.txt
+ * /foo/bar/ would return /bar/
+ *
+ * @param str String containing the path.
+ * @return Pointer to the first char of the last component inside str.
+ */
static const char *lastPathComponent(const Common::String &str) {
const char *start = str.c_str();
const char *cur = start + str.size() - 2;
@@ -75,18 +102,11 @@ static const char *lastPathComponent(const Common::String &str) {
return cur + 1;
}
-AbstractFilesystemNode *AbstractFilesystemNode::getCurrentDirectory() {
- char buf[MAXPATHLEN];
- getcwd(buf, MAXPATHLEN);
- return new POSIXFilesystemNode(buf, true);
-}
-
-AbstractFilesystemNode *AbstractFilesystemNode::getRoot() {
- return new POSIXFilesystemNode();
-}
-
-AbstractFilesystemNode *AbstractFilesystemNode::getNodeForPath(const String &path) {
- return new POSIXFilesystemNode(path, true);
+void POSIXFilesystemNode::setFlags() {
+ struct stat st;
+
+ _isValid = (0 == stat(_path.c_str(), &st));
+ _isDirectory = _isValid ? S_ISDIR(st.st_mode) : false;
}
POSIXFilesystemNode::POSIXFilesystemNode() {
@@ -123,30 +143,44 @@ POSIXFilesystemNode::POSIXFilesystemNode(const String &p, bool verify) {
_path = p;
_displayName = lastPathComponent(_path);
- _isValid = true;
- _isDirectory = true;
if (verify) {
- struct stat st;
- _isValid = (0 == stat(_path.c_str(), &st));
- _isDirectory = _isValid ? S_ISDIR(st.st_mode) : false;
+ setFlags();
}
}
-bool POSIXFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const {
+AbstractFilesystemNode *POSIXFilesystemNode::getChild(const String &n) const {
+ // FIXME: Pretty lame implementation! We do no error checking to speak
+ // of, do not check if this is a special node, etc.
assert(_isDirectory);
- DIR *dirp = opendir(_path.c_str());
+
+ String newPath(_path);
+ if (_path.lastChar() != '/')
+ newPath += '/';
+ newPath += n;
+
+ return new POSIXFilesystemNode(newPath, true);
+}
+bool POSIXFilesystemNode::getChildren(AbstractFSList &myList, ListMode mode, bool hidden) const {
+ assert(_isDirectory);
+
+ DIR *dirp = opendir(_path.c_str());
struct dirent *dp;
if (dirp == NULL)
return false;
- // ... loop over dir entries using readdir
+ // loop over dir entries using readdir
while ((dp = readdir(dirp)) != NULL) {
- // Skip 'invisible' files
- if (dp->d_name[0] == '.')
+ // Skip 'invisible' files if necessary
+ if (dp->d_name[0] == '.' && !hidden) {
+ continue;
+ }
+ // Skip '.' and '..' to avoid cycles
+ if((dp->d_name[0] == '.' && dp->d_name[1] == 0) || (dp->d_name[0] == '.' && dp->d_name[1] == '.')) {
continue;
+ }
String newPath(_path);
if (newPath.lastChar() != '/')
@@ -156,18 +190,18 @@ bool POSIXFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const {
POSIXFilesystemNode entry(newPath, false);
#if defined(SYSTEM_NOT_SUPPORTING_D_TYPE)
- // TODO: d_type is not part of POSIX, so it might not be supported
- // on some of our targets. For those systems where it isn't supported,
- // add this #elif case, which tries to use stat() instead.
- struct stat st;
- entry._isValid = (0 == stat(entry._path.c_str(), &st));
- entry._isDirectory = entry._isValid ? S_ISDIR(st.st_mode) : false;
+ /* TODO: d_type is not part of POSIX, so it might not be supported
+ * on some of our targets. For those systems where it isn't supported,
+ * add this #elif case, which tries to use stat() instead.
+ *
+ * The d_type method is used to avoid costly recurrent stat() calls in big
+ * directories.
+ */
+ entry.setFlags();
#else
if (dp->d_type == DT_UNKNOWN) {
// Fall back to stat()
- struct stat st;
- entry._isValid = (0 == stat(entry._path.c_str(), &st));
- entry._isDirectory = entry._isValid ? S_ISDIR(st.st_mode) : false;
+ entry.setFlags();
} else {
entry._isValid = (dp->d_type == DT_DIR) || (dp->d_type == DT_REG) || (dp->d_type == DT_LNK);
if (dp->d_type == DT_LNK) {
@@ -194,35 +228,22 @@ bool POSIXFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const {
if (entry._isDirectory)
entry._path += "/";
+
myList.push_back(new POSIXFilesystemNode(entry));
}
closedir(dirp);
+
return true;
}
-AbstractFilesystemNode *POSIXFilesystemNode::parent() const {
+AbstractFilesystemNode *POSIXFilesystemNode::getParent() const {
if (_path == "/")
return 0;
const char *start = _path.c_str();
const char *end = lastPathComponent(_path);
- POSIXFilesystemNode *p = new POSIXFilesystemNode(String(start, end - start), false);
-
- return p;
-}
-
-AbstractFilesystemNode *POSIXFilesystemNode::child(const String &n) const {
- // FIXME: Pretty lame implementation! We do no error checking to speak
- // of, do not check if this is a special node, etc.
- assert(_isDirectory);
- String newPath(_path);
- if (_path.lastChar() != '/')
- newPath += '/';
- newPath += n;
- POSIXFilesystemNode *p = new POSIXFilesystemNode(newPath, true);
-
- return p;
+ return new POSIXFilesystemNode(String(start, end - start), false);
}
-#endif // defined(UNIX)
+#endif //#if defined(UNIX)
diff --git a/backends/fs/ps2/ps2-fs-factory.cpp b/backends/fs/ps2/ps2-fs-factory.cpp
new file mode 100644
index 0000000000..5f10974501
--- /dev/null
+++ b/backends/fs/ps2/ps2-fs-factory.cpp
@@ -0,0 +1,16 @@
+#include "backends/fs/ps2/ps2-fs-factory.h"
+#include "backends/fs/ps2/ps2-fs.cpp"
+
+DECLARE_SINGLETON(Ps2FilesystemFactory);
+
+AbstractFilesystemNode *Ps2FilesystemFactory::makeRootFileNode() const {
+ return new Ps2FilesystemNode();
+}
+
+AbstractFilesystemNode *Ps2FilesystemFactory::makeCurrentDirectoryFileNode() const {
+ return new Ps2FilesystemNode();
+}
+
+AbstractFilesystemNode *Ps2FilesystemFactory::makeFileNodePath(const String &path) const {
+ return new Ps2FilesystemNode(path);
+}
diff --git a/backends/fs/ps2/ps2-fs-factory.h b/backends/fs/ps2/ps2-fs-factory.h
new file mode 100644
index 0000000000..6f0da114c5
--- /dev/null
+++ b/backends/fs/ps2/ps2-fs-factory.h
@@ -0,0 +1,27 @@
+#ifndef PS2_FILESYSTEM_FACTORY_H
+#define PS2_FILESYSTEM_FACTORY_H
+
+#include "common/singleton.h"
+#include "backends/fs/abstract-fs-factory.h"
+
+/**
+ * Creates PS2FilesystemNode objects.
+ *
+ * Parts of this class are documented in the base interface class, AbstractFilesystemFactory.
+ */
+class Ps2FilesystemFactory : public AbstractFilesystemFactory, public Common::Singleton<Ps2FilesystemFactory> {
+public:
+ typedef Common::String String;
+
+ virtual AbstractFilesystemNode *makeRootFileNode() const;
+ virtual AbstractFilesystemNode *makeCurrentDirectoryFileNode() const;
+ virtual AbstractFilesystemNode *makeFileNodePath(const String &path) const;
+
+protected:
+ Ps2FilesystemFactory() {};
+
+private:
+ friend class Common::Singleton<SingletonBaseType>;
+};
+
+#endif /*PS2_FILESYSTEM_FACTORY_H*/
diff --git a/backends/fs/ps2/ps2-fs.cpp b/backends/fs/ps2/ps2-fs.cpp
index afe1842e43..9d8e360f64 100644
--- a/backends/fs/ps2/ps2-fs.cpp
+++ b/backends/fs/ps2/ps2-fs.cpp
@@ -32,44 +32,52 @@
extern AsyncFio fio;
extern OSystem_PS2 *g_systemPs2;
+/**
+ * Implementation of the ScummVM file system API based on the Ps2SDK.
+ *
+ * Parts of this class are documented in the base interface class, AbstractFilesystemNode.
+ */
class Ps2FilesystemNode : public AbstractFilesystemNode {
protected:
String _displayName;
+ String _path;
bool _isDirectory;
bool _isRoot;
- String _path;
public:
- Ps2FilesystemNode(void);
- Ps2FilesystemNode(const Ps2FilesystemNode *node);
+ /**
+ * Creates a PS2FilesystemNode with the root node as path.
+ */
+ Ps2FilesystemNode();
+
+ /**
+ * Creates a PS2FilesystemNode for a given path.
+ *
+ * @param path String with the path the new node should point to.
+ */
Ps2FilesystemNode(const String &path);
+
+ /**
+ * Copy constructor.
+ */
+ Ps2FilesystemNode(const Ps2FilesystemNode *node);
- virtual String displayName() const { return _displayName; }
- virtual String name() const { return _displayName; }
- virtual bool isValid() const { return !_isRoot; }
+ virtual bool exists() const { return true; } //FIXME: this is just a stub
+ virtual String getDisplayName() const { return _displayName; }
+ virtual String getName() const { return _displayName; }
+ virtual String getPath() const { return _path; }
virtual bool isDirectory() const { return _isDirectory; }
- virtual String path() const { return _path; }
+ virtual bool isReadable() const { return true; } //FIXME: this is just a stub
+ virtual bool isValid() const { return !_isRoot; }
+ virtual bool isWritable() const { return true; } //FIXME: this is just a stub
- //virtual FSList listDir(ListMode) const;
- virtual bool listDir(AbstractFSList &list, ListMode mode) const;
- virtual AbstractFilesystemNode *parent() const;
virtual AbstractFilesystemNode *clone() const { return new Ps2FilesystemNode(this); }
- virtual AbstractFilesystemNode *child(const String &n) const;
+ virtual AbstractFilesystemNode *getChild(const String &n) const;
+ virtual bool getChildren(AbstractFSList &list, ListMode mode) const;
+ virtual AbstractFilesystemNode *getParent() const;
};
-AbstractFilesystemNode *AbstractFilesystemNode::getCurrentDirectory() {
- return AbstractFilesystemNode::getRoot();
-}
-
-AbstractFilesystemNode *AbstractFilesystemNode::getRoot(void) {
- return new Ps2FilesystemNode();
-}
-
-AbstractFilesystemNode *AbstractFilesystemNode::getNodeForPath(const String &path) {
- return new Ps2FilesystemNode(path);
-}
-
-Ps2FilesystemNode::Ps2FilesystemNode(void) {
+Ps2FilesystemNode::Ps2FilesystemNode() {
_isDirectory = true;
_isRoot = true;
_displayName = "PlayStation 2";
@@ -108,7 +116,41 @@ Ps2FilesystemNode::Ps2FilesystemNode(const Ps2FilesystemNode *node) {
_isRoot = node->_isRoot;
}
-bool Ps2FilesystemNode::listDir(AbstractFSList &list, ListMode mode) const {
+AbstractFilesystemNode *Ps2FilesystemNode::getChild(const String &n) const {
+ if (!_isDirectory)
+ return NULL;
+
+ char listDir[256];
+ sprintf(listDir, "%s/", _path.c_str());
+ int fd = fio.dopen(listDir);
+
+ if (fd >= 0) {
+ iox_dirent_t dirent;
+
+ while (fio.dread(fd, &dirent) > 0) {
+ if (strcmp(n.c_str(), dirent.name) == 0) {
+ Ps2FilesystemNode *dirEntry = new Ps2FilesystemNode();
+
+ dirEntry->_isDirectory = (bool)(dirent.stat.mode & FIO_S_IFDIR);
+ dirEntry->_isRoot = false;
+
+ dirEntry->_path = _path;
+ dirEntry->_path += "/";
+ dirEntry->_path += dirent.name;
+
+ dirEntry->_displayName = dirent.name;
+
+ fio.dclose(fd);
+ return dirEntry;
+ }
+ }
+ fio.dclose(fd);
+ }
+
+ return NULL;
+}
+
+bool Ps2FilesystemNode::getChildren(AbstractFSList &list, ListMode mode) const {
if (!_isDirectory)
return false;
@@ -135,6 +177,7 @@ bool Ps2FilesystemNode::listDir(AbstractFSList &list, ListMode mode) const {
} else {
char listDir[256];
int fd;
+
if (_path.lastChar() == '/')
fd = fio.dopen(_path.c_str());
else {
@@ -173,7 +216,7 @@ bool Ps2FilesystemNode::listDir(AbstractFSList &list, ListMode mode) const {
}
}
-AbstractFilesystemNode *Ps2FilesystemNode::parent() const {
+AbstractFilesystemNode *Ps2FilesystemNode::getParent() const {
if (_isRoot)
return new Ps2FilesystemNode(this);
@@ -191,36 +234,3 @@ AbstractFilesystemNode *Ps2FilesystemNode::parent() const {
else
return new Ps2FilesystemNode();
}
-
-AbstractFilesystemNode *Ps2FilesystemNode::child(const String &n) const {
- if (!_isDirectory)
- return NULL;
-
- char listDir[256];
- sprintf(listDir, "%s/", _path.c_str());
- int fd = fio.dopen(listDir);
-
- if (fd >= 0) {
- iox_dirent_t dirent;
-
- while (fio.dread(fd, &dirent) > 0) {
- if (strcmp(n.c_str(), dirent.name) == 0) {
- Ps2FilesystemNode *dirEntry = new Ps2FilesystemNode();
-
- dirEntry->_isDirectory = (bool)(dirent.stat.mode & FIO_S_IFDIR);
- dirEntry->_isRoot = false;
-
- dirEntry->_path = _path;
- dirEntry->_path += "/";
- dirEntry->_path += dirent.name;
-
- dirEntry->_displayName = dirent.name;
-
- fio.dclose(fd);
- return dirEntry;
- }
- }
- fio.dclose(fd);
- }
- return NULL;
-}
diff --git a/backends/fs/psp/psp-fs-factory.cpp b/backends/fs/psp/psp-fs-factory.cpp
new file mode 100644
index 0000000000..6fc829baf1
--- /dev/null
+++ b/backends/fs/psp/psp-fs-factory.cpp
@@ -0,0 +1,16 @@
+#include "backends/fs/psp/psp-fs-factory.h"
+#include "backends/fs/psp/psp_fs.cpp"
+
+DECLARE_SINGLETON(PSPFilesystemFactory);
+
+AbstractFilesystemNode *PSPFilesystemFactory::makeRootFileNode() const {
+ return new PSPFilesystemNode();
+}
+
+AbstractFilesystemNode *PSPFilesystemFactory::makeCurrentDirectoryFileNode() const {
+ return new PSPFilesystemNode();
+}
+
+AbstractFilesystemNode *PSPFilesystemFactory::makeFileNodePath(const String &path) const {
+ return new PSPFilesystemNode(path, true);
+}
diff --git a/backends/fs/psp/psp-fs-factory.h b/backends/fs/psp/psp-fs-factory.h
new file mode 100644
index 0000000000..b1a44b90c4
--- /dev/null
+++ b/backends/fs/psp/psp-fs-factory.h
@@ -0,0 +1,27 @@
+#ifndef PSP_FILESYSTEM_FACTORY_H
+#define PSP_FILESYSTEM_FACTORY_H
+
+#include "common/singleton.h"
+#include "backends/fs/abstract-fs-factory.h"
+
+/**
+ * Creates PSPFilesystemNode objects.
+ *
+ * Parts of this class are documented in the base interface class, AbstractFilesystemFactory.
+ */
+class PSPFilesystemFactory : public AbstractFilesystemFactory, public Common::Singleton<PSPFilesystemFactory> {
+public:
+ typedef Common::String String;
+
+ virtual AbstractFilesystemNode *makeRootFileNode() const;
+ virtual AbstractFilesystemNode *makeCurrentDirectoryFileNode() const;
+ virtual AbstractFilesystemNode *makeFileNodePath(const String &path) const;
+
+protected:
+ PSPFilesystemFactory() {};
+
+private:
+ friend class Common::Singleton<SingletonBaseType>;
+};
+
+#endif /*PSP_FILESYSTEM_FACTORY_H*/
diff --git a/backends/fs/psp/psp_fs.cpp b/backends/fs/psp/psp_fs.cpp
index 3f25a63f86..5b0faf3847 100644
--- a/backends/fs/psp/psp_fs.cpp
+++ b/backends/fs/psp/psp_fs.cpp
@@ -23,8 +23,8 @@
*/
#ifdef __PSP__
-#include "engines/engine.h"
+#include "engines/engine.h"
#include "backends/fs/abstract-fs.h"
#include <sys/stat.h>
@@ -32,39 +32,65 @@
#define ROOT_PATH "ms0:/"
-
-/*
+/**
* Implementation of the ScummVM file system API based on PSPSDK API.
+ *
+ * Parts of this class are documented in the base interface class, AbstractFilesystemNode.
*/
-
class PSPFilesystemNode : public AbstractFilesystemNode {
protected:
String _displayName;
+ String _path;
bool _isDirectory;
bool _isValid;
- String _path;
public:
+ /**
+ * Creates a PSPFilesystemNode with the root node as path.
+ */
PSPFilesystemNode();
+
+ /**
+ * Creates a PSPFilesystemNode for a given path.
+ *
+ * @param path String with the path the new node should point to.
+ * @param verify true if the isValid and isDirectory flags should be verified during the construction.
+ */
PSPFilesystemNode(const Common::String &p, bool verify);
- virtual String displayName() const { return _displayName; }
- virtual String name() const { return _displayName; }
- virtual bool isValid() const { return _isValid; }
+ virtual bool exists() const { return true; } //FIXME: this is just a stub
+ virtual String getDisplayName() const { return _displayName; }
+ virtual String getName() const { return _displayName; }
+ virtual String getPath() const { return _path; }
virtual bool isDirectory() const { return _isDirectory; }
- virtual String path() const { return _path; }
+ virtual bool isReadable() const { return true; } //FIXME: this is just a stub
+ virtual bool isValid() const { return _isValid; }
+ virtual bool isWritable() const { return true; } //FIXME: this is just a stub
- virtual bool listDir(AbstractFSList &list, ListMode mode) const;
- virtual AbstractFilesystemNode *parent() const;
- virtual AbstractFilesystemNode *child(const String &n) const;
+ virtual AbstractFilesystemNode *getChild(const String &n) const;
+ virtual bool getChildren(AbstractFSList &list, ListMode mode) const;
+ virtual AbstractFilesystemNode *getParent() const;
};
-AbstractFilesystemNode *AbstractFilesystemNode::getCurrentDirectory() {
- return AbstractFilesystemNode::getRoot();
-}
+/**
+ * Returns the last component of a given path.
+ *
+ * Examples:
+ * /foo/bar.txt would return /bar.txt
+ * /foo/bar/ would return /bar/
+ *
+ * @param str String containing the path.
+ * @return Pointer to the first char of the last component inside str.
+ */
+static const char *lastPathComponent(const Common::String &str) {
+ const char *start = str.c_str();
+ const char *cur = start + str.size() - 2;
-AbstractFilesystemNode *AbstractFilesystemNode::getRoot() {
- return new PSPFilesystemNode();
+ while (cur >= start && *cur != '/') {
+ --cur;
+ }
+
+ return cur + 1;
}
PSPFilesystemNode::PSPFilesystemNode() {
@@ -89,12 +115,20 @@ PSPFilesystemNode::PSPFilesystemNode(const Common::String &p, bool verify) {
}
}
-AbstractFilesystemNode *AbstractFilesystemNode::getNodeForPath(const String &path) {
- return new PSPFilesystemNode(path, true);
-}
+AbstractFilesystemNode *PSPFilesystemNode::getChild(const String &n) const {
+ // FIXME: Pretty lame implementation! We do no error checking to speak
+ // of, do not check if this is a special node, etc.
+ assert(_isDirectory);
+
+ String newPath(_path);
+ if (_path.lastChar() != '/')
+ newPath += '/';
+ newPath += n;
+ return new PSPFilesystemNode(newPath, true);
+}
-bool PSPFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const {
+bool PSPFilesystemNode::getChildren(AbstractFSList &myList, ListMode mode) const {
assert(_isDirectory);
int dfd = sceIoDopen(_path.c_str());
@@ -133,18 +167,7 @@ bool PSPFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const {
}
}
-static const char *lastPathComponent(const Common::String &str) {
- const char *start = str.c_str();
- const char *cur = start + str.size() - 2;
-
- while (cur >= start && *cur != '/') {
- --cur;
- }
-
- return cur + 1;
-}
-
-AbstractFilesystemNode *PSPFilesystemNode::parent() const {
+AbstractFilesystemNode *PSPFilesystemNode::getParent() const {
assert(_isValid);
if (_path == ROOT_PATH)
@@ -153,22 +176,7 @@ AbstractFilesystemNode *PSPFilesystemNode::parent() const {
const char *start = _path.c_str();
const char *end = lastPathComponent(_path);
- PSPFilesystemNode *p = new PSPFilesystemNode(String(start, end - start), false);
-
- return p;
-}
-
-AbstractFilesystemNode *PSPFilesystemNode::child(const String &n) const {
- // FIXME: Pretty lame implementation! We do no error checking to speak
- // of, do not check if this is a special node, etc.
- assert(_isDirectory);
- String newPath(_path);
- if (_path.lastChar() != '/')
- newPath += '/';
- newPath += n;
- PSPFilesystemNode *p = new PSPFilesystemNode(newPath, true);
-
- return p;
+ return new PSPFilesystemNode(String(start, end - start), false);
}
-#endif // PSP
+#endif //#ifdef __PSP__
diff --git a/backends/fs/symbian/symbian-fs-factory.cpp b/backends/fs/symbian/symbian-fs-factory.cpp
new file mode 100644
index 0000000000..87b1f0f05d
--- /dev/null
+++ b/backends/fs/symbian/symbian-fs-factory.cpp
@@ -0,0 +1,18 @@
+#include "backends/fs/symbian/symbian-fs-factory.h"
+#include "backends/fs/symbian/symbian-fs.cpp"
+
+DECLARE_SINGLETON(SymbianFilesystemFactory);
+
+AbstractFilesystemNode *SymbianFilesystemFactory::makeRootFileNode() const {
+ return new SymbianFilesystemNode(true);
+}
+
+AbstractFilesystemNode *SymbianFilesystemFactory::makeCurrentDirectoryFileNode() const {
+ char path[MAXPATHLEN];
+ getcwd(path, MAXPATHLEN);
+ return new SymbianFilesystemNode(path);
+}
+
+AbstractFilesystemNode *SymbianFilesystemFactory::makeFileNodePath(const String &path) const {
+ return new SymbianFilesystemNode(path);
+}
diff --git a/backends/fs/symbian/symbian-fs-factory.h b/backends/fs/symbian/symbian-fs-factory.h
new file mode 100644
index 0000000000..69749cbd7e
--- /dev/null
+++ b/backends/fs/symbian/symbian-fs-factory.h
@@ -0,0 +1,27 @@
+#ifndef SYMBIAN_FILESYSTEM_FACTORY_H
+#define SYMBIAN_FILESYSTEM_FACTORY_H
+
+#include "common/singleton.h"
+#include "backends/fs/abstract-fs-factory.h"
+
+/**
+ * Creates SymbianFilesystemNode objects.
+ *
+ * Parts of this class are documented in the base interface class, AbstractFilesystemFactory.
+ */
+class SymbianFilesystemFactory : public AbstractFilesystemFactory, public Common::Singleton<SymbianFilesystemFactory> {
+public:
+ typedef Common::String String;
+
+ virtual AbstractFilesystemNode *makeRootFileNode() const;
+ virtual AbstractFilesystemNode *makeCurrentDirectoryFileNode() const;
+ virtual AbstractFilesystemNode *makeFileNodePath(const String &path) const;
+
+protected:
+ SymbianFilesystemFactory() {};
+
+private:
+ friend class Common::Singleton<SingletonBaseType>;
+};
+
+#endif /*SYMBIAN_FILESYSTEM_FACTORY_H*/
diff --git a/backends/fs/symbian/symbian-fs.cpp b/backends/fs/symbian/symbian-fs.cpp
index 8a4c2abaf2..5c3dd74f5c 100644
--- a/backends/fs/symbian/symbian-fs.cpp
+++ b/backends/fs/symbian/symbian-fs.cpp
@@ -31,33 +31,58 @@
#include <f32file.h>
#include <bautils.h>
-/*
+/**
* Implementation of the ScummVM file system API based on POSIX.
+ *
+ * Parts of this class are documented in the base interface class, AbstractFilesystemNode.
*/
-
class SymbianFilesystemNode : public AbstractFilesystemNode {
protected:
String _displayName;
+ String _path;
bool _isDirectory;
bool _isValid;
- String _path;
bool _isPseudoRoot;
public:
+ /**
+ * Creates a SymbianFilesystemNode with the root node as path.
+ *
+ * @param aIsRoot true if the node will be a pseudo root, false otherwise.
+ */
SymbianFilesystemNode(bool aIsRoot);
+
+ /**
+ * Creates a SymbianFilesystemNode for a given path.
+ *
+ * @param path String with the path the new node should point to.
+ */
SymbianFilesystemNode(const String &path);
- virtual String displayName() const { return _displayName; }
- virtual String name() const { return _displayName; }
- virtual bool isValid() const { return _isValid; }
+
+ virtual bool exists() const { return true; } //FIXME: this is just a stub
+ virtual String getDisplayName() const { return _displayName; }
+ virtual String getName() const { return _displayName; }
+ virtual String getPath() const { return _path; }
virtual bool isDirectory() const { return _isDirectory; }
- virtual String path() const { return _path; }
+ virtual bool isReadable() const { return true; } //FIXME: this is just a stub
+ virtual bool isValid() const { return _isValid; }
+ virtual bool isWritable() const { return true; } //FIXME: this is just a stub
- virtual bool listDir(AbstractFSList &list, ListMode mode) const;
- virtual AbstractFilesystemNode *parent() const;
- virtual AbstractFilesystemNode *child(const String &n) const;
+ virtual AbstractFilesystemNode *getChild(const String &n) const;
+ virtual bool getChildren(AbstractFSList &list, ListMode mode) const;
+ virtual AbstractFilesystemNode *getParent() const;
};
-
+/**
+ * Returns the last component of a given path.
+ *
+ * Examples:
+ * c:\foo\bar.txt would return "\bar.txt"
+ * c:\foo\bar\ would return "\bar\"
+ *
+ * @param str Path to obtain the last component from.
+ * @return Pointer to the first char of the last component inside str.
+ */
static const char *lastPathComponent(const Common::String &str) {
const char *start = str.c_str();
const char *cur = start + str.size() - 2;
@@ -69,6 +94,11 @@ static const char *lastPathComponent(const Common::String &str) {
return cur + 1;
}
+/**
+ * Fixes the path by changing all slashes to backslashes.
+ *
+ * @param path String with the path to be fixed.
+ */
static void fixFilePath(Common::String& path) {
TInt len = path.size();
@@ -79,20 +109,6 @@ static void fixFilePath(Common::String& path) {
}
}
-AbstractFilesystemNode *AbstractFilesystemNode::getCurrentDirectory() {
- char path[MAXPATHLEN];
- getcwd(path, MAXPATHLEN);
- return new SymbianFilesystemNode(path);
-}
-
-AbstractFilesystemNode *AbstractFilesystemNode::getRoot() {
- return new SymbianFilesystemNode(true);
-}
-
-AbstractFilesystemNode *AbstractFilesystemNode::getNodeForPath(const String &path) {
- return new SymbianFilesystemNode(path);
-}
-
SymbianFilesystemNode::SymbianFilesystemNode(bool aIsRoot) {
_path = "";
_isValid = true;
@@ -128,7 +144,26 @@ SymbianFilesystemNode::SymbianFilesystemNode(const String &path) {
}
}
-bool SymbianFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const {
+AbstractFilesystemNode *SymbianFilesystemNode::getChild(const String &n) const {
+ assert(_isDirectory);
+ String newPath(_path);
+
+ if (_path.lastChar() != '\\')
+ newPath += '\\';
+ newPath += n;
+
+ TPtrC8 ptr((const unsigned char*) newPath.c_str(), newPath.size());
+ TFileName fname;
+ fname.Copy(ptr);
+ TBool isFolder = EFalse;
+ BaflUtils::IsFolder(CEikonEnv::Static()->FsSession(), fname, isFolder);
+ if(!isFolder)
+ return 0;
+
+ return new SymbianFilesystemNode(newPath);
+}
+
+bool SymbianFilesystemNode::getChildren(AbstractFSList &myList, ListMode mode) const {
assert(_isDirectory);
if (_isPseudoRoot) {
@@ -199,18 +234,18 @@ bool SymbianFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const
}
CleanupStack::PopAndDestroy(dirPtr);
}
-
}
+
return true;
}
-AbstractFilesystemNode *SymbianFilesystemNode::parent() const {
+AbstractFilesystemNode *SymbianFilesystemNode::getParent() const {
SymbianFilesystemNode *p =NULL;
// Root node is its own parent. Still we can't just return this
// as the GUI code will call delete on the old node.
if (!_isPseudoRoot && _path.size() > 3) {
- p=new SymbianFilesystemNode(false);
+ p = new SymbianFilesystemNode(false);
const char *start = _path.c_str();
const char *end = lastPathComponent(_path);
@@ -221,29 +256,10 @@ AbstractFilesystemNode *SymbianFilesystemNode::parent() const {
}
else
{
- p=new SymbianFilesystemNode(true);
+ p = new SymbianFilesystemNode(true);
}
+
return p;
}
-AbstractFilesystemNode *SymbianFilesystemNode::child(const String &n) const {
- assert(_isDirectory);
- String newPath(_path);
-
- if (_path.lastChar() != '\\')
- newPath += '\\';
- newPath += n;
-
- TPtrC8 ptr((const unsigned char*) newPath.c_str(), newPath.size());
- TFileName fname;
- fname.Copy(ptr);
- TBool isFolder = EFalse;
- BaflUtils::IsFolder(CEikonEnv::Static()->FsSession(), fname, isFolder);
- if(!isFolder)
- return 0;
-
- SymbianFilesystemNode *p = new SymbianFilesystemNode(newPath);
- return p;
-}
-
-#endif // defined(__SYMBIAN32__)
+#endif //#if defined (__SYMBIAN32__)
diff --git a/backends/fs/windows/windows-fs-factory.cpp b/backends/fs/windows/windows-fs-factory.cpp
new file mode 100644
index 0000000000..76b62e5deb
--- /dev/null
+++ b/backends/fs/windows/windows-fs-factory.cpp
@@ -0,0 +1,16 @@
+#include "backends/fs/windows/windows-fs-factory.h"
+#include "backends/fs/windows/windows-fs.cpp"
+
+DECLARE_SINGLETON(WindowsFilesystemFactory);
+
+AbstractFilesystemNode *WindowsFilesystemFactory::makeRootFileNode() const {
+ return new WindowsFilesystemNode();
+}
+
+AbstractFilesystemNode *WindowsFilesystemFactory::makeCurrentDirectoryFileNode() const {
+ return new WindowsFilesystemNode(NULL, true);
+}
+
+AbstractFilesystemNode *WindowsFilesystemFactory::makeFileNodePath(const String &path) const {
+ return new WindowsFilesystemNode(path, false);
+}
diff --git a/backends/fs/windows/windows-fs-factory.h b/backends/fs/windows/windows-fs-factory.h
new file mode 100644
index 0000000000..7d17802b52
--- /dev/null
+++ b/backends/fs/windows/windows-fs-factory.h
@@ -0,0 +1,27 @@
+#ifndef WINDOWS_FILESYSTEM_FACTORY_H
+#define WINDOWS_FILESYSTEM_FACTORY_H
+
+#include "common/singleton.h"
+#include "backends/fs/abstract-fs-factory.h"
+
+/**
+ * Creates WindowsFilesystemNode objects.
+ *
+ * Parts of this class are documented in the base interface class, AbstractFilesystemFactory.
+ */
+class WindowsFilesystemFactory : public AbstractFilesystemFactory, public Common::Singleton<WindowsFilesystemFactory> {
+public:
+ typedef Common::String String;
+
+ virtual AbstractFilesystemNode *makeRootFileNode() const;
+ virtual AbstractFilesystemNode *makeCurrentDirectoryFileNode() const;
+ virtual AbstractFilesystemNode *makeFileNodePath(const String &path) const;
+
+protected:
+ WindowsFilesystemFactory() {};
+
+private:
+ friend class Common::Singleton<SingletonBaseType>;
+};
+
+#endif /*WINDOWS_FILESYSTEM_FACTORY_H*/
diff --git a/backends/fs/windows/windows-fs.cpp b/backends/fs/windows/windows-fs.cpp
index 0e12c4a96a..5a9e1c65b6 100644
--- a/backends/fs/windows/windows-fs.cpp
+++ b/backends/fs/windows/windows-fs.cpp
@@ -29,6 +29,7 @@
#endif
#include "common/stdafx.h"
#include "backends/fs/abstract-fs.h"
+#include <io.h>
#include <stdio.h>
#include <stdlib.h>
#ifndef _WIN32_WCE
@@ -36,39 +37,93 @@
#endif
#include <tchar.h>
-/*
+/**
* Implementation of the ScummVM file system API based on Windows API.
+ *
+ * Parts of this class are documented in the base interface class, AbstractFilesystemNode.
*/
-
class WindowsFilesystemNode : public AbstractFilesystemNode {
protected:
String _displayName;
+ String _path;
bool _isDirectory;
- bool _isValid;
bool _isPseudoRoot;
- String _path;
+ bool _isValid;
public:
+ /**
+ * Creates a WindowsFilesystemNode with the root node as path.
+ *
+ * In regular windows systems, a virtual root path is used "".
+ * In windows CE, the "\" root is used instead.
+ */
WindowsFilesystemNode();
- WindowsFilesystemNode(const String &path);
-
- virtual String displayName() const { return _displayName; }
- virtual String name() const { return _displayName; }
- virtual bool isValid() const { return _isValid; }
+
+ /**
+ * Creates a WindowsFilesystemNode for a given path.
+ *
+ * Examples:
+ * path=c:\foo\bar.txt, currentDir=false -> c:\foo\bar.txt
+ * path=c:\foo\bar.txt, currentDir=true -> current directory
+ * path=NULL, currentDir=true -> current directory
+ *
+ * @param path String with the path the new node should point to.
+ * @param currentDir if true, the path parameter will be ignored and the resulting node will point to the current directory.
+ */
+ WindowsFilesystemNode(const String &path, const bool currentDir);
+
+ virtual bool exists() const { return _access(_path.c_str(), F_OK) == 0; }
+ virtual String getDisplayName() const { return _displayName; }
+ virtual String getName() const { return _displayName; }
+ virtual String getPath() const { return _path; }
virtual bool isDirectory() const { return _isDirectory; }
- virtual String path() const { return _path; }
+ virtual bool isReadable() const { return _access(_path.c_str(), R_OK) == 0; }
+ virtual bool isValid() const { return _isValid; }
+ virtual bool isWritable() const { return _access(_path.c_str(), W_OK) == 0; }
- virtual bool listDir(AbstractFSList &list, ListMode mode) const;
- virtual AbstractFilesystemNode *parent() const;
- virtual AbstractFilesystemNode *child(const String &n) const;
+ virtual AbstractFilesystemNode *getChild(const String &n) const;
+ virtual bool getChildren(AbstractFSList &list, ListMode mode) const;
+ virtual AbstractFilesystemNode *getParent() const;
private:
- static char *toAscii(TCHAR *x);
- static const TCHAR* toUnicode(const char *x);
- static void addFile (AbstractFSList &list, ListMode mode, const char *base, WIN32_FIND_DATA* find_data);
+ /**
+ * Adds a single WindowsFilesystemNode to a given list.
+ * This method is used by getChildren() to populate the directory entries list.
+ *
+ * @param list List to put the file entry node in.
+ * @param mode Mode to use while adding the file entry to the list.
+ * @param base String with the directory being listed.
+ * @param find_data Describes a file that the FindFirstFile, FindFirstFileEx, or FindNextFile functions find.
+ */
+ static void addFile(AbstractFSList &list, ListMode mode, const char *base, WIN32_FIND_DATA* find_data);
+
+ /**
+ * Converts a Unicode string to Ascii format.
+ *
+ * @param str String to convert from Unicode to Ascii.
+ * @return str in Ascii format.
+ */
+ static char *toAscii(TCHAR *str);
+
+ /**
+ * Converts an Ascii string to Unicode format.
+ *
+ * @param str String to convert from Ascii to Unicode.
+ * @return str in Unicode format.
+ */
+ static const TCHAR* toUnicode(const char *str);
};
-
+/**
+ * Returns the last component of a given path.
+ *
+ * Examples:
+ * c:\foo\bar.txt would return "\bar.txt"
+ * c:\foo\bar\ would return "\bar\"
+ *
+ * @param str Path to obtain the last component from.
+ * @return Pointer to the first char of the last component inside str.
+ */
static const char *lastPathComponent(const Common::String &str) {
const char *start = str.c_str();
const char *cur = start + str.size() - 2;
@@ -80,27 +135,6 @@ static const char *lastPathComponent(const Common::String &str) {
return cur + 1;
}
-char* WindowsFilesystemNode::toAscii(TCHAR *x) {
-
-#ifndef UNICODE
- return (char*)x;
-#else
- static char asciiString[MAX_PATH];
- WideCharToMultiByte(CP_ACP, 0, x, _tcslen(x) + 1, asciiString, sizeof(asciiString), NULL, NULL);
- return asciiString;
-#endif
-}
-
-const TCHAR* WindowsFilesystemNode::toUnicode(const char *x) {
-#ifndef UNICODE
- return (const TCHAR *)x;
-#else
- static TCHAR unicodeString[MAX_PATH];
- MultiByteToWideChar(CP_ACP, 0, x, strlen(x) + 1, unicodeString, sizeof(unicodeString) / sizeof(TCHAR));
- return unicodeString;
-#endif
-}
-
void WindowsFilesystemNode::addFile(AbstractFSList &list, ListMode mode, const char *base, WIN32_FIND_DATA* find_data) {
WindowsFilesystemNode entry;
char *asciiName = toAscii(find_data->cFileName);
@@ -128,25 +162,24 @@ void WindowsFilesystemNode::addFile(AbstractFSList &list, ListMode mode, const c
list.push_back(new WindowsFilesystemNode(entry));
}
-AbstractFilesystemNode *AbstractFilesystemNode::getCurrentDirectory() {
- char path[MAX_PATH];
- GetCurrentDirectory(MAX_PATH, path);
-
- // Add a trailing slash, if necessary.
- if (path[0] != 0) {
- if (path[strlen(path) - 1] != '\\')
- strcat(path, "\\");
- }
-
- return new WindowsFilesystemNode(path);
-}
-
-AbstractFilesystemNode *AbstractFilesystemNode::getRoot() {
- return new WindowsFilesystemNode();
+char* WindowsFilesystemNode::toAscii(TCHAR *str) {
+#ifndef UNICODE
+ return (char*)str;
+#else
+ static char asciiString[MAX_PATH];
+ WideCharToMultiByte(CP_ACP, 0, str, _tcslen(str) + 1, asciiString, sizeof(asciiString), NULL, NULL);
+ return asciiString;
+#endif
}
-AbstractFilesystemNode *AbstractFilesystemNode::getNodeForPath(const String &path) {
- return new WindowsFilesystemNode(path);
+const TCHAR* WindowsFilesystemNode::toUnicode(const char *str) {
+#ifndef UNICODE
+ return (const TCHAR *)str;
+#else
+ static TCHAR unicodeString[MAX_PATH];
+ MultiByteToWideChar(CP_ACP, 0, str, strlen(str) + 1, unicodeString, sizeof(unicodeString) / sizeof(TCHAR));
+ return unicodeString;
+#endif
}
WindowsFilesystemNode::WindowsFilesystemNode() {
@@ -165,26 +198,55 @@ WindowsFilesystemNode::WindowsFilesystemNode() {
#endif
}
-WindowsFilesystemNode::WindowsFilesystemNode(const String &p) {
- assert(p.size() > 0);
+WindowsFilesystemNode::WindowsFilesystemNode(const String &p, const bool currentDir) {
+ if (currentDir) {
+ char path[MAX_PATH];
+ GetCurrentDirectory(MAX_PATH, path);
- _path = p;
+ // Add a trailing slash, if necessary.
+ if (path[0] != 0) {
+ if (path[strlen(path) - 1] != '\\')
+ strcat(path, "\\");
+ }
+ _path = path;
+ }
+ else {
+ assert(p.size() > 0);
+ _path = p;
+ }
+
_displayName = lastPathComponent(_path);
// Check whether it is a directory, and whether the file actually exists
DWORD fileAttribs = GetFileAttributes(toUnicode(_path.c_str()));
if (fileAttribs == INVALID_FILE_ATTRIBUTES) {
- _isValid = false;
_isDirectory = false;
+ _isValid = false;
} else {
- _isValid = true;
_isDirectory = ((fileAttribs & FILE_ATTRIBUTE_DIRECTORY) != 0);
+ _isValid = true;
}
_isPseudoRoot = false;
}
-bool WindowsFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const {
+AbstractFilesystemNode *WindowsFilesystemNode::getChild(const String &n) const {
+ assert(_isDirectory);
+
+ String newPath(_path);
+ if (_path.lastChar() != '\\')
+ newPath += '\\';
+ newPath += n;
+
+ // Check whether the directory actually exists
+ DWORD fileAttribs = GetFileAttributes(toUnicode(newPath.c_str()));
+ if (fileAttribs == INVALID_FILE_ATTRIBUTES)
+ return 0;
+
+ return new WindowsFilesystemNode(newPath, false);
+}
+
+bool WindowsFilesystemNode::getChildren(AbstractFSList &myList, ListMode mode) const {
assert(_isDirectory);
if (_isPseudoRoot) {
@@ -218,9 +280,12 @@ bool WindowsFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const
sprintf(searchPath, "%s*", _path.c_str());
handle = FindFirstFile(toUnicode(searchPath), &desc);
+
if (handle == INVALID_HANDLE_VALUE)
return false;
+
addFile(myList, mode, _path.c_str(), &desc);
+
while (FindNextFile(handle, &desc))
addFile(myList, mode, _path.c_str(), &desc);
@@ -230,10 +295,12 @@ bool WindowsFilesystemNode::listDir(AbstractFSList &myList, ListMode mode) const
return true;
}
-AbstractFilesystemNode *WindowsFilesystemNode::parent() const {
+AbstractFilesystemNode *WindowsFilesystemNode::getParent() const {
assert(_isValid || _isPseudoRoot);
+
if (_isPseudoRoot)
return 0;
+
WindowsFilesystemNode *p = new WindowsFilesystemNode();
if (_path.size() > 3) {
const char *start = _path.c_str();
@@ -246,23 +313,8 @@ AbstractFilesystemNode *WindowsFilesystemNode::parent() const {
p->_displayName = lastPathComponent(p->_path);
p->_isPseudoRoot = false;
}
+
return p;
}
-AbstractFilesystemNode *WindowsFilesystemNode::child(const String &n) const {
- assert(_isDirectory);
- String newPath(_path);
- if (_path.lastChar() != '\\')
- newPath += '\\';
- newPath += n;
-
- // Check whether the directory actually exists
- DWORD fileAttribs = GetFileAttributes(toUnicode(newPath.c_str()));
- if (fileAttribs == INVALID_FILE_ATTRIBUTES)
- return 0;
-
- WindowsFilesystemNode *p = new WindowsFilesystemNode(newPath);
- return p;
-}
-
-#endif // WIN32
+#endif //#ifdef WIN32
diff --git a/backends/platform/PalmOS/Src/launcher/forms/formSelect.cpp b/backends/platform/PalmOS/Src/launcher/forms/formSelect.cpp
index 641d646bb2..085fb2499a 100755
--- a/backends/platform/PalmOS/Src/launcher/forms/formSelect.cpp
+++ b/backends/platform/PalmOS/Src/launcher/forms/formSelect.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/backends/platform/PalmOS/Src/launcher/forms/formSelect.cpp $
+ * $Id:formSelect.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/backends/platform/ds/arm9/makefile.in b/backends/platform/ds/arm9/makefile.in
deleted file mode 100644
index e7a7da4a59..0000000000
--- a/backends/platform/ds/arm9/makefile.in
+++ /dev/null
@@ -1,350 +0,0 @@
-#BUILD_PLUGINS = 1
-#libndsdir = $(DEVKITPRO)/libnds
-libndsdir = /home/neil/devkitpro/libnds
-
-# Select the build you want by uncommenting one of the following lines:
-
-DS_BUILD_A = 1
-#DS_BUILD_B = 1
-#DS_BUILD_C = 1
-#DS_BUILD_D = 1
-
-# Uncomment the following line to build in support for MP3 audio
-# using libmad:
-USE_MAD = 1
-
-# Uncomment the following line to enable support for the
-# ace DS Debugger (remembering to make the same change in the arm7 makefile):
-#USE_DEBUGGER = 1
-# NOTE: The header and libs for the debugger is assumed to be in the libnds
-# folder.
-
-VPATH = $(srcdir)
-
-# Command to build libmad is:
-# ./configure --host=arm-elf --enable-speed --enable-sso -enable-fpm=arm CFLAGS='-specs=ds_arm9.specs -mthumb-interwork'
-
-
-ifdef DS_BUILD_A
- DEFINES = -DDS_SCUMM_BUILD -DDS_BUILD_A
- LOGO = logoa.bmp
- DISABLE_HE = 1
- #DISABLE_SCUMM = 1
- DISABLE_SCUMM_7_8 = 1
- DISABLE_AGOS = 1
- DISABLE_SKY = 1
- DISABLE_SWORD1 = 1
- DISABLE_SWORD2 = 1
- DISABLE_QUEEN = 1
- DISABLE_SAGA = 1
- DISABLE_KYRA = 1
- DISABLE_GOB = 1
- DISABLE_LURE = 1
- DISABLE_CINE = 1
- DISABLE_AGI = 1
- DISABLE_TOUCHE = 1
- DISABLE_PARALLACTION = 1
- BUILD=scummvm-A
-endif
-
-ifdef DS_BUILD_B
- DEFINES = -DDS_NON_SCUMM_BUILD -DDS_BUILD_B
- LOGO = logob.bmp
- DISABLE_HE = 1
- DISABLE_SCUMM = 1
- DISABLE_SCUMM_7_8 = 1
- DISABLE_AGOS = 1
- #DISABLE_SKY = 1
- DISABLE_SWORD1 = 1
- DISABLE_SWORD2 = 1
- #DISABLE_QUEEN = 1
- DISABLE_SAGA = 1
- DISABLE_KYRA = 1
- DISABLE_GOB = 1
- DISABLE_LURE = 1
- DISABLE_CINE = 1
- DISABLE_AGI = 1
- DISABLE_TOUCHE = 1
- DISABLE_PARALLACTION = 1
- BUILD=scummvm-B
-endif
-
-ifdef DS_BUILD_C
- DEFINES = -DDS_NON_SCUMM_BUILD -DDS_BUILD_C
- LOGO = logoc.bmp
- DISABLE_HE = 1
- DISABLE_SCUMM = 1
- DISABLE_SCUMM_7_8 = 1
- #DISABLE_AGOS = 1
- DISABLE_SKY = 1
- DISABLE_SWORD1 = 1
- DISABLE_SWORD2 = 1
- DISABLE_QUEEN = 1
- DISABLE_SAGA = 1
- #DISABLE_KYRA = 1
- #DISABLE_GOB = 1
- DISABLE_LURE = 1
- DISABLE_CINE = 1
- DISABLE_AGI = 1
- DISABLE_TOUCHE = 1
- DISABLE_PARALLACTION = 1
- BUILD=scummvm-C
-endif
-
-ifdef DS_BUILD_D
- DEFINES = -DDS_NON_SCUMM_BUILD -DDS_BUILD_D
- LOGO = logoc.bmp
- DISABLE_HE = 1
- DISABLE_SCUMM = 1
- DISABLE_SCUMM_7_8 = 1
- DISABLE_AGOS = 1
- DISABLE_SKY = 1
- DISABLE_SWORD1 = 1
- DISABLE_SWORD2 = 1
- DISABLE_QUEEN = 1
- DISABLE_SAGA = 1
- DISABLE_KYRA = 1
- DISABLE_GOB = 1
- DISABLE_LURE = 1
- #DISABLE_CINE = 1
- #DISABLE_AGI = 1
- DISABLE_TOUCHE = 1
- DISABLE_PARALLACTION = 1
- BUILD=scummvm-A
-endif
-
-
-ARM7BIN := -7 $(CURDIR)/../../arm7/arm7.bin
-ICON := -b ../../../logo.bmp "ScummVM;By Neil Millstone;"
-
-CC = arm-eabi-gcc
-CXX = arm-eabi-g++
-
-CFLAGS = -Wno-multichar -Wall -Os\
- -Wno-multichar -mcpu=arm9tdmi -mtune=arm9tdmi \
- -mcpu=arm9tdmi -mtune=arm9tdmi -fomit-frame-pointer\
- -ffast-math -mthumb-interwork
-
-ifdef USE_DEBUGGER
- DEFINES += -DUSE_DEBUGGER
- CFLAGS += -g
-endif
-
-CXXFLAGS= $(CFLAGS) -Wno-non-virtual-dtor -Wno-non-virtual-dtor \
- -fno-exceptions -fno-rtti
-
-ASFLAGS = -mcpu=arm9tdmi -mthumb-interwork
-DEFINES += -D__DS__ -DNDS -DARM9 -DNONSTANDARD_PORT -DDISABLE_FANCY_THEMES -DDISABLE_DEFAULT_SAVEFILEMANAGER
-ifdef USE_MAD
- DEFINES += -DUSE_MAD
-endif
-
-
-LDFLAGS = -specs=ds_arm9.specs -mthumb-interwork -mno-fpu -Wl,-Map,map.txt
-
-INCLUDES= -I./ -I$(portdir)/$(BUILD) -I$(srcdir) -I$(srcdir)/common -I$(portdir)/source -I$(portdir)/source/compressor -I$(portdir)/source/fat \
- -I$(srcdir)/backends/fs -I$(srcdir)/backends/fs/ds -I$(portdir)/data -I$(libndsdir)/include -I$(portdir)/../commoninclude\
- -I$(srcdir)/scumm -I$(libndsdir)/include -I$(libndsdir)/include/nds -I$(srcdir)/engines -I$(portdir)/source/mad\
- -I$(portdir)/source/libcartreset
-
-
-LIBS = -lm -L$(libndsdir)/lib -L$(portdir)/lib -lnds9
-ifdef USE_MAD
- LIBS += -lmad
-endif
-ifdef USE_DEBUGGER
- LIBS += -ldsdebugger -ldswifi9
-endif
-
-#-Lscumm -lscumm -Lbase -lbase -Lcommon -lcommon -Lgraphics -lgraphics -Lgui -lgui -Lsound -lsound
-EXECUTABLE = scummvm.elf
-PLUGIN_PREFIX =
-PLUGIN_SUFFIX = .plg
-PLUGIN_EXTRA_DEPS = plugin.x plugin.syms scummvm.elf
-PLUGIN_LDFLAGS = -nostartfiles -Wl,-q,-Tplugin.x,--just-symbols,scummvm.elf,--retain-symbols-file,plugin.syms -L$(ronindir)/lib
-MKDIR = mkdir -p
-RM = rm -f
-RM_REC = rm -rf
-AR = arm-eabi-ar cru
-RANLIB = arm-eabi-ranlib
-OBJCOPY = arm-eabi-objcopy
-AS = arm-eabi-as
-HAVE_GCC3 = true
-DISABLE_SCALERS = true
-
-ifdef BUILD_PLUGINS
-DEFINES += -DDYNAMIC_MODULES
-PRE_OBJS_FLAGS = -Wl,--whole-archive
-POST_OBJS_FLAGS = -Wl,--no-whole-archive
-endif
-
-PORT_OBJS := $(portdir)/source/blitters.o $(portdir)/source/cdaudio.o $(portdir)/source/dsmain.o \
- $(portdir)/../../../fs/ds/ds-fs.o $(portdir)/source/gbampsave.o $(portdir)/source/scummhelp.o\
- $(portdir)/source/osystem_ds.o $(portdir)/source/portdefs.o $(portdir)/source/ramsave.o\
- $(portdir)/source/scummconsole.o $(portdir)/source/touchkeyboard.o $(portdir)/source/zipreader.o\
- $(portdir)/source/dsoptions.o $(portdir)/source/keys.o
-
-DATA_OBJS := $(portdir)/data/icons.o $(portdir)/data/keyboard.o $(portdir)/data/keyboard_pal.o $(portdir)/data/default_font.o
-
-
-COMPRESSOR_OBJS := $(portdir)/source/compressor/lz.o
-
-FAT_OBJS := $(portdir)/source/fat/disc_io.o $(portdir)/source/fat/gba_nds_fat.o\
- $(portdir)/source/fat/io_fcsr.o $(portdir)/source/fat/io_m3cf.o\
- $(portdir)/source/fat/io_mpcf.o $(portdir)/source/fat/io_sccf.o\
- $(portdir)/source/fat/io_m3sd.o\
- $(portdir)/source/fat/io_nmmc.o $(portdir)/source/fat/io_scsd.o \
- $(portdir)/source/fat/io_scsd_asm.o \
- $(portdir)/source/fat/io_njsd.o \
- $(portdir)/source/fat/io_mmcf.o \
- $(portdir)/source/fat/io_sd_common.o \
- $(portdir)/source/fat/io_m3_common.o \
- $(portdir)/source/fat/io_dldi.o \
- $(portdir)/source/fat/m3sd.o
-
-
-# $(portdir)/source/fat/io_cf_common.o $(portdir)/source/fat/io_m3_common.o\
-# $(portdir)/source/fat/io_sd_common.o $(portdir)/source/fat/io_scsd_s.o \
-# $(portdir)/source/fat/io_sc_common.o $(portdir)/source/fat/io_sd_common.o
-
-LIBCARTRESET_OBJS := $(portdir)/source/libcartreset/cartreset.o
-
-
-
-OBJS := $(DATA_OBJS) $(LIBCARTRESET_OBJS) $(PORT_OBJS) $(COMPRESSOR_OBJS) $(FAT_OBJS)
-
-
-
-MODULE_DIRS += .
-
-ndsall:
- @[ -d $(BUILD) ] || mkdir -p $(BUILD)
- make -C ./$(BUILD) -f ../makefile scummvm.nds
-
-include $(srcdir)/Makefile.common
-
-clean:
- $(RM) $(OBJS) $(EXECUTABLE)
- rm -fr $(BUILD)
-
-plugin_dist :
- find . -name '*.plg' | while read p; do \
- sh-elf-strip -g -o "`basename \"$$p\" | tr '[:lower:]' '[:upper:]'`" "$$p"; \
- done
-
-dist : SCUMMVM.BIN plugins plugin_dist
-
-
-#---------------------------------------------------------------------------------
-# canned command sequence for binary data
-#---------------------------------------------------------------------------------
-#define bin2o
-# bin2s $< | $(AS) -mthumb -mthumb-interwork -o $(@)
-# echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_raw_end[];" > `(echo $(<F) | tr . _)`.h
-# echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_raw[];" >> `(echo $(<F) | tr . _)`.h
-# echo "extern const u32" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_raw_size";" >> `(echo $(<F) | tr . _)`.h
-#endef
-
-
-define bin2o
- bin2s $< | $(AS) -mthumb -mthumb-interwork -o $(@)
- echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end[];" > `(echo $(<F) | tr . _)`.h
- echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"[];" >> `(echo $(<F) | tr . _)`.h
- echo "extern const u32" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size";" >> `(echo $(<F) | tr . _)`.h
-endef
-
-
-#define bin2o
-# @echo $(*)
-# cp $(<) $(*).tmp
-# $(OBJCOPY) -I binary -O elf32-littlearm -B arm \
-# --rename-section .data=.rodata \
-# --redefine-sym _binary_$(subst .,_,$(subst /,_,$(*)))_tmp_start=$(notdir $*)\
-# --redefine-sym _binary_$(subst .,_,$(subst /,_,$(*)))_tmp_end=$(notdir $*)_end\
-# $(*).tmp $(@)
-# echo "extern const u8" $(notdir $*)"[] __attribute__ ((aligned (4)));" > $(*).h
-# echo "extern const u32" $(notdir $(*))_size[]";" >> $(*).h
-#
-# echo $(*).h
-# rm $(*).tmp
-#endef
-
-##############
-# Replacement rule for the one in makefile.common
-##############
-ifndef HAVE_GCC3
-# If you use GCC, disable the above and enable this for intelligent
-# dependency tracking.
-.cpp.o:
- $(MKDIR) $(*D)/$(DEPDIR)
- $(CXX) -Wp,-MMD,"$(*D)/$(DEPDIR)/$(*F).d2" $(CXXFLAGS) $(CPPFLAGS) -c $(<) -o $*.o
-# $(ECHO) "$(*D)/" > $(*D)/$(DEPDIR)/$(*F).d
- $(CAT) "$(*D)/$(DEPDIR)/$(*F).d2" >> "$(*D)/$(DEPDIR)/$(*F).d"
- $(RM) "$(*D)/$(DEPDIR)/$(*F).d2"
-else
-# If you even have GCC 3.x, you can use this build rule, which is safer; the above
-# rule can get you into a bad state if you Ctrl-C at the wrong moment.
-# Also, with this GCC inserts additional dummy rules for the involved headers,
-# which ensures a smooth compilation even if said headers become obsolete.
-.cpp.o:
- $(MKDIR) $(*D)/$(DEPDIR)
-# $(CXX) -Wp,-MMD,"$(*D)/$(DEPDIR)/$(*F).d",-MQ,"$@",-MP $(CXXFLAGS) $(CPPFLAGS) -c $(<) -o $*.o
- $(CXX) -MMD -MF "$(*D)/$(DEPDIR)/$(*F).d" $(CXXFLAGS) $(CPPFLAGS) -c $(<) -o $*.o
-endif
-
-
-#---------------------------------------------------------------------------------
-
-#---------------------------------------------------------------------------------
-%.o : %.pcx
-#---------------------------------------------------------------------------------
- @echo $(notdir $<)
- @$(bin2o)
-
-#---------------------------------------------------------------------------------
-%.o : %.bin
-#---------------------------------------------------------------------------------
- @echo $(notdir $<)
- @$(bin2o)
-
-#---------------------------------------------------------------------------------
-%.o : %.raw
-#---------------------------------------------------------------------------------
- @echo $(notdir $<)
- @$(bin2o)
-
-#---------------------------------------------------------------------------------
-%.o : %.pal
-#---------------------------------------------------------------------------------
- @echo $(notdir $<)
- @$(bin2o)
-
-#---------------------------------------------------------------------------------
-%.o : %.map
-#---------------------------------------------------------------------------------
- @echo $(notdir $<)
- @$(bin2o)
-
-#---------------------------------------------------------------------------------
-%.o : %.mdl
-#---------------------------------------------------------------------------------
- @echo $(notdir $<)
- @$(bin2o)
-
-#---------------------------------------------------------------------------------
-%.nds: %.bin
- @echo ndstool -c $@ -9 scummvm.bin $(ARM7BIN) -b ../../$(LOGO) "$(shell basename $@);ScummVM @VERSION@;DS Port"
- ndstool -c $@ -9 scummvm.bin $(ARM7BIN) -b ../../$(LOGO) "$(shell basename $@);ScummVM @VERSION@;DS Port"
- dsbuild $@ -l ../ndsloader.bin
-
- padbin 16 $(basename $@).ds.gba
-
-#---------------------------------------------------------------------------------
-%.bin: %.elf
- $(OBJCOPY) -S scummvm.elf scummvm-stripped.elf
- $(OBJCOPY) -O binary scummvm-stripped.elf scummvm.bin
-
-#%.o: %.s
-# $(MKDIR) $(*D)/$(DEPDIR)
-# $(CXX) -Wp,-MMD,"$(*D)/$(DEPDIR)/$(*F).d",-MQ,"$@",-MP $(CXXFLAGS) $(CPPFLAGS) -c $(<) -o $*.o
-
diff --git a/backends/platform/symbian/res/scummvm.cer b/backends/platform/symbian/res/scummvm.cer
deleted file mode 100644
index 70b765e6b4..0000000000
--- a/backends/platform/symbian/res/scummvm.cer
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDXTCCAxqgAwIBAgIBADALBgcqhkjOOAQDBQAwgZIxEDAOBgNVBAoTB1NjdW1t
-Vk0xfjB8BgNVBAMTdVNjdW1tVk0gUzYwdjM3OThiOTk0MDg2OTFhZThlZWM2N2Zl
-NGUxYmZjOTQ1YTI0YjRmYjZmMTlmMGJiNzE2N2FjYWEwYzBlNjc0OTM3MmEyY2Qw
-YjNiMmY5MWRmMGQyNTQwZjdlYzc0YzllNzhhYWJlMzkwZTAeFw0wNzA2MTAxOTQ4
-NTJaFw0wODA2MDkxOTQ4NTJaMIGSMRAwDgYDVQQKEwdTY3VtbVZNMX4wfAYDVQQD
-E3VTY3VtbVZNIFM2MHYzNzk4Yjk5NDA4NjkxYWU4ZWVjNjdmZTRlMWJmYzk0NWEy
-NGI0ZmI2ZjE5ZjBiYjcxNjdhY2FhMGMwZTY3NDkzNzJhMmNkMGIzYjJmOTFkZjBk
-MjU0MGY3ZWM3NGM5ZTc4YWFiZTM5MGUwggG3MIIBKwYHKoZIzjgEATCCAR4CgYEA
-ydXBoDldKAiq3DmfGPwReY9qHEMEh4AyuK5N4M7PvCSYUWU6sWp9PQJ1DDXOm54o
-k8IicM9/dmNdQVAGah2Oi5wizbaYV3HkFufLQOQdaOFg7uclJKp+4cnPsG8lz4DS
-j6o9kRxANZ9vJgE7qxWG5HnEPNm/l0mDbyWbtbAT//sCFQDCZT2JjR+U+o2orfUL
-tcojrwdLSQKBgGdx5eoIaGOxIXgP7ttNdL+7qOYMJD2wI93o5eRiLOaTme276pr3
-oYv3VVRZJa6UXD298b705ia/XQqO6KA9QJgPMjJnwD/8ydcZyZqmX6sNpv6dc7AN
-y/6BJN6DO0xUc9BTkQr4cYBhfkc1mYTBzxOj7bi4aATBjcCXzDXXyT2bA4GFAAKB
-gQCXsapLABnAVfz60pOQt+Kcl3x+/Rz+vXoItLg3O8cVjooi/q0uaaXF/AnO2njb
-lLHbQX3zmv/+tvD2PSyFtgNgscyTf/EECqWMK94Lb0/Jw1rvdNO86eWzsW7UzArF
-5KjJbUn64+PTSU8m7GTqGN4NFh6yFBk//Z2ljy+Zt0WZBDALBgcqhkjOOAQDBQAD
-MAAwLQIUJUCWx57QyGsiPM5w5qvX3ZYF0/kCFQC47QWyrzi4dr2y2iDNWsln7La4
-Qw==
------END CERTIFICATE-----
diff --git a/backends/platform/symbian/res/scummvm.key b/backends/platform/symbian/res/scummvm.key
deleted file mode 100644
index 62e3d3858c..0000000000
--- a/backends/platform/symbian/res/scummvm.key
+++ /dev/null
@@ -1,15 +0,0 @@
------BEGIN DSA PRIVATE KEY-----
-Proc-Type: 4,ENCRYPTED
-DEK-Info: DES-EDE3-CBC,AA4358B4EE40C19C
-
-OyPKZgptp6jQoGEckxKO4fHS9IL72F0rHduv4qguYHdKeyjREgWDN6+/QhI3SQWu
-9bch/oyo/mhO6ZcLjOukBVaygYNw8VTnuEUITmPPrLo7Hcrs12y5jr6MCJ1XBho8
-K0eBwJpqEYFlRZcGqLhJVcPbREEZAOY522MsnT4V3Sa2yerK0AWMSXSTjWRPVxlo
-RdqB7vdU/zp3FZvV1gXp+aAOb0WoUbZZYo5r4JnHS+6DGHJfWtXucz4VhcrYxLa8
-xNE3WvTvnIyudG1Yc4J5pl0fpS7wBHQHFtqv2ncRWhY49r9RNR6bfMLZULZj8mwo
-QRYkUeaAkdEkTiYlVl/KQ1i3Hh1qupaQwxF/WqCtfbvLA6KlzYLllTnGwsRHujid
-f97fGt1z8uWGtzDWQzKW3nY0I2psAA/bCYwL88G1aOPEyp4Ql1lkyxRm4Tw7Zu5M
-pF09dAgkFVvPH5Bn7o05ZS9ruNhF5K/5QNg3WTVDhZEqkqiXWRGXaEhc6ZfoK/+H
-ne1d3+QfKEX8rxAtjX1hVNkNG1ivmIExpa45wUmSE2pOIj31ny0gK1tCv4mdgEDL
-elR3M/oAw0BdxBn9LqmDaQ==
------END DSA PRIVATE KEY-----
diff --git a/backends/platform/wince/README-WinCE.txt b/backends/platform/wince/README-WinCE.txt
deleted file mode 100644
index 17371f9c57..0000000000
--- a/backends/platform/wince/README-WinCE.txt
+++ /dev/null
@@ -1,616 +0,0 @@
-ScummVM Windows CE FAQ
-Last updated: $Date$
-Release version: 0.10.0
-------------------------------------------------------------------------
-
-New in this version
--------------------
-
-0.10.0:
-Major improvements have taken place in this version, mostly for behind-
-the-scenes stuff. First, we have migrated to GCC for building the Windows
-CE port. This helped take care of some obscure compiler bugs which were
-in there for quite a long time. It has also lead to efficient code
-generation due to GCC's advanced capabilities and consequently increased
-runtime speed. The second important change was the overhaul of the SDL
-library port. The benefits from this are twofold: The real-time code paths
-have been optimized, including contributed ARM assembly code for critical
-functions. Further, the screen display and mouse/keyboard input code has
-been partially rewritten to allow for increased compatibility across all
-devices.
-Due to the update of keyboard handling code, the keycodes have changed
-slightly. Running this version of ScummVM will overwrite your key bindings
-with the new defaults. See the section on how to play on Smartphones and
-Pocket PCs below for the new default keybindings.
-
-------------------------------------------------------------------------
-
-This document is intended to give common answers to specific ScummVM
-issues on Windows CE, in 3 sections
- * "General questions" : browse this section to get started and see
- general issues
- * "Game specific questions" : lists some common game specific issues
- * "Support and links" : how to get support if you're still puzzled
-
-------------------------------------------------------------------------
-General questions
-------------------------------------------------------------------------
-
-Which devices are supported ?
------------------------------
-
-Official build
---------------
-
-The official build is based on the ARM architecture and should work with any
-Pocket PC 2000, Pocket PC 2002, Pocket PC 2003, Pocket PC 2003 SE, Smartphone
-2002, Smartphone 2003 or Windows Mobile based device.
-
-Support for old ARM architectures (Handheld PCs, Palm Size PCs) and other CPUs
-(MIPS, SH3) is discontinued. Feel free to generate builds for these
-architectures and contact us to include them on ScummVM website.
-
-Games supported
----------------
-
-The Windows CE port of ScummVM supports all available game engines.
-
-ScummVM distinguishes devices based on two characteristics: Type and resolution.
-Supported types of devices are Smartphones (usually no stylus) and Pocket PCs
-(stylus). The supported resolutions are 176x220 (Smartphone), 240x240 (QVGA
-square), 240x320 (QVGA), 320x240 (QVGA landscape), 480x640 (VGA). Devices with
-resolutions larger than VGA should also be supported with automatic screen
-centering.
-
-* Low resolution Smartphones (176x220)
-
-Support is only provided for all 320x200 or 320x240 games. The font can get
-hard to read (you should prefer talkie games, or wear glasses :-P)
-Games with 640x480 resolution such as COMI or BSWORD cannot be scaled down
-to this resolution and still be playable.
-
-* QVGA square devices (240x240)
-
-Only 320x200 or 320x240 games are supported due to lack of downsampling scaler.
-
-* QVGA Pocket PCs or Smartphones (240x320 or 320x240)
-
-All games are playable in these devices. Landscape devices may not be able to
-rotate the screen around.
-
-* VGA (640x480) or higher Pocket PCs
-
-All non VGA games should work properly on these devices. They can be resized
-with different scalers. Moreover, VGA games will be displayed in true VGA mode.
-
-Partial / Discontinued support
-------------------------------
-
-Support for the following devices is not complete, not working properly or
-discontinued because the device is now obsolete. Feel free to contribute and
-improve the port for your favorite device, or use the last release built with
-the previous port architecture (0.5.1) which was less resource hungry and
-supported more exotic devices.
-
-* "Paletted" devices (non "true color")
-
-These devices will be supported through the GDI layer which will slow down the
-games a lot. You can try to disable the music/sound effects to get a better
-game experience.
-
-* "Mono" devices
-
-I don't even think anything will be displayed on these devices :) you can try
-and report your success ...
-
-* MIPS/SH3 devices with QVGA resolution (240x320), "true color"
-
-Some devices may be a bit too slow, especially if direct screen access (GAPI)
-is not supported on these devices.
-
-* ARM/MIPS/SH3 devices with VGA resolution (640x480) (Palm Size PC / Handheld
- PC platform)
-
-True VGA games will probably be too slow to run properly on these devices even
-if they can support them ...
-
-* ARM/MIPS/SH3 devices with desktop resolution (800x600) (Handheld PC platform)
-
-No, there will never be ANY scaler supporting 800x600 resolution, because
-320x200 games CANNOT be resized to a 800x600 by a simple operation.
-
-And the device will probably be too slow to perform any kind of graphic
-transform anyway :)
-
-How do I install ScummVM for Windows CE ?
------------------------------------------
-
-Simple! Unpack the release package on your desktop pc, then copy all its contents
-to a folder on your device. Typically, you should at least have scummvm.exe,
-modern.ini and modern.zip in the same directory. Finally, upload your beloved games
-and fire it up :-)
-
-Some devices (like Pocket PC 2000) require GAPI to be present.
-
-How do I install a game ?
--------------------------
-
-You'll at least need to copy all the data files from your game, in a
-sub-directory of your game directory.
-
-You'll need to put the data files in a directory named after ScummVM game
-name (see "Supported Games" section in ScummVM readme) for the games having
-"generic" data files (.LFL files). Recent games can be put in any directory.
-
-You can compress the multimedia files (sound/video) as described in the
-ScummVM readme.
-
-You can compress the audio tracks of Loom or Monkey Island 1 as described in
-the ScummVM readme. If you are running these games on a slow device with Ogg
-Vorbis compression, it's recommended to sample the files to 11 kHz (this sample
-rate is not supported by other versions of ScummVM).
-
-If you need more details, you can check SirDave's mini-manual online available
-at: http://forums.scummvm.org/viewtopic.php?t=936
-and at: http://www.pocketmatrix.com/forums/viewtopic.php?t=8606
-
-How do I run a game ?
----------------------
-
-If it's the first time you're running ScummVM for Windows CE, have installed or
-removed games, you need to rescan your game directory.
- * Select Add Game, tap the root directory of your games, and tap "Yes" to begin
- an automatic scan of the installed games.
-
-Usually all games are detected and you can start playing right away. If your
-game is not detected check its directory name and your data files.
-
-To play a game, tap on its name then tap the "Start" button or double tap its
-name.
-
-How do I play a game on a Pocket PC or Handheld PC device ?
------------------------------------------------------------
-
-The stylus is your mouse cursor, and a tap is a left mouse button click.
-
-As the Pocket PC lacks some keys, a toolbar is displayed at the bottom of the
-screen to make the most common functions just a tap away
- * The disk icon opens ScummVM options menu to save your game, or change your
- current game settings (depends on the game)
- * The movie icon skips a non interactive sequence, the current dialog or
- behaves like the ESC key on a regular keyboard (depends on the game)
- * The sound icon turns all sound effects and music off and on
- * The key icon allow you to map a key action to a device button
- * The monkey icon switches between portrait, landscape and inverse landscape
- mode (depends on the display drivers)
-
-You can map additional actions on your device hardware buttons using the
-"Options" / "Key" menu in the ScummVM options menu. To associate an action to
-a key, tap the action, then the "Map" button and press the hardware key.
-The following actions are available :
-
- * Pause : pause the game
- * Save : open ScummVM option menu
- * Quit : quit ScummVM (without saving, be careful when using it)
- * Skip : skip a non interactive sequence, the current dialog or
- behaves like the ESC key on a regular keyboard
- * Hide : hide or display the toolbar
- * Keyboard : hide or display the virtual keyboard
- * Sound : turns all sound effects and music off and on
- * Right click : acts as a right mouse button click
- * Cursor : hide or display the mouse cursor
- * Free look : go in or out of free-look mode. In this mode, you can tap
- the screen to look for interesting locations without walking.
- * Zoom up : magnify the upper part of the screen for 640x480 games
- rendered on a QVGA device.
- * Zoom down : magnify the lower part of the screen for 640x480 games
- rendered on a QVGA device.
- * Multi Function : this key performs a different function depending on the game
- : Full Throttle -> win an action sequence (cheat)
- : Fate of Atlantis -> sucker punch (cheat)
- : Bargon -> F1 (start the game)
- : All AGI games -> bring up the predictive input dialog
- * Bind keys : map a key action to a device button
- * Up,Down,Left :
- Right, : emulate mouse/stylus behavior
- Left Click :
-
-The default key bindings for Pocket PCs are (note that not all keys are mapped):
- * Up, Down, Left, Right : (dpad) arrow keys
- * Left Click : softkey A
-
-If you start a game when a Right click mapping is necessary, ScummVM will ask
-you to map one of your hardware key to this action before playing. Just press
-the key you want to map if you see this message.
-
-Notes:
-- THE TOOLBAR CAN BE CYCLED BY DOUBLE TAPPING (SEE BELOW)
-- YOU MUST HIDE THE TOOLBAR TO SCROLL THROUGH THE INVENTORY IN ZAK
-- YOU MUST DISPLAY THE KEYBOARD TO FIGHT IN INDIANA JONES 3
-- YOU MUST MAP THE RIGHT CLICK ACTION TO PLAY SEVERAL GAMES
-
-How do I hide the toolbar ?
----------------------------
-
-Note: THIS IS A VERY USEFUL AND SOMETIMES NECESSARY SHORTCUT
-
-Double tapping the stylus at the top of the screen will switch between a
-visible toolbar panel, a virtual keyboard, and hiding panel. If any part of
-the screen is obscured by the toolbar (like the load/save game dialogs) you can
-use the invisible panel mode to get to it. For 320x200 games on QVGA Pocket
-PCs, when the panel is hidden the game screen is resized to 320x240 (aspect
-ratio correction) for better gaming experience.
-
-How do I play a game on a Smartphone device ?
----------------------------------------------
-
-On non-stylus devices, the mouse cursor is emulated via a set of keys.
-The cursor will move faster if you keep the key down. You can tweak this
-behaviour in the configuration file described below.
-
-Here is
-the list of available actions for Smartphones:
-
- * Up,Down,Left :
- Right, : emulate mouse/stylus behavior
- Left Click :
- Right Click :
- * Save : open ScummVM option menu
- * Skip : skip a non interactive sequence, the current dialog or
- behaves like the ESC key on a regular keyboard
- * Zone : switch between the 3 different mouse zones
- * Multi Function : this key performs a different function depending on the game
- : Full Throttle -> win an action sequence (cheat)
- : Fate of Atlantis -> sucker punch (cheat)
- : Bargon -> F1 (start the game)
- : All AGI games -> bring up the predictive input dialog
- * Bind keys : map a key action to a device button
- * Keyboard : hide or display the virtual keyboard
- * Rotate : rotate the screen (also rotates dpad keys)
- * Quit : quit ScummVM (without saving, be careful when using it)
-
-The "Zone" key is a *very* valuable addition allowing you to jump quickly
-between three screen zones : the game zone, the verbs zone and the inventory
-zone. When you switch to a zone the cursor will be reset to its former location
-in this zone.
-
-The default key map for these actions is:
-
- * Up, Down, Left, Right : (dpad) arrow keys
- * Left Click : softkey A
- * Right Click : softkey B
- * Save : call/talk
- * Skip : back
- * Zone : 9
- * Multi Function : 8
- * Bind keys : end call
- * Keyboard : (dpad) enter
- * Rotate : 5
- * Quit : 0
-
-You can change the key mapping at any time by bringing up the key mapping menu
-(Bind keys action).
-
-How do I tweak the configuration of ScummVM ?
----------------------------------------------
-
-See the section regarding the configuration file (scummvm.ini) in ScummVM
-README file - the same keywords apply.
-
-Some parameters are specific to this port :
-
-Game specific sections (f.e. [monkey2]) - performance options
-
- * high_sample_rate bool Desktop quality (22 kHz) sound output if set.
- 11 kHz otherwise. The default is 11 kHz.
- If you have a fast device, you can set this to
- true to enjoy better sound effects and music.
- * FM_high_quality bool Desktop quality FM synthesis if set. Lower
- quality otherwise. The default is low quality.
- You can change this if you have a fast device.
- * sound_thread_priority int Set the priority of the sound thread (0, 1, 2).
- Depending on the release, this is set to 1
- internally (above normal). If you get sound
- stuttering try setting this to a higher value.
- Set to 0 if your device is fast enough or if
- you prefer better audio/video synchronization.
- * Smush_force_redraw int Force a Smush frame redraw every X missed
- frames. Mainly used for Full Throttle action
- sequences. Setting it lower gives more
- priority to screen redraws. Setting it higher
- gives more priority to stylus/keyboard input.
- The default is 30.
-
-Game specific sections (f.e. [monkey2]) - game options
-
- * landscape int 0: Portrait, 1: Landscape, 2: Inverse Landscape
- You can also use this in the [scummvm] section
- in QVGA Pocket PCs to display the launcher in
- landscape, for example, at startup.
-
-[scummvm] section - keys definition
-
-You usually do not wish to modify these values directly, as they are set
-by the option dialog, and are only given here for reference.
-
- * action_mapping_version int Mapping version linked to ScummVM version.
- * action_mapping string Hex codes describing the key associated to
- each different action.
- * debuglevel int Debug Level 1 is used by the WinCE port
- for reporting diagnostic output in the
- scummvm_stdout.txt and scummvm.stderr.txt
- files in the current working directory.
-
-[scummvm] section - mouse emulation tuning
-
-You can tweak these parameters to customize how the cursor is handled.
-
- * repeatTrigger int Number of milliseconds a key must be held to
- consider being repeated.
- * repeatX int Number of key repeat events before changing
- horizontal cursor behaviour.
- * stepX1 int Horizontal cursor offset value when the key is
- not repeated.
- * stepX2 int Horizontal cursor offset value when the key is
- repeated less than repeatX.
- * stepX3 int Horizontal cursor offset value when the key is
- repeated more than repeatX.
- * repeatY int Number of key repeat events before changing
- vertical cursor behaviour.
- * stepY1 int Vertical cursor offset value when the key is
- not repeated.
- * stepY2 int Horizontal cursor offset value when the key is
- repeated less than repeatY.
- * stepY3 int Vertical cursor offset value when the key is
- repeated more than repeatY.
-
-------------------------------------------------------------------------
-Game specific questions
-------------------------------------------------------------------------
-
----------------
--- All Games --
----------------
-
-I need to press a special key
------------------------------
-
-Bring up the virtual keyboard. On Smartphones take a look at the Keyboard action above.
-On Pocket PCs it's easier to double-tap at the top of the screen.
-
-The panel is obscuring the playfield area
------------------------------------------
-
-Double tap at the top of the screen to hide it. As an aside, the aspect ratio
-correction scaler will kick in if the game/device combo is appropriate.
-
-How do I name my save games ?
------------------------------
-
-Use the virtual keyboard (Keyboard action).
-
-ScummVM is stuck for some reason
---------------------------------
-
-Bind and use the quit action to quit.
-
-I cannot rotate the screen to landscape/inverse landscape
----------------------------------------------------------
-
-Depending on the video driver, ScummVM may opt to not provide such functionality.
-In general, when ScummVM starts in normal "portrait" orientation, the device driver
-reports better display characteristics and you should consider launching from portrait.
-
-I'm having problems. Is there diagnostic output available ?
------------------------------------------------------------
-
-Insert a line in the [scummvm] section of scummvm.ini with the following:
-debuglevel=1
-Run ScummVM. When it closes scummvm_stdout.txt and scummvm_stderr.txt files will be
-available at the program directory (see section above).
-
-ScummVM crashes and returns to desktop
---------------------------------------
-
-File a bug report including diagnostic output (see previous question).
-
---------------------------
--- Beneath a Steel Sky --
---------------------------
-
-Introduction movie is too slow or never ends ...
--------------------------------------------------
-
-Skip it :)
-
-How can I open the inventory in Beneath a Steel Sky ?
----------------------------------------------------
-
-Tap the top of the screen. Check your stylus calibration if you still cannot
-open it.
-
-How can I use an item in Beneath a Steel Sky ?
-----------------------------------------------
-
-You need to map the right click button (see the General Questions section).
-
-----------------------------
--- Curse of Monkey Island --
-----------------------------
-
-How can I open the inventory in Curse of Monkey Island ?
-------------------------------------------------------
-
-You need to map the right click button (see the General Questions section).
-
-I'm experiencing random crashes ...
-------------------------------------
-
-This game has high memory requirements, and may crash sometimes on low
-memory devices. Continue your game with the latest automatically saved
-game and everything should be fine.
-You can consider removing the music and voice files (VOXDISK.BUN, MUSDISK.BUN)
-to lower these requirements.
-
-Sound synchronization is lost in Curse of Monkey Island videos
---------------------------------------------------------------
-
-Use a faster device :-(
-
---------------------
--- Full Throttle --
---------------------
-
-I'm experiencing random crashes ...
-------------------------------------
-
-This game has high memory requirements, and may crash sometimes on low
-memory devices. Continue your game with the latest automatically saved
-game and everything should be fine.
-You can consider removing the voice file (MONSTER.SOU) and disable the
-music to lower these requirements.
-
-----------------------------------------
--- Indiana Jones and the Last Crusade --
-----------------------------------------
-
-How can I fight in Indiana Jones and the Last Crusade ?
------------------------------------------------------
-
-You need to map the keyboard button (see the General Questions section).
-
----------------
--- Sam & Max --
----------------
-
-How can I change the current action ?
--------------------------------------
-
-You need to map the right click button (see the General Questions section).
-
-How can I exit a mini game ?
-----------------------------
-
-Use the skip toolbar icon (see the General Questions section).
-
--------------------
--- Simon 1 and 2 --
--------------------
-
-How can I save or quit in Simon ?
---------------------------------
-
-"Use" (use the use verb :p) the postcard. The ScummVM option dialog is disabled
-in Simon games.
-
-On Smartphone, you'll need to push the Action button (center of the pad) to
-quit the game.
-
--------------
--- The Dig --
--------------
-
-I'm experiencing random crashes ...
-------------------------------------
-
-This game has high memory requirements, and may crash sometimes on low
-memory devices. Continue your game with the latest automatically saved
-game and everything should be fine.
-You can consider removing the music and voice files (VOXDISK.BUN, MUSDISK.BUN)
-to lower these requirements.
-
---------------------
--- Zak Mc Kracken --
---------------------
-
-How can I scroll through my inventory items in Zak Mc Kracken ?
----------------------------------------------------------------
-
-You need to map the hide toolbar button (see the General Questions section) or
-double tap at the top of the screen (from 0.8.0+)
-
-------------------------
--- Broken Sword 1 & 2 --
-------------------------
-
-I've installed the movies pack but they are not playing/they are slow
----------------------------------------------------------------------
-
-MPEG 2 playback takes too much memory in the current release, and may prevent
-movies from playing in VGA mode. Consider changing to the DXA cutscene pack
-which is many times faster.
-
----------------
--- Gobliiins --
----------------
-
-How do I enter a code ?
------------------------
-
-Use the virtual keyboard.
-
--------------------
--- Bargon Attack --
--------------------
-
-How do I start the game (F1 : Game, F2 : Demo)
-----------------------------------------------
-
-Use the Multi Function action.
-
-----------------------
--- AGI engine games --
-----------------------
-
-Do you expect me to play these games on keyboard less devices ?
----------------------------------------------------------------
-
-Sure we do :-)
-If you want to get some mileage on your stylus you can use the virtual keyboard.
-There is a very useful alternative though, the AGI engine's predictive input dialog.
-It requires a dictionary to be present. Just tap on the command line or use the
-Multi Function action to bring it up. On Smartphones, when the dialog is shown
-all key mapping is disabled temporarily (including mouse emulation). Input is
-performed either by pressing the phone's numeric keypad keys and dpad enter to
-close the dialog, or by navigating the buttons using the dpad arrows and pressing
-with dpad enter. Check the main Readme file for more information on this.
-
-------------------------------------------------------------------------
-Support
-------------------------------------------------------------------------
-
-Help, I've read everything and ...
------------------------------------
-
-Luckily, as there is a huge variety of Windows CE devices, a specific forum
-is dedicated to this ScummVM port. You can ask your question on the WinCE
-ScummVM forum available at http://forums.scummvm.org/viewforum.php?f=6
-
-Some older questions and very nice tutorials are still available on the historic
-PocketMatrix forum at http://www.pocketmatrix.com/forums/viewforum.php?f=20
-where the community is always glad to help and have dealt with all the bugs for
-many years now :)
-
-I think I found a bug, ScummVM crashes in ...
----------------------------------------------
-
-See the "Reporting Bugs" section in ScummVM readme.
-
-If you have a Pocket PC or Handheld PC, be sure to include its resolution (obtained
-on the second dialog displayed on the "About" menu) in your bug report.
-
-If you cannot reproduce this bug on another ScummVM version, you can cross
-post your bug report on ScummVM forums.
-
-I want to compile my own ScummVM for Windows CE
------------------------------------------------
-
-Take a look at:
-http://wiki.scummvm.org/index.php/Compiling_ScummVM/Windows_CE
-
-
-------------------------------------------------------------------------
-Good Luck and Happy Adventuring!
-The ScummVM team.
-http://www.scummvm.org/
-------------------------------------------------------------------------
diff --git a/backends/plugins/dc/dc-provider.cpp b/backends/plugins/dc/dc-provider.cpp
index 166852655b..db0242f7d8 100644
--- a/backends/plugins/dc/dc-provider.cpp
+++ b/backends/plugins/dc/dc-provider.cpp
@@ -114,14 +114,14 @@ PluginList DCPluginProvider::getPlugins() {
// Scan for all plugins in this directory
FilesystemNode dir(PLUGIN_DIRECTORY);
FSList files;
- if (!dir.listDir(files, FilesystemNode::kListFilesOnly)) {
+ if (!dir.getChildren(files, FilesystemNode::kListFilesOnly)) {
error("Couldn't open plugin directory '%s'", PLUGIN_DIRECTORY);
}
for (FSList::const_iterator i = files.begin(); i != files.end(); ++i) {
- Common::String name(i->name());
+ Common::String name(i->getName());
if (name.hasPrefix(PLUGIN_PREFIX) && name.hasSuffix(PLUGIN_SUFFIX)) {
- pl.push_back(new DCPlugin(i->path()));
+ pl.push_back(new DCPlugin(i->getPath()));
}
}
diff --git a/backends/plugins/posix/posix-provider.cpp b/backends/plugins/posix/posix-provider.cpp
index ce319840a4..03ee1c204f 100644
--- a/backends/plugins/posix/posix-provider.cpp
+++ b/backends/plugins/posix/posix-provider.cpp
@@ -107,14 +107,14 @@ PluginList POSIXPluginProvider::getPlugins() {
// Scan for all plugins in this directory
FilesystemNode dir(PLUGIN_DIRECTORY);
FSList files;
- if (!dir.listDir(files, FilesystemNode::kListFilesOnly)) {
+ if (!dir.getChildren(files, FilesystemNode::kListFilesOnly)) {
error("Couldn't open plugin directory '%s'", PLUGIN_DIRECTORY);
}
for (FSList::const_iterator i = files.begin(); i != files.end(); ++i) {
- Common::String name(i->name());
+ Common::String name(i->getName());
if (name.hasPrefix(PLUGIN_PREFIX) && name.hasSuffix(PLUGIN_SUFFIX)) {
- pl.push_back(new POSIXPlugin(i->path()));
+ pl.push_back(new POSIXPlugin(i->getPath()));
}
}
diff --git a/backends/plugins/sdl/sdl-provider.cpp b/backends/plugins/sdl/sdl-provider.cpp
index 0f67c9a691..cb09af20ca 100644
--- a/backends/plugins/sdl/sdl-provider.cpp
+++ b/backends/plugins/sdl/sdl-provider.cpp
@@ -107,14 +107,14 @@ PluginList SDLPluginProvider::getPlugins() {
// Scan for all plugins in this directory
FilesystemNode dir(PLUGIN_DIRECTORY);
FSList files;
- if (!dir.listDir(files, FilesystemNode::kListFilesOnly)) {
+ if (!dir.getChildren(files, FilesystemNode::kListFilesOnly)) {
error("Couldn't open plugin directory '%s'", PLUGIN_DIRECTORY);
}
for (FSList::const_iterator i = files.begin(); i != files.end(); ++i) {
- Common::String name(i->name());
+ Common::String name(i->getName());
if (name.hasPrefix(PLUGIN_PREFIX) && name.hasSuffix(PLUGIN_SUFFIX)) {
- pl.push_back(new SDLPlugin(i->path()));
+ pl.push_back(new SDLPlugin(i->getPath()));
}
}
diff --git a/backends/plugins/win32/win32-provider.cpp b/backends/plugins/win32/win32-provider.cpp
index eeea3b805c..b340c23709 100644
--- a/backends/plugins/win32/win32-provider.cpp
+++ b/backends/plugins/win32/win32-provider.cpp
@@ -110,14 +110,14 @@ PluginList Win32PluginProvider::getPlugins() {
// Scan for all plugins in this directory
FilesystemNode dir(PLUGIN_DIRECTORY);
FSList files;
- if (!dir.listDir(files, FilesystemNode::kListFilesOnly)) {
+ if (!dir.getChildren(files, FilesystemNode::kListFilesOnly)) {
error("Couldn't open plugin directory '%s'", PLUGIN_DIRECTORY);
}
for (FSList::const_iterator i = files.begin(); i != files.end(); ++i) {
- Common::String name(i->name());
+ Common::String name(i->getName());
if (name.hasPrefix(PLUGIN_PREFIX) && name.hasSuffix(PLUGIN_SUFFIX)) {
- pl.push_back(new Win32Plugin(i->path()));
+ pl.push_back(new Win32Plugin(i->getPath()));
}
}
diff --git a/base/commandLine.cpp b/base/commandLine.cpp
index 985ef8b3cb..20249e758b 100644
--- a/base/commandLine.cpp
+++ b/base/commandLine.cpp
@@ -32,6 +32,7 @@
#include "common/config-manager.h"
#include "common/system.h"
+#include "common/fs.h"
#include "sound/mididrv.h"
#include "sound/mixer.h"
@@ -48,10 +49,6 @@
#define DETECTOR_TESTING_HACK
-#ifdef DETECTOR_TESTING_HACK
-#include "common/fs.h"
-#endif
-
namespace Base {
static const char USAGE_STRING[] =
@@ -313,7 +310,7 @@ Common::String parseCommandLine(Common::StringMap &settings, int argc, char **ar
for (int i = 1; i < argc; ++i) {
s = argv[i];
s2 = (i < argc-1) ? argv[i+1] : 0;
-
+
if (s[0] != '-') {
// The argument doesn't start with a dash, so it's not an option.
// Hence it must be the target name. We currently enforce that
@@ -390,7 +387,12 @@ Common::String parseCommandLine(Common::StringMap &settings, int argc, char **ar
END_OPTION
DO_OPTION('p', "path")
- // TODO: Verify whether the path is valid
+ FilesystemNode path(option);
+ if(!path.exists()) {
+ usage("Non-existent game path '%s'", option);
+ } else if(!path.isReadable()) {
+ usage("Non-readable game path '%s'", option);
+ }
END_OPTION
DO_OPTION('q', "language")
@@ -428,7 +430,12 @@ Common::String parseCommandLine(Common::StringMap &settings, int argc, char **ar
END_OPTION
DO_LONG_OPTION("soundfont")
- // TODO: Verify whether the path is valid
+ FilesystemNode path(option);
+ if(!path.exists()) {
+ usage("Non-existent soundfont path '%s'", option);
+ } else if(!path.isReadable()) {
+ usage("Non-readable soundfont path '%s'", option);
+ }
END_OPTION
DO_LONG_OPTION_BOOL("disable-sdl-parachute")
@@ -453,7 +460,12 @@ Common::String parseCommandLine(Common::StringMap &settings, int argc, char **ar
END_OPTION
DO_LONG_OPTION("savepath")
- // TODO: Verify whether the path is valid
+ FilesystemNode path(option);
+ if(!path.exists()) {
+ usage("Non-existent savegames path '%s'", option);
+ } else if(!path.isWritable()) {
+ usage("Non-writable savegames path '%s'", option);
+ }
END_OPTION
DO_LONG_OPTION_INT("talkspeed")
@@ -466,7 +478,12 @@ Common::String parseCommandLine(Common::StringMap &settings, int argc, char **ar
END_OPTION
DO_LONG_OPTION("themepath")
- // TODO: Verify whether the path is valid
+ FilesystemNode path(option);
+ if(!path.exists()) {
+ usage("Non-existent theme path '%s'", option);
+ } else if(!path.isReadable()) {
+ usage("Non-readable theme path '%s'", option);
+ }
END_OPTION
DO_LONG_OPTION("target-md5")
@@ -562,7 +579,7 @@ static void runDetectorTest() {
FilesystemNode dir(path);
FSList files;
- if (!dir.listDir(files, FilesystemNode::kListAll)) {
+ if (!dir.getChildren(files, FilesystemNode::kListAll)) {
printf(" ... invalid path, skipping\n");
continue;
}
@@ -673,13 +690,18 @@ bool processSettings(Common::String &command, Common::StringMap &settings) {
if (!settings.contains("savepath")) {
const char *dir = getenv("SCUMMVM_SAVEPATH");
if (dir && *dir && strlen(dir) < MAXPATHLEN) {
- // TODO: Verify whether the path is valid
- settings["savepath"] = dir;
+ FilesystemNode saveDir(dir);
+ if(!saveDir.exists()) {
+ warning("Non-existent SCUMMVM_SAVEPATH save path. It will be ignored.");
+ } else if(!saveDir.isWritable()) {
+ warning("Non-writable SCUMMVM_SAVEPATH save path. It will be ignored.");
+ } else {
+ settings["savepath"] = dir;
+ }
}
}
#endif
-
// Finally, store the command line settings into the config manager.
for (Common::StringMap::const_iterator x = settings.begin(); x != settings.end(); ++x) {
Common::String key(x->_key);
diff --git a/common/advancedDetector.cpp b/common/advancedDetector.cpp
index a342ed910a..f3e8671025 100644
--- a/common/advancedDetector.cpp
+++ b/common/advancedDetector.cpp
@@ -276,7 +276,7 @@ PluginError detectGameForEngineCreation(
FSList fslist;
FilesystemNode dir(ConfMan.get("path"));
- if (!dir.listDir(fslist, FilesystemNode::kListFilesOnly)) {
+ if (!dir.getChildren(fslist, FilesystemNode::kListFilesOnly)) {
return kInvalidPathError;
}
@@ -345,7 +345,7 @@ static ADGameDescList detectGame(const FSList *fslist, const Common::ADParams &p
// Get the information of the existing files
for (FSList::const_iterator file = fslist->begin(); file != fslist->end(); ++file) {
if (file->isDirectory()) continue;
- tstr = file->name();
+ tstr = file->getName();
tstr.toLowercase();
// Strip any trailing dot
@@ -364,7 +364,7 @@ static ADGameDescList detectGame(const FSList *fslist, const Common::ADParams &p
debug(3, "> %s: %s", tstr.c_str(), md5str);
- if (testFile.open(file->path())) {
+ if (testFile.open(file->getPath())) {
filesSize[tstr] = (int32)testFile.size();
testFile.close();
}
diff --git a/common/file.cpp b/common/file.cpp
index 2eba1bcb3d..238c3a4bb3 100644
--- a/common/file.cpp
+++ b/common/file.cpp
@@ -226,7 +226,7 @@ void File::addDefaultDirectoryRecursive(const FilesystemNode &dir, int level, co
return;
FSList fslist;
- if (!dir.listDir(fslist, FilesystemNode::kListAll)) {
+ if (!dir.getChildren(fslist, FilesystemNode::kListAll)) {
// Failed listing the contents of this node, so it is either not a
// directory, or just doesn't exist at all.
return;
@@ -237,7 +237,7 @@ void File::addDefaultDirectoryRecursive(const FilesystemNode &dir, int level, co
// Do not add directories multiple times, unless this time they are added
// with a bigger depth.
- const String &directory(dir.path());
+ const String &directory(dir.getPath());
if (_defaultDirectories->contains(directory) && (*_defaultDirectories)[directory] >= level)
return;
(*_defaultDirectories)[directory] = level;
@@ -247,13 +247,13 @@ void File::addDefaultDirectoryRecursive(const FilesystemNode &dir, int level, co
for (FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) {
if (file->isDirectory()) {
- addDefaultDirectoryRecursive(file->path(), level - 1, prefix + file->name() + "/");
+ addDefaultDirectoryRecursive(file->getPath(), level - 1, prefix + file->getName() + "/");
} else {
String lfn(prefix);
- lfn += file->name();
+ lfn += file->getName();
lfn.toLowercase();
if (!_filesMap->contains(lfn)) {
- (*_filesMap)[lfn] = file->path();
+ (*_filesMap)[lfn] = file->getPath();
}
}
}
@@ -364,15 +364,21 @@ bool File::open(const String &filename, AccessMode mode) {
bool File::open(const FilesystemNode &node, AccessMode mode) {
assert(mode == kFileReadMode || mode == kFileWriteMode);
- if (!node.isValid()) {
- warning("File::open: Trying to open an invalid FilesystemNode object");
+ if (!node.exists()) {
+ warning("File::open: Trying to open a FilesystemNode which does not exist");
return false;
} else if (node.isDirectory()) {
warning("File::open: Trying to open a FilesystemNode which is a directory");
return false;
- }
+ } /*else if (!node.isReadable() && mode == kFileReadMode) {
+ warning("File::open: Trying to open an unreadable FilesystemNode object for reading");
+ return false;
+ } else if (!node.isWritable() && mode == kFileWriteMode) {
+ warning("File::open: Trying to open an unwritable FilesystemNode object for writing");
+ return false;
+ }*/
- String filename(node.name());
+ String filename(node.getName());
if (_handle) {
error("File::open: This file object already is opened (%s), won't open '%s'", _name.c_str(), filename.c_str());
@@ -383,7 +389,7 @@ bool File::open(const FilesystemNode &node, AccessMode mode) {
const char *modeStr = (mode == kFileReadMode) ? "rb" : "wb";
- _handle = fopen(node.path().c_str(), modeStr);
+ _handle = fopen(node.getPath().c_str(), modeStr);
if (_handle == NULL) {
if (mode == kFileReadMode)
@@ -409,7 +415,7 @@ bool File::exists(const String &filename) {
// FIXME: can't use isValid() here since at the time of writing
// FilesystemNode is to be unable to find for example files
// added in extrapath
- if (file.isDirectory())
+ if (file.isDirectory() || !file.exists())
return false;
// Next, try to locate the file by *opening* it in read mode. This has
diff --git a/common/fs.cpp b/common/fs.cpp
index c33fc42223..28f3e11f0b 100644
--- a/common/fs.cpp
+++ b/common/fs.cpp
@@ -23,14 +23,45 @@
*/
#include "common/stdafx.h"
-
-#include "backends/fs/abstract-fs.h"
#include "common/util.h"
+#include "backends/fs/abstract-fs.h"
+#include "backends/fs/fs-factory-maker.cpp"
-
-FilesystemNode::FilesystemNode(AbstractFilesystemNode *realNode) {
- _realNode = realNode;
- _refCount = new int(1);
+/*
+ * Simple DOS-style pattern matching function (understands * and ? like used in DOS).
+ * Taken from exult/files/listfiles.cc
+ */
+static bool matchString(const char *str, const char *pat) {
+ const char *p = 0;
+ const char *q = 0;
+
+ for (;;) {
+ switch (*pat) {
+ case '*':
+ p = ++pat;
+ q = str;
+ break;
+
+ default:
+ if (*pat != *str) {
+ if (p) {
+ pat = p;
+ str = ++q;
+ if(!*str)
+ return !*pat;
+ break;
+ }
+ else
+ return false;
+ }
+ // fallthrough
+ case '?':
+ if(!*str)
+ return !*pat;
+ pat++;
+ str++;
+ }
+ }
}
FilesystemNode::FilesystemNode() {
@@ -38,6 +69,11 @@ FilesystemNode::FilesystemNode() {
_refCount = 0;
}
+FilesystemNode::FilesystemNode(AbstractFilesystemNode *realNode) {
+ _realNode = realNode;
+ _refCount = new int(1);
+}
+
FilesystemNode::FilesystemNode(const FilesystemNode &node) {
_realNode = node._realNode;
_refCount = node._refCount;
@@ -46,10 +82,12 @@ FilesystemNode::FilesystemNode(const FilesystemNode &node) {
}
FilesystemNode::FilesystemNode(const Common::String &p) {
+ AbstractFilesystemFactory *factory = FilesystemFactoryMaker::makeFactory();
+
if (p.empty() || p == ".")
- _realNode = AbstractFilesystemNode::getCurrentDirectory();
+ _realNode = factory->makeCurrentDirectoryFileNode();
else
- _realNode = AbstractFilesystemNode::getNodeForPath(p);
+ _realNode = factory->makeFileNodePath(p);
_refCount = new int(1);
}
@@ -57,18 +95,7 @@ FilesystemNode::~FilesystemNode() {
decRefCount();
}
-void FilesystemNode::decRefCount() {
- if (_refCount) {
- assert(*_refCount > 0);
- --(*_refCount);
- if (*_refCount == 0) {
- delete _refCount;
- delete _realNode;
- }
- }
-}
-
-FilesystemNode &FilesystemNode::operator =(const FilesystemNode &node) {
+FilesystemNode &FilesystemNode::operator= (const FilesystemNode &node) {
if (node._refCount)
++(*node._refCount);
@@ -80,40 +107,48 @@ FilesystemNode &FilesystemNode::operator =(const FilesystemNode &node) {
return *this;
}
-bool FilesystemNode::isValid() const {
- if (_realNode == 0)
+bool FilesystemNode::operator< (const FilesystemNode& node) const
+{
+ if (isDirectory() && !node.isDirectory())
+ return true;
+ if (!isDirectory() && node.isDirectory())
return false;
- return _realNode->isValid();
+ return scumm_stricmp(getDisplayName().c_str(), node.getDisplayName().c_str()) < 0;
}
-FilesystemNode FilesystemNode::getParent() const {
- if (_realNode == 0)
- return *this;
-
- AbstractFilesystemNode *node = _realNode->parent();
- if (node == 0) {
- return *this;
- } else {
- return FilesystemNode(node);
+void FilesystemNode::decRefCount() {
+ if (_refCount) {
+ assert(*_refCount > 0);
+ --(*_refCount);
+ if (*_refCount == 0) {
+ delete _refCount;
+ delete _realNode;
+ }
}
}
+bool FilesystemNode::exists() const {
+ if (_realNode == 0)
+ return false;
+ return _realNode->exists();
+}
+
FilesystemNode FilesystemNode::getChild(const Common::String &n) const {
if (_realNode == 0)
return *this;
assert(_realNode->isDirectory());
- AbstractFilesystemNode *node = _realNode->child(n);
+ AbstractFilesystemNode *node = _realNode->getChild(n);
return FilesystemNode(node);
}
-bool FilesystemNode::listDir(FSList &fslist, ListMode mode) const {
+bool FilesystemNode::getChildren(FSList &fslist, ListMode mode, bool hidden) const {
if (!_realNode || !_realNode->isDirectory())
return false;
AbstractFSList tmp;
- if (!_realNode->listDir(tmp, mode))
+ if (!_realNode->getChildren(tmp, mode, hidden))
return false;
fslist.clear();
@@ -124,33 +159,92 @@ bool FilesystemNode::listDir(FSList &fslist, ListMode mode) const {
return true;
}
+Common::String FilesystemNode::getDisplayName() const {
+ assert(_realNode);
+ return _realNode->getDisplayName();
+}
+
+Common::String FilesystemNode::getName() const {
+ assert(_realNode);
+ return _realNode->getName();
+}
+
+FilesystemNode FilesystemNode::getParent() const {
+ if (_realNode == 0)
+ return *this;
+
+ AbstractFilesystemNode *node = _realNode->getParent();
+ if (node == 0) {
+ return *this;
+ } else {
+ return FilesystemNode(node);
+ }
+}
+
+Common::String FilesystemNode::getPath() const {
+ assert(_realNode);
+ return _realNode->getPath();
+}
+
bool FilesystemNode::isDirectory() const {
if (_realNode == 0)
return false;
return _realNode->isDirectory();
}
-Common::String FilesystemNode::displayName() const {
- assert(_realNode);
- return _realNode->displayName();
+bool FilesystemNode::isReadable() const {
+ if (_realNode == 0)
+ return false;
+ return _realNode->isReadable();
}
-Common::String FilesystemNode::name() const {
- assert(_realNode);
- return _realNode->name();
+bool FilesystemNode::isWritable() const {
+ if (_realNode == 0)
+ return false;
+ return _realNode->isWritable();
}
-Common::String FilesystemNode::path() const {
- assert(_realNode);
- return _realNode->path();
+bool FilesystemNode::lookupFile(FSList &results, FSList &fslist, Common::String &filename, bool hidden, bool exhaustive) const
+{
+ for(FSList::iterator entry = fslist.begin(); entry != fslist.end(); ++entry)
+ {
+ if(entry->isDirectory()) {
+ lookupFileRec(results, *entry, filename, hidden, exhaustive);
+ }
+ }
+
+ //TODO: we would return true even if no matches were found, if the initial results list isn't empty
+ return ((results.size() > 0) ? true : false);
}
+bool FilesystemNode::lookupFile(FSList &results, FilesystemNode &dir, Common::String &filename, bool hidden, bool exhaustive) const
+{
+ lookupFileRec(results, dir, filename, hidden, exhaustive);
+
+ //TODO: we would return true even if no matches were found, if the initial results list isn't empty
+ return ((results.size() > 0) ? true : false);
+}
-bool FilesystemNode::operator< (const FilesystemNode& node) const
+void FilesystemNode::lookupFileRec(FSList &results, FilesystemNode &dir, Common::String &filename, bool hidden, bool exhaustive) const
{
- if (isDirectory() && !node.isDirectory())
- return true;
- if (!isDirectory() && node.isDirectory())
- return false;
- return scumm_stricmp(displayName().c_str(), node.displayName().c_str()) < 0;
+ FSList entries;
+ dir.getChildren(entries, FilesystemNode::kListAll, hidden);
+
+ for(FSList::iterator entry = entries.begin(); entry != entries.end(); ++entry)
+ {
+ if(entry->isDirectory()) {
+ lookupFileRec(results, *entry, filename, hidden, exhaustive);
+ } else {
+ //TODO: here we assume all backends implement the lastPathComponent method. It is currently static,
+ // so it might be a good idea to include it inside the backend class. This would enforce its
+ // implementation by all ports.
+ if(matchString(lastPathComponent(entry->getPath()), filename.c_str())) {
+ results.push_back(*entry);
+
+ if(!exhaustive) {
+ break;
+ }
+ }
+ }
+ }
}
diff --git a/common/fs.h b/common/fs.h
index 4c275b5b2a..6a2f049be1 100644
--- a/common/fs.h
+++ b/common/fs.h
@@ -33,7 +33,6 @@
class FilesystemNode;
class AbstractFilesystemNode;
-
/**
* List of multiple file system nodes. E.g. the contents of a given directory.
* This is subclass instead of just a typedef so that we can use forward
@@ -41,9 +40,8 @@ class AbstractFilesystemNode;
*/
class FSList : public Common::Array<FilesystemNode> {};
-
/**
- * FilesystemNode provides an abstraction for file pathes, allowing for portable
+ * FilesystemNode provides an abstraction for file paths, allowing for portable
* file system browsing. To this ends, multiple or single roots have to be supported
* (compare Unix with a single root, Windows with multiple roots C:, D:, ...).
*
@@ -67,9 +65,8 @@ class FSList : public Common::Array<FilesystemNode> {};
*/
class FilesystemNode {
private:
- AbstractFilesystemNode *_realNode;
int *_refCount;
-
+ AbstractFilesystemNode *_realNode;
FilesystemNode(AbstractFilesystemNode *realNode);
public:
@@ -113,51 +110,42 @@ public:
/**
* Copy operator.
*/
- FilesystemNode &operator =(const FilesystemNode &node);
-
+ FilesystemNode &operator= (const FilesystemNode &node);
+
/**
- * Checks if the FilesystemNode is valid for any usage
+ * Compare the name of this node to the name of another. Directories
+ * go before normal files.
*/
- bool isValid() const;
+ bool operator< (const FilesystemNode& node) const;
- /**
- * Get the parent node of this node. If this node has no parent node,
- * then it returns a duplicate of this node.
+ /*
+ * Indicates whether the object refered by this path exists in the filesystem or not.
*/
- FilesystemNode getParent() const;
+ virtual bool exists() const;
/**
* Fetch a child node of this node, with the given name. Only valid for
- * directory nodes (an assertion is triggered otherwise). If no no child
- * node with the given name exists, an invalid node is returned.
+ * directory nodes (an assertion is triggered otherwise).
+ * If no child node with the given name exists, an invalid node is returned.
*/
FilesystemNode getChild(const Common::String &name) const;
-
+
/**
* Return a list of child nodes of this directory node. If called on a node
* that does not represent a directory, false is returned.
+ *
* @return true if succesful, false otherwise (e.g. when the directory does not exist).
- * @todo Rename this to listChildren or getChildren.
- */
- virtual bool listDir(FSList &fslist, ListMode mode = kListDirectoriesOnly) const;
-
- /**
- * Is this node pointing to a directory?
- * @todo Currently we assume that a valid node that is not a directory
- * automatically is a file (ignoring things like symlinks). That might
- * actually be OK... but we could still add an isFile method. Or even replace
- * isValid and isDirectory by a getType() method that can return values like
- * kDirNodeType, kFileNodeType, kInvalidNodeType.
*/
- virtual bool isDirectory() const;
+ virtual bool getChildren(FSList &fslist, ListMode mode = kListDirectoriesOnly, bool hidden = false) const;
/**
* Return a human readable string for this node, usable for display (e.g.
* in the GUI code). Do *not* rely on it being usable for anything else,
* like constructing paths!
+ *
* @return the display name
*/
- virtual Common::String displayName() const;
+ virtual Common::String getDisplayName() const;
/**
* Return a string representation of the name of the file. This is can be
@@ -167,7 +155,7 @@ public:
*
* @return the file name
*/
- virtual Common::String name() const;
+ virtual Common::String getName() const;
/**
* Return a string representation of the file which can be passed to fopen(),
@@ -180,18 +168,80 @@ public:
*
* @return the 'path' represented by this filesystem node
*/
- virtual Common::String path() const;
+ virtual Common::String getPath() const;
+
+ /**
+ * Get the parent node of this node. If this node has no parent node,
+ * then it returns a duplicate of this node.
+ */
+ FilesystemNode getParent() const;
/**
- * Compare the name of this node to the name of another. Directories
- * go before normal files.
+ * Indicates whether this path refers to a directory or not.
+ *
+ * @todo Currently we assume that a valid node that is not a directory
+ * automatically is a file (ignoring things like symlinks). That might
+ * actually be OK... but we could still add an isFile method. Or even replace
+ * isValid and isDirectory by a getType() method that can return values like
+ * kDirNodeType, kFileNodeType, kInvalidNodeType.
*/
- bool operator< (const FilesystemNode& node) const;
+ virtual bool isDirectory() const;
+
+ /**
+ * Indicates whether this path can be read from or not.
+ */
+ virtual bool isReadable() const;
+
+ /**
+ * Indicates whether this path can be written to or not.
+ */
+ virtual bool isWritable() const;
+
+ /**
+ * Searches recursively for a filename inside the given directories.
+ *
+ * @param results List to put the matches in.
+ * @param fslist List of directories to search within.
+ * @param filename Name of the file to look for.
+ * @param hidden Whether to search hidden files or not. Default: false
+ * @param exhaustive Whether to continue searching after one match has been found. Default: false
+ *
+ * @return true if matches could be found, false otherwise.
+ */
+ virtual bool lookupFile(FSList &results, FSList &fslist, Common::String &filename, bool hidden, bool exhaustive) const;
+
+ /**
+ * Searches recursively for a filename inside the given directory.
+ *
+ * @param results List to put the matches in.
+ * @param FilesystemNode Directory to search within.
+ * @param filename Name of the file to look for.
+ * @param hidden Whether to search hidden files or not. Default: false
+ * @param exhaustive Whether to continue searching after one match has been found. Default: false
+ *
+ * @return true if matches could be found, false otherwise.
+ */
+ virtual bool lookupFile(FSList &results, FilesystemNode &dir, Common::String &filename, bool hidden, bool exhaustive) const;
protected:
+ /**
+ * Decreases the reference count to the FilesystemNode, and if necessary,
+ * deletes the corresponding underlying references.
+ */
void decRefCount();
+
+ /**
+ * Searches recursively for a filename inside the given directory.
+ *
+ * @param results List to put the matches in.
+ * @param FilesystemNode Directory to search within.
+ * @param filename Name of the file to look for.
+ * @param hidden Whether to search hidden files or not.
+ * @param exhaustive Whether to continue searching after one match has been found.
+ */
+ void lookupFileRec(FSList &results, FilesystemNode &dir, Common::String &filename, bool hidden, bool exhaustive) const;
};
//} // End of namespace Common
-#endif
+#endif //COMMON_FS_H
diff --git a/common/iff_container.h b/common/iff_container.h
index cc55970591..0d07b5bd57 100644
--- a/common/iff_container.h
+++ b/common/iff_container.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/common/iff_container.h $
+ * $Id:iff_container.h 26949 2007-05-26 20:23:24Z david_corrales $
*/
#ifndef COMMON_IFF_CONTAINER_H
diff --git a/common/keyboard.h b/common/keyboard.h
deleted file mode 100644
index d0d0e43f00..0000000000
--- a/common/keyboard.h
+++ /dev/null
@@ -1,266 +0,0 @@
-/* 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.
- *
- * $URL$
- * $Id$
- *
- */
-
-#ifndef COMMON_KEYBOARD_H
-#define COMMON_KEYBOARD_H
-
-#include "common/scummsys.h"
-
-namespace Common {
-
-enum KeyCode {
- KEYCODE_INVALID = 0,
-
- KEYCODE_BACKSPACE = 8,
- KEYCODE_TAB = 9,
- KEYCODE_CLEAR = 12,
- KEYCODE_RETURN = 13,
- KEYCODE_PAUSE = 19,
- KEYCODE_ESCAPE = 27,
- KEYCODE_SPACE = 32,
- KEYCODE_EXCLAIM = 33,
- KEYCODE_QUOTEDBL = 34,
- KEYCODE_HASH = 35,
- KEYCODE_DOLLAR = 36,
- KEYCODE_AMPERSAND = 38,
- KEYCODE_QUOTE = 39,
- KEYCODE_LEFTPAREN = 40,
- KEYCODE_RIGHTPAREN = 41,
- KEYCODE_ASTERISK = 42,
- KEYCODE_PLUS = 43,
- KEYCODE_COMMA = 44,
- KEYCODE_MINUS = 45,
- KEYCODE_PERIOD = 46,
- KEYCODE_SLASH = 47,
- KEYCODE_0 = 48,
- KEYCODE_1 = 49,
- KEYCODE_2 = 50,
- KEYCODE_3 = 51,
- KEYCODE_4 = 52,
- KEYCODE_5 = 53,
- KEYCODE_6 = 54,
- KEYCODE_7 = 55,
- KEYCODE_8 = 56,
- KEYCODE_9 = 57,
- KEYCODE_COLON = 58,
- KEYCODE_SEMICOLON = 59,
- KEYCODE_LESS = 60,
- KEYCODE_EQUALS = 61,
- KEYCODE_GREATER = 62,
- KEYCODE_QUESTION = 63,
- KEYCODE_AT = 64,
-
- KEYCODE_LEFTBRACKET = 91,
- KEYCODE_BACKSLASH = 92,
- KEYCODE_RIGHTBRACKET= 93,
- KEYCODE_CARET = 94,
- KEYCODE_UNDERSCORE = 95,
- KEYCODE_BACKQUOTE = 96,
- KEYCODE_a = 97,
- KEYCODE_b = 98,
- KEYCODE_c = 99,
- KEYCODE_d = 100,
- KEYCODE_e = 101,
- KEYCODE_f = 102,
- KEYCODE_g = 103,
- KEYCODE_h = 104,
- KEYCODE_i = 105,
- KEYCODE_j = 106,
- KEYCODE_k = 107,
- KEYCODE_l = 108,
- KEYCODE_m = 109,
- KEYCODE_n = 110,
- KEYCODE_o = 111,
- KEYCODE_p = 112,
- KEYCODE_q = 113,
- KEYCODE_r = 114,
- KEYCODE_s = 115,
- KEYCODE_t = 116,
- KEYCODE_u = 117,
- KEYCODE_v = 118,
- KEYCODE_w = 119,
- KEYCODE_x = 120,
- KEYCODE_y = 121,
- KEYCODE_z = 122,
- KEYCODE_DELETE = 127,
-
- // Numeric keypad
- KEYCODE_KP0 = 256,
- KEYCODE_KP1 = 257,
- KEYCODE_KP2 = 258,
- KEYCODE_KP3 = 259,
- KEYCODE_KP4 = 260,
- KEYCODE_KP5 = 261,
- KEYCODE_KP6 = 262,
- KEYCODE_KP7 = 263,
- KEYCODE_KP8 = 264,
- KEYCODE_KP9 = 265,
- KEYCODE_KP_PERIOD = 266,
- KEYCODE_KP_DIVIDE = 267,
- KEYCODE_KP_MULTIPLY = 268,
- KEYCODE_KP_MINUS = 269,
- KEYCODE_KP_PLUS = 270,
- KEYCODE_KP_ENTER = 271,
- KEYCODE_KP_EQUALS = 272,
-
- // Arrows + Home/End pad
- KEYCODE_UP = 273,
- KEYCODE_DOWN = 274,
- KEYCODE_RIGHT = 275,
- KEYCODE_LEFT = 276,
- KEYCODE_INSERT = 277,
- KEYCODE_HOME = 278,
- KEYCODE_END = 279,
- KEYCODE_PAGEUP = 280,
- KEYCODE_PAGEDOWN = 281,
-
- // Function keys
- KEYCODE_F1 = 282,
- KEYCODE_F2 = 283,
- KEYCODE_F3 = 284,
- KEYCODE_F4 = 285,
- KEYCODE_F5 = 286,
- KEYCODE_F6 = 287,
- KEYCODE_F7 = 288,
- KEYCODE_F8 = 289,
- KEYCODE_F9 = 290,
- KEYCODE_F10 = 291,
- KEYCODE_F11 = 292,
- KEYCODE_F12 = 293,
- KEYCODE_F13 = 294,
- KEYCODE_F14 = 295,
- KEYCODE_F15 = 296,
-
- // Key state modifier keys
- KEYCODE_NUMLOCK = 300,
- KEYCODE_CAPSLOCK = 301,
- KEYCODE_SCROLLOCK = 302,
- KEYCODE_RSHIFT = 303,
- KEYCODE_LSHIFT = 304,
- KEYCODE_RCTRL = 305,
- KEYCODE_LCTRL = 306,
- KEYCODE_RALT = 307,
- KEYCODE_LALT = 308,
- KEYCODE_RMETA = 309,
- KEYCODE_LMETA = 310,
- KEYCODE_LSUPER = 311, // Left "Windows" key
- KEYCODE_RSUPER = 312, // Right "Windows" key
- KEYCODE_MODE = 313, // "Alt Gr" key
- KEYCODE_COMPOSE = 314, // Multi-key compose key
-
- // Miscellaneous function keys
- KEYCODE_HELP = 315,
- KEYCODE_PRINT = 316,
- KEYCODE_SYSREQ = 317,
- KEYCODE_BREAK = 318,
- KEYCODE_MENU = 319,
- KEYCODE_POWER = 320, // Power Macintosh power key
- KEYCODE_EURO = 321, // Some european keyboards
- KEYCODE_UNDO = 322 // Atari keyboard has Undo
-};
-
-/**
- * List of certan special and some fake 'ascii' values used in keyboard events.
- * The values for the function keys listed here are based on what certain SCUMM
- * games expect in their scripts.
- * @todo Get rid of the function key values, and instead enforce that engines use
- * the keycode value to handle these.
- */
-enum {
- ASCII_BACKSPACE = 8,
- ASCII_TAB = 9,
- ASCII_RETURN = 13,
- ASCII_ESCAPE = 27,
- ASCII_SPACE = 32,
-
- ASCII_F1 = 315,
- ASCII_F2 = 316,
- ASCII_F3 = 317,
- ASCII_F4 = 318,
- ASCII_F5 = 319,
- ASCII_F6 = 320,
- ASCII_F7 = 321,
- ASCII_F8 = 322,
- ASCII_F9 = 323,
- ASCII_F10 = 324,
- ASCII_F11 = 325,
- ASCII_F12 = 326
-};
-
-/**
- * Keyboard modifier flags, used for Event::kbd::flags.
- */
-enum {
- KBD_CTRL = 1 << 0,
- KBD_ALT = 1 << 1,
- KBD_SHIFT = 1 << 2
-};
-
-/**
- * Keyboard status, as used in the Event struct.
- */
-struct KeyState {
- /**
- * Abstract key code (will be the same for any given key regardless
- * of modifiers being held at the same time.
- * For example, this is the same for both 'A' and Shift-'A'.
- * @todo Document which values are to be used for non-ASCII keys
- * like F1-F10. For now, let's just say that our primary backend
- * is the SDL one, and it uses the values SDL uses... so until
- * we fix this, your best bet is to get a copy of SDL_keysym.h
- * and look at that, if you want to find out a key code.
- */
- KeyCode keycode;
-
- /**
- * ASCII-value of the pressed key (if any).
- * This depends on modifiers, i.e. pressing the 'A' key results in
- * different values here depending on the status of shift, alt and
- * caps lock.
- */
- uint16 ascii;
-
- /**
- * Status of the modifier keys. Bits are set in this for each
- * pressed modifier
- * @see KBD_CTRL, KBD_ALT, KBD_SHIFT
- */
- byte flags;
-
- KeyState(KeyCode kc = KEYCODE_INVALID, uint16 asc = 0, byte f = 0) {
- keycode = kc;
- ascii = asc ? asc : (uint16)kc;
- flags = f;
- }
-
- void reset() {
- keycode = KEYCODE_INVALID;
- ascii = flags = 0;
- }
-};
-
-} // End of namespace Common
-
-#endif
diff --git a/common/md5.cpp b/common/md5.cpp
index a48ecb4948..32acdc5b8c 100644
--- a/common/md5.cpp
+++ b/common/md5.cpp
@@ -246,15 +246,18 @@ void md5_finish(md5_context *ctx, uint8 digest[16]) {
}
bool md5_file(const FilesystemNode &file, uint8 digest[16], uint32 length) {
- if (!file.isValid()) {
- warning("md5_file: using an invalid FilesystemNode");
+ if(!file.exists()) {
+ warning("md5_file: using an inexistent FilesystemNode");
+ return false;
+ } else if (!file.isReadable()) {
+ warning("md5_file: using an unreadable FilesystemNode");
return false;
} else if (file.isDirectory()) {
- warning("md5_file: using a diretory FilesystemNode");
+ warning("md5_file: using a directory FilesystemNode");
return false;
}
- return md5_file(file.path().c_str(), digest, length);
+ return md5_file(file.getPath().c_str(), digest, length);
}
bool md5_file(const char *name, uint8 digest[16], uint32 length) {
diff --git a/dists/pred.dic b/dists/pred.dic
deleted file mode 100644
index 131aeff9ef..0000000000
--- a/dists/pred.dic
+++ /dev/null
@@ -1,7986 +0,0 @@
-222 cab
-2222243 cabbage
-222243 cabbie
-222253 babble
-22229 cabby
-2223 babe
-2223537283 accelerate
-22237 babes
-222377 access
-222378 accept
-22243368 accident
-2224336825 accidental
-22246 cabin
-2224638 cabinet
-22246387 cabinets
-222467 cabins
-2225 back
-2225224 backbag
-22253 cable
-22253667 backdoor
-222537 cables
-22257433 backside
-22257666 backroom
-222578243 backstage
-222587 backup
-2225877 backups
-2226366 abandon
-222636633 abandoned
-222652337 accolades
-22266 bacon
-222665 acamol
-222673466 accordion
-222674669 cacophony
-222678 accost
-2226868 account
-2226868268 accountant
-22283742 bacteria
-22284 cacti
-222844 cactii
-2228685283 accumulate
-222887 cactus
-2229 baby
-22293655 babydoll
-22297 babys
-223 abe bad cad
-2232837 cadaver
-22328377 cadavers
-2233 cafe
-22333463 caffeine
-223343 caddie
-223383742 cafeteria
-22343 badge
-2234522 cadilac
-22345522 cadillac
-223666 badoom
-2238 abet
-223828466 abduction
-22382867 abductor
-223828677 abductors
-224 bag cag
-2243 acid cage
-22433 caged
-2243676547 acidopolis
-22437 cages
-2243837 acheter
-2244243 baggage
-224433 bagged
-224443 baggie
-2245 bail
-2245489 ability
-2245568 caillou
-22455689 cailloux
-22467 bains
-2247 bags
-2247473 bagpipe
-224773 caisse
-2247737 caisses
-2248 bait
-22483 bague
-224833 baited
-2248546 caitlin
-2248596 caitlyn
-2252623 balance
-2252669 balcony
-2252852867 calculator
-2253 bake cake calf able
-22536327 calendar
-22536337 calender
-22537 baker cakes
-225379 bakery
-2254226 caliban
-22543 calif
-2254367642 california
-2255 ball call
-2255268463 ballantine
-2255464 calling
-22557 balls calls
-225576468 ballpoint
-2256 calm
-225837 calves
-2258787233 balustrade
-226 can
-22624 bambi
-22625 canal
-226262 banana
-2262627 bananas
-226279 canary
-2263 band cane
-2263262 bandana
-22632662 bandanna
-22633 abode
-2263352272 candelabra
-2263423 candice
-226348 bandit
-2263487 bandits
-22635 camel
-226353 candle
-2263532272 candleabra
-226353465337 candleholder
-2263534653377 candleholders
-2263537 candles
-22635378425 candlestick
-226372 camera
-2263727 cameras
-22639 candy
-2264 bang
-226463 canine
-22647837 banister canister
-226478377 banisters canisters
-2265 bank
-226537 banker
-22656683 banknote
-226637 banner
-2266377 banners
-2266462253 abominable
-226666 cannon
-2266667 cannons
-226679 canopy
-2267 camp cans
-22673473 campfire
-22676 acorn
-226767 acorns
-22678 abort
-226787 campus
-226827 canvas
-22683 above
-2268336 canteen
-226837 banter
-22687842 acoustic
-22688 about
-226966 canyon
-2269667 canyons
-227 bar bas cap car
-22722227 barabbas
-22722232272 abracadabra
-2272233 cascade
-22722337 cascades
-2272277 carcass
-227227737 carcasses
-227233 barbed
-22723738867 carberettor
-22724247 barchair
-227242477 barchairs
-2272426 abraham
-22724267 abrahams
-22727466 abrasion
-2272826 caravan
-2272873867 carburetor
-22728738867 carburettor
-2273 barf base cape card care case
-22732255 baseball
-22734625 cardinal
-22736368 basement
-22736574 bardolph
-22737 cards cases
-22737568 cardslot
-227377 caress
-227382537 caretaker
-2274 bash cash
-2274224 cashbag
-2274246 bargain
-22743 barge
-2274347 casheir
-2274437 cashier
-22746 basin cargo
-227464 casing
-2274652 cashola
-227466 casino
-2274662842 cashomatic
-2275 bark cask
-2275337 barkeep
-227533737 barkeeper
-227538 basket casket
-2275382255 basketball
-2275387 baskets
-227539 barley
-227546 carlin
-227567 carlos
-22756884 carlotti
-22757 casks
-2275866 carlton
-22758667 carltons
-2276 barn
-2276243 barmaid carnage
-227625 carnal
-227626 barman
-227636 barmen
-227648673 carnivore
-2276486737 carnivores
-22765 carol
-227657 carols
-22766 baron
-227677 across
-22769637 barowner
-2277 bars bass cars
-227735 barrel
-2277355 barrell
-2277357 barrels
-227738 carpet
-2277387 carpets
-227742233 barricade
-22774243 carriage
-2277437 barrier carrier
-22774373 barriere
-22774377 barriers
-2277678 carport
-227768 carrot
-2277687 carrots
-2277853 capsule
-22778537 capsules
-22778665 barstool
-227786657 barstools
-22779 carry
-2278 bart cart cast
-2278246 captain
-22782467 captains
-2278273 bastard
-22783 carte carve
-227836337 bartender
-227837 carter
-2278464 carving
-22784647 carvings
-2278473 acquire
-227847625 baptismal
-2278478 baptist
-227853 castle
-2278537 castles
-2278626 bartman
-227866 carton
-227867 captor
-22787 carts
-227874343 cartridge
-2278743437 cartridges
-2278873 capture
-22797325 carwreck
-228 act bat cat
-228226627 catacombs
-22824 catch
-2282437 catcher
-22824464 catching
-2283 cave
-228346 cavein
-2283626 caveman
-2283636 cavemen
-22837 bates caves
-228376 cavern
-2284 bath
-22843 bathe
-228433725 cathedral
-228466 action
-22847 baths
-22847666 bathroom
-22848283 activate
-228482867 activator
-22848437 cavities
-2284882 bathtub
-228489 cavity
-22853766 cauldron
-228548837 catlitter
-228626 batman
-228627 catnap
-228646466 batminion
-22866 baton
-228662453 batmobile
-228667 batons
-2287 bats cats
-22873 abuse cause
-228737 causer
-228768733 abtsotree
-2287842 acustic
-22882457 cattails
-2288283 actuate
-22882867 actuator
-228837437 batteries
-2288379 battery
-228853 battle cattle
-2289255 catwalk
-229 bay
-2293667 baydoor
-22936677 baydoors
-2296638 bayonet
-2297 bays
-22977 abyss
-23 cd be
-23224 beach
-232266 beacon
-2322873 because
-23237 beads
-23242 adaga
-23245 cecil
-2325 beck
-232537 beaker
-2325377 beakers
-23259 becky
-2326 adam beam bean
-232637 beamer
-232663 become
-23267 adams beams beans
-232678255 beanstalk
-2327 bear
-23273 beard cease
-232737 beards
-2327464 bearing
-23277 bears
-23277546 bearskin
-23278 beast
-23278626 beastman
-232787 beasts
-2328 beat
-232837 beaver
-2328377 beavers
-232884385 beautiful
-232887 beatup
-233 add bed bee
-2332426237 bedchamber
-233273 befare
-2333 beef
-23337263 bedframe
-2334243 affiche
-23347628483 affirmative
-23348466 addition
-23349 affix
-2336 been
-23366 addon
-233667 addons
-233673 before
-2337 beds beep beer bees
-23372273 beercase
-233722737 beercases
-2337377 address
-233742 cedric
-2337433 bedside
-2337464 beeping
-23376224463 beermachine
-2337666 bedroom
-23377 beeps
-233777323 bedspread
-233846836 beethoven
-233853 beetle
-234 beg
-234284687 behaviour
-234323 behead
-23436684 behemoth
-234366847 behemoths
-23437483 adhesive
-234427 beggar
-2344277 beggars
-234437 begger
-2344377 beggers
-23446 begin
-234463 behind
-2345464 ceiling
-23454647 ceilings
-23464 being
-234647 beings
-234653 behold
-234663 begone
-2349 afix
-235 ael cel
-23522368 adjacent
-235327283 celebrate
-235378425 celestial
-235433 belief
-235436 aelien
-2355 bell cell
-235527 cellar
-23557 cells
-235574663 cellphone
-23558527 cellular
-23559 belly
-2356644647 belongings
-23568 belov
-23569 below
-2358 belt
-23587 belts
-235878 adjust
-2358786368 adjustment
-236 bem ben
-23624 bench
-2362437 benches
-236247 benchs
-2363 bend
-2363284 beneath
-236368 cement
-23638279 cemetary
-23638379 cemetery
-2364647837 administer
-23646478728483 administrative
-23648 admit
-23652646 benjamin
-23653 adolf
-2365372368 adolescent
-23664 benni
-23668274 cenotaph
-23669 benny
-236697 bennys
-2367 bems
-23673 adore
-236746 bensin
-23676 adorn
-236766 benson
-2368 bent cent
-236837 center
-2368373653 centerfold
-2368725 central
-236873 centre
-2368786 centrum
-2368873 centure
-237 cds
-237225 cdrack
-23723787 cerberus
-2372642 ceramic
-237325 cereal
-2373257 cereals
-237433 beside
-23745263 bergland
-2376 afro
-23762736 bernardo
-23764726 aerogram
-237675263 aeroplane
-237743 berrie
-2377437 berries
-23779 berry
-2378246 certain
-2378328 cerveau
-23783553 cervelle
-23784 berth
-2378423 cervice
-23784279 bestiary
-23784342283 certificate
-237843422837 certificates
-237869 bestow
-238 bet
-238242 betcha
-2382437 betcher
-2382629 betamax
-238368873 adventure
-23837 after
-23837243 beverage
-2383759 beverly
-238376666 afternoon
-2383774283 aftershave
-238378473 advertise
-2383784736368 advertisement
-23837847363687 advertisements
-23837847464 advertising
-238378476368 advertisment
-2383784936368 advertizement
-238423 advice
-2389336 between
-2423 chad
-2424 bich
-24246 again chain
-242467 chains
-24246729 chainsaw
-2424678 against
-24247 chair
-242473 chaise
-2424737 chaises
-242477 chairs
-24253 bible
-242538 chalet
-2425423 chalice
-24255 chalk
-2425525683 chalkcloud
-2425526273 chalkboard
-242623 chance
-2426237 chamber
-2426273 chambre
-2426335437 chandelier
-242643 change
-2426433 changed
-24264464 changing
-2426625 channal
-2426635 channel
-24266357 channels
-242672463 champagne
-24268 chant
-2427 chap char
-242722837 character
-24272625 charcoal
-242727645 charbroil
-24273 chase
-242735 chapel
-242743 charge
-2427433 charged
-2427437 charger
-24274464 charging
-2427468 chariot
-24275363 charlene
-2427537 charles
-24275377 charless
-2427539 charley
-24276 charm chasm
-242766 charon
-242767 chasms
-24277 chaps
-24278 chart
-2427837 charter
-242787 charts
-2428 chat
-24287738837 chaussettes
-242883 chauve
-2428837 chatter
-2429253 bicycle
-24292537 bicycles
-243 aid
-24323 ahead
-24325 check
-2432576468 checkpoint
-24327 cheap
-24328 cheat
-243287 cheats
-2433 biff chef
-243357 cheeks
-24337 cheer chefs
-243373 cheese
-243373253874437 cheesebleurgher
-243373287437 cheeseburger
-24337532337 cheerleader
-243375323377 cheerleaders
-2435464 cieling
-243546464 cielining
-24364225 chemical
-243642257 chemicals
-24366 bidon
-24368 agent
-24373 biere
-24377 chess
-24377437 cherries
-2437774323 chesspiece
-243779 cherry
-2437792662 cherrybomb
-24377926627 cherrybombs
-24378 chest
-243787 chests
-243795 cheryl
-2439 chew
-243933 chewed
-2439464 chewing
-244 agi big cig
-244236 chicen
-24425 chick
-2442536 chicken
-2442536534 chickenleg
-24425367 chickens
-244257 chicks
-244268866 bigbottom
-24427 cigar
-24427324 bigbrech
-244273883 cigarette
-2442738837 cigarettes
-244277 cigars
-24433 chief
-24436 chien
-2444263 agigame
-244437 bigger
-244443 ciggie
-2444437 ciggies
-24449 ciggy
-244497 ciggys
-24453 child
-244536 chiken
-244537367 childrens
-24455 chill
-244554 chilli
-2445546 chillin
-2446 chin
-24462 china
-24463 chime
-2446369 chimeny
-2446373 chinese
-24465 chink
-2446639 chimney
-24468 chiot
-2447 chip cigs
-244735 chisel
-24476865 chipmunk
-24477 chips
-2448 chit
-24482428 chitchat
-2453 bike
-24537 biker bikes
-24537225 bikerack
-245464 biking bikini
-2455 bill
-245526273 billboard
-2455273 billard
-24552737 billards
-24553653 billfold
-245542737 billiards
-2455427382253 billiardtable
-24557 bills
-24559 billy
-24568 bijou
-246 aim bin
-24626 bimbo
-246265283 chocolate
-246265283777323 chocolatespread
-2463 bind
-246337 cinder
-2463464 binding
-24634647 bindings
-246362 cinema
-24637 binds
-24639 cindy
-246423 choice
-24658646372368 bioluminescent
-246628527 binocular
-2466285277 binoculars
-24667 chomp
-246673 choose
-24667377 chompers
-2467 bins chop
-24673 chore
-24677 chops
-2467737 chopper
-24677377 choppers
-2469 chow
-247 air
-24724 birch
-247253 circle
-2472667737767 aircompressor
-24727238 aircraft
-2472848 circuit
-247288426273 circutiboard
-2473 bird
-24732243 birdcage
-24733333 birdfeed
-247336368 agreement
-247345837 airfilter
-24736378 birdnest
-24737 birds
-24737333 birdseed
-247373337 birdseeds
-247376378 birdsnest
-24739 birdy
-2474 biri
-24747 chris
-247477 chriss
-2474779 chrissy
-247478 christ
-24747867437 christopher
-247478674377 christophers
-24753 aisle
-2475625 airlock
-2476 biro
-2476275 airmask
-24775263 airplane
-2477678 airport
-2477867 airpump
-2478265 airtank
-2478376 cistern
-24784 birth
-24784329 birthday
-248 bit
-248229 chubby
-24825 chuck
-2482553 chuckle
-248259 chucky
-24828466 citation
-2483 ague bite
-24837 bites
-2484 chug
-2484946 citizin
-24865 chunk
-2487 bits
-248724 church
-24876 churn
-248787 citrus
-24883 chute
-248837 bitter
-2489 city
-2492773 bizarre
-2493 agwe
-252 bla
-2522 blab
-25225 black
-2522526273 blackboard
-25225464 blacking
-252255225 blackjack
-2522576484 blacksmith
-2522867 albator
-25228767 albatros
-25233 blade
-2523337 bladder
-25242 alaga
-252466 albino
-25252926 alakazam
-2526 clam
-2526237 clamber
-2526437 clanger
-2526465 alcohol
-252646542 alcoholic
-25265 blank
-2526538 blanket
-25265387 blankets
-25267 clams
-252674355 clamshell
-252683 alcove
-2527 clap
-2527463 clarine
-25274772 clarissa
-252747727 clarissas
-25275 clark
-25276 alarm
-25277 class
-252776283 classmate
-2527762837 classmates
-252777666 classroom
-25278 blast
-2527837 blaster
-25278377 blasters
-2528342 claudia
-25283427 claudias
-2528437 clavier
-25286 album
-25287 claus
-2528837 clatter
-25289 blatz
-2529 ajax claw clay
-25293 blaze
-25297 claws
-2529768 claypot
-253 ale cle
-253224 bleach
-25325 ckeck
-25326 clean
-2532633 cleaned
-25326464 cleaning
-2532673 cleanse
-25327 clear
-253272623 clearance
-25327464 clearing
-2532792837 clearwater
-253283 cleave
-2532837 cleaver
-2533 clef
-25338 cleft
-25363 blend
-2536337 blender
-2537424 aldrich
-253749626 clergyman
-25375 clerk
-25377 bless
-253874437 bleurgher
-2538744377 bleurghers
-253926337 alexander
-2539263377 alexanders
-2539263768 alexandrov
-254 ali
-2542 alga
-25423 algae
-2542537 clicker
-25427464 aliasing
-25432 algea
-25433 cliff
-254337 cliffs
-25436 alien
-254367 aliens
-25442867 aligator
-254448 alight
-25462 climb
-25462464 climbing
-25463 blind
-254637 blinds
-25465464 blinking
-2547 clip
-254726273 clipboard
-25477 bliss clips
-2547737 clipper
-25477377 clippers
-25477464 clipping
-254774647 clippings
-2548 clit
-25486747 clitoris
-25487378 algusest
-255 all
-25524 allah
-25536 allen
-25539 alley
-255442867 alligator
-2554428677 alligators
-2556728787 allosaurus
-2557 alls
-25574448 allright
-2559 ally
-2562237 clobber
-25622437 blobbies
-256229 blobby
-25625 block cloak clock
-256257 blocks
-2563 clod
-256376 bjoern
-2563767 bjoerns
-25653 bloke
-256537 blokes
-25663 blond blood clone
-256633 blonde
-256637 cloner clones
-25663782467 bloodstains
-256639 bloody
-25664 along
-2566464 cloning
-2566646 bloomin
-25666464 blooming
-256678 almost
-2566927 bloozar
-25673 close
-2567359 closely
-256738 closet
-2567387 closets
-2567766 blossom
-25677667 blossoms
-2568 blot
-25683 cloud
-256835263 cloudland
-256837 clouds clover
-25684 cloth
-256843 clothe
-2568437 clothes
-256843737937 clothesdryer
-25684375463 clothesline
-25684437 clothier
-25684464 clothing
-25687 blots
-256873 blouse
-2568837 blotter
-2569 blow
-25693474 blowfish
-2569562 blowjob
-25696 clown
-256962568437 clownclothes
-25696688348 clownoutfit
-256967848 clownsuit
-25697 blows
-256987 bloxur
-2573239 already
-25742238 alphabet
-25742723 alphapad
-2574448 alright
-2582 club
-25825 cluck
-25827 altar
-2583 blue
-258323779 blueberry
-25833 bluff
-2583332 alteeda
-25833327 alteedas
-258337 bluffs
-25834366 bludgeon
-2583529 bluejay
-25837 alter blues
-258463837 altimeter
-25868 blunt
-25874 blush
-25949 clxix
-26 am an cm
-262 boa bob cob
-2622 coca
-26224 coach
-262246 cocain
-2622463 cocaine
-26225378663 cobblestone
-262253786637 cobblestones
-26229 bobby
-26235436 coaelhen
-26237 amber
-262377 ambers
-2624368 ancient
-262467 anchor
-2625 anal coal
-26252866 cockatoo
-262528667 cockatoos
-26254653 coalhold
-2625748 cockpit
-262576224 cockroach
-26258245 cocktail
-2625973 analyse
-2625993 analyze
-2626 coco
-2626688 coconut
-26266887 coconuts
-2626887 cocnuts
-2627 boar bobs
-26272 cobra
-26273 board
-262737 boards
-262739255 boardwalk
-26277 amass
-26278 coast
-2628 boat coat
-2628426437 coathanger
-2628465337 coatholder
-262852623 ambulance
-26285283 ambulate
-2628626 boatman
-26287 boats coats
-2628762538 coatpocket
-26287625387 coatpockets
-262932 cobweb
-2629327 cobwebs
-2629464 amazing
-263 and
-2633 code
-26332273 codecard
-263333 coffee
-263346 coffin
-263353 coddle
-263373 coffre
-263437 bodies
-2637233 andrade
-263739 andrew
-2637397 andrews
-26374226 american
-2637643 android
-26384978 amethyst
-2639 andy body
-26392845337 bodybuilder
-26397 bodys
-264 ani bog
-26435 angel
-2643537 angeles
-26443 angie
-2645 boil coil
-26453 angle
-264537 boiler
-2645464 boiling
-26457 coils
-2646 coin
-264622 cognac
-264625 animal
-2646257 animals
-264628466 animation
-264637 cogner
-26467 coins
-26467388767568 coinreturnslot
-26467568 coinslot
-26479 angry
-26483 boite
-264837 boites
-2649 coiw
-265 bol
-2652 boka cola
-265232 colada
-26527 colas
-26527465 colargol
-26529 colby
-2653 coke cold
-26537 cokes
-2653767426 coldsorian
-265527 collar
-26553 ankle colle
-2655328 collect
-265532822537 collectables
-2655328466 collection
-2655328677 collectors
-2655343 college
-265537 ankles
-2655467 collins
-2656463 cologne
-265662 coloma
-26567 color
-2656733 colored
-26567385 colorful
-265677 colors
-265687 colour
-2658 bolt
-265866 column
-2658667 columns
-26587 bolts
-266 ann boo com coo
-2662 anna bomb boob comb
-266228 combat
-2662325 conceal
-266232533 concealed
-26624 conch
-2662437 boobies
-26624628466 combination
-2662463 combine
-26625 cnock
-26626 combo
-26627 bombs bonar boobs
-26627383 concrete
-2663 anne bond bone come cone
-26632285283 confabulate
-26633426 comedian
-266337 confer
-2663377 confess
-2663448728466 configuration
-266344873 configure
-2663463 confine
-2663473 bonfire
-266348466 condition
-266366 condom
-2663667 condoms
-266367 condor
-2663678 comfort
-266367837 comforter
-26637 bonds bones
-266382867 conductor
-2663848 conduit
-26638487 conduits
-26639 comfy
-2664 bong
-26642 booga comic
-266427 comics
-266439 boogey
-2664425283 annihalate
-266443 boogie
-2664437 boogier
-2664445283 annihilate
-266473428466 congregation
-2665 bonk book cook cool
-26652273 bookcase
-266522737 bookcases
-26652665 cookbook
-266526657 cookbooks
-266533 cooked
-266537 cooker cooler
-2665374663 cookerhood
-2665379 cookery
-266537988367457 cookeryutensils
-266543 cookie
-2665437 cookies
-2665464 booking cooking cooling
-2665464475263 cookingisland
-266546462837425 cookingmaterial
-266546472643 cookingrange
-266546478683 cookingstove
-266546488367457 cookingutensils
-2665465 comlink
-26657 books
-26657243 bookpage
-26657353 bookself
-266574353 bookshelf
-26657435837 bookshelves
-26657666 bookroom
-2666 ammo boom
-26662559 anomally
-2666259 anomaly
-2666263 command
-26662636368 commandment
-266626363687 commandments
-2666269 boombox
-2666328 connect
-2666328466 connection
-2666372425 commercial
-266638 bonnet
-26664 among
-266648 commit
-266648833 committee
-2666633 commode
-266666 common
-266686236368 announcement
-2666862363687 announcements
-26668642283 communicate
-266686422867 communicator
-266686489 community
-26669464 annoying
-2667 comp coop
-2667228 compact
-266722867 compactor
-266724 bonsai
-266724687 conscious
-2667248733 bonsaitree
-2667269 company
-2667274766 comparison
-2667277 compass
-26672786368 compartment
-266727863687 compartments
-26673 coord
-2667345 conseil
-26673457 conseils
-26673462837 coordinates
-266737 coords
-26673848466 competition
-26674 boorh
-26674337 consider
-266752468 complaint
-26675383 complete
-2667539 complex
-266765 consol
-2667653 console
-26676537 consoles
-2667657 consols
-2667678 compost
-26676863 compound
-26677 coors
-2667737767 compressor
-26678 boost
-2667837 booster
-2667858 consult
-266785828466 consultation
-2667863 compund consume
-26678637 consumer
-26678742867 constrictor
-266787828 construct
-266787828466 construction
-2667878284667 constructions
-26678837 computer
-266788374263 computergame
-266788377 computers
-266788637 constumes
-2668 boot
-2668228 contact
-266824637 container
-2668246377 containers
-2668363373 contendere
-26683643623 convenience
-26683662 anntenna
-26683675283 contemplate
-2668367528464 contemplating
-26683687 contents
-2668377283 conversate
-266837728466 conversation
-26683773 converse
-2668378 contest
-2668378377 converters
-266837867 convertor
-26683787 contests
-26683937 conveyer
-266839372358 conveyerbelt
-26683967 conveyor
-26684 booth
-2668428 convict
-2668437 another
-26684683 continue
-266847 booths
-2668648466 ammunition
-266868 amount
-26687 boots
-2668722378483 contraceptive
-26687278466 contraption
-2668742883 contribute
-26687482623 contrivance
-2668765 control
-26687653 controle
-266876537 controles
-2668765474 bootpolish
-2668765537 controller
-26687655377 controllers
-26687657 controls
-26687657666 controlroom
-26689 booty
-26693 booze
-267 amp cms cop
-2672 corb
-26725 coral
-267263453 corcodile
-26729 corby
-2673 bore cord core
-267335 bordel
-2673355 bordell
-26733556 bordello
-267337 border
-26737 cords
-2674 borg
-267437 copier copies
-2675 cork
-267526273 corkboard
-267543437 amplifier
-2676 corn
-2676262 corncob
-267634353 cornfield
-2676352537 cornflakes
-267637 corner
-26766 bosom
-267662 corona
-2676637 coroner
-267666288 cosmonaut
-267667 bosoms cosmos
-2677 boss cops corr
-267725 corral
-267737 copper
-26774367 corridor
-267743677 corridors
-267766 bossom
-2677667 bossoms
-267767487 corrosius
-267769 borrow
-267773 corpse
-2677737 corpses
-267837 copter
-26783883 corvette
-26785283 copulate
-2678863 costume
-26788637 costumes
-2679 copy
-267937 answer copyer
-267937464 answering
-2679628 copymat
-268 ant bot cnu cot
-26824 couch
-2682437 couches
-26827326 antarean
-2683 ante cove
-26832426237 antechamber
-2683276 antfarm
-26836268 covenant
-2683632 antenea
-2683662 antenna
-26837 cover
-2683733 covered
-26837464 covering
-268377 covers
-2684 both
-268436 anthem
-268437 bouger
-26844 cough
-268447 boughs
-26845 anvil
-2684669 anthony
-2684783 antique
-26847837 antiques
-26853 could
-2685337 boulder
-26853377 boulders
-268537 antler
-2685377 antlers
-268538 amulet
-268623 bounce
-2686237 bouncer
-26863 bound
-26863279 boundary
-26868 count
-26868362623 countenance
-268683696 countdown
-2686837 counter
-268683722852 countdracula
-26868373348 counterfeit
-26868377278 counterpart
-268683772787 counterparts
-2686837867 countertop
-2686879 country
-268689 bounty
-2687 ants anus cots
-2687266 bourbon
-26872687 couscous
-268736368 amusement
-268753 couple
-2687538 couplet
-268754647 couplings
-268766 coupon
-2687667 coupons
-268773 course
-268774766 antprison
-26878 court
-2687838 bouquet
-2687846873 courthouse
-268787666 courtroom
-268789273 courtyard
-2688243 cottage
-268853 bottle
-2688537 bottles
-268853762538 bottlerocket
-2688537625387 bottlerockets
-268866 bottom bouton cotton
-2688667 boutons
-2688667433 bottomside
-268887437 couturier
-2689 antz
-269 any bow box boy cow
-269273 coward
-26935 bowel
-26937 boxer boxes
-269374363 boyfriend
-2693743637 boyfriends
-2693774678 boxershort
-2695 bowl
-26957 bowls
-269626 bowman
-2696632666 bozoofamoo
-26969 a6969
-2697 boxs boys cows
-269929 anyway
-2699297 anyways
-26996 bozzo
-2699673 anyword
-27 as
-272 ara bra
-2722 crab
-27223 brace
-272232 arcada
-272233 arcade
-27223538 bracelet
-27224643 arachnid
-27225 crack
-2722533 cracked
-2722538 bracket
-272257 cracks
-272353 cradle
-272363 ascend
-272368 ascent
-27238 craft
-2724 arch brag crag
-272437 arches
-2724432687 archidamus
-2724483 archive
-27244837 archives
-27246 brain
-272467 brains
-27247 archs
-2724929 archway
-27253 brake
-272537 brakes
-272624 branch
-2726243 branche
-27262437 branches
-2726247 branchs
-27262537 brambles
-272626 braman
-27263 brand crane
-27263464 branding
-272639 brandy
-2726486 cranium
-27265 crank
-272657 cranks
-2727 arcs bras crap
-27273 arbre
-272737 arbres
-27274 crash
-2727433 crashed
-2727437 brasier
-27277 brass
-272774373 brassiere
-272779 crappy
-27278 apart
-272786368 apartment
-2727863687 apartments
-27283 crate
-272837 crater crates
-27289778 bratwrst
-272898778 bratwurst
-27293673 crawford
-2729437 brazier
-27295 crawl
-27295464 crawling
-272966 crayon
-27299 crazy
-273 ape are
-2732 area
-273224 breach
-27323 bread
-27324 brech
-27325 break
-2732532623 breakdance
-273253278 breakfast
-273257 breaks
-27326 cream
-27327 areas
-273278 breast
-2732787 breasts
-27327875283 breastplate
-273283 create
-273284 breath
-2732843 breathe
-27328437 breather
-273284464 breathing
-27328477729 breathspray
-2732867 creator
-27328873 creature
-273288737 creatures
-27333 breed
-273337 breeds
-273348 credit
-2733487 credits
-27335 creek
-27337 creep
-2733737 creeper
-27337377 creepers
-273379 creepy
-273393 breeze
-27362 arena
-273624 brench
-27362437 brenches
-27363 creme
-27368 brent
-2737 apes
-27377537 bressler
-27378873 aperture
-27382773 crevasse
-2738423 crevice
-27384237 crevices
-2738473 crevise
-2739 brew crew
-2739626 crewman
-2739636 crewmen
-2739737766 crewperson
-2739759 brewsky
-274 ash
-2742 crib
-274226 ashcan
-2742267 ashcans
-27423 bribe
-27425 brick
-27425626 brickman
-274257 bricks
-274259675 brickwork
-274277 briars
-274325 bridal
-27433 bride
-274332273 briefcase
-27433464 briefing
-274343 bridge
-2743437 bridges
-27435 ariel
-274353 bridle
-27437 ashes cries
-2744 brig
-274448 bright
-27444859 brightly
-27463 crime
-27464 bring
-27464625 criminal
-274646257 criminals
-274678663 brimstone
-2747453 ashpile
-27476347422 aphrodisiac
-2747753 cripple
-2747825 cristal
-27478257 cristals
-274786853 aristotle
-27483 argue
-27486368 argument
-2748729 ashtray
-2748837 critter
-27488377 critters
-275 ark ask
-27522688 askabout
-27523 asjad
-276 arm bro
-2762 croc
-2762263 armband
-27623 broad
-27623929 broadway
-27624247 armchair
-27624873 brochure
-276248737 brochures
-276263453 crocodile
-2762634537 crocodiles
-27626368 armament
-27627 crocs
-27645 broil
-276536 broken
-276556 apollo
-276564437 apologies
-276564473 apologise
-276564493 apologize
-2766 ason
-276624 brooch
-27663 crone
-276637 cromer crones
-2766377 cromers
-276647 armoir
-2766473 armoire
-27665 brook crook
-27665596 brooklyn
-276657 crooks
-27666 broom
-2766678425 broomstick
-27667 armor
-276687 armour
-2766879 armoury
-2767 arms crop
-27677 crops cross
-2767737 crosses
-276779255 crosswalk
-276824 crouch
-27684 broth
-2768435 brothel
-2768437 brother
-27684377 brothers
-276863 around
-2769 army crow
-27691227 crow_bar
-2769227 crowbar
-27692277 crowbars
-27693 crowd
-27696 brown crown
-276963 browne
-27696464 browning
-27697 crows
-276973 browse
-276976378 crowsnest
-277245 assail
-2772643 arrange
-277272887 apparatus
-2772735 apparel
-2772748466 apparition
-27727746283 assassinate
-2772858 assault
-2773625 arsenal
-27736253 assemble
-27736259 assembly
-277363243 appendage
-2773632437 appendages
-27737668 arseroot
-277378 arrest
-2773849464 appetizing
-2774258 asphalt
-27742858 asphault
-2774466368 assignment
-277478 assist
-2774782623 assistance
-277478268 assistant
-2775283 applaud
-27753 apple
-277537 apples
-27754228466 application
-277542623 appliance
-2775426237 appliances
-27759 apply
-2776468 appoint
-27764686368 appointment
-27766 apron
-277667 aprons
-27769 arrow
-277697 arrows
-277734363 apprehend
-27776224 approach
-27776825 approval
-2778937 appuyer
-278 art cpu cru
-27823 bruce
-27824349 crucifix
-27824349466 crucifixion
-2782627463 aquamarine
-27827486 aquarium
-2783 aque
-278336336747 artedmedoris
-27833828 aqueduct
-27835 cruel
-27836336747 artemedoris
-27836436747 artemidoris
-27837643 asteroid
-278376437 asteroids
-27842537 articles
-2784285283 articulate
-27843228 artifact
-2784342425 artificial
-27846 bruin
-278462842 asthmatic
-27846436747 artimidoris
-2784645426 aquinilian
-27846454267 aquinilians
-278473 aquire cruise
-2784737 cruiser
-278487 arthur
-27853 crule
-27862 crumb
-278624 crunch
-278624437 crunchies
-2786249 crunchy
-2786253 crumble
-278627 crumbs
-2787 arts
-278725 astral
-27874 brush crush
-2787437 crusher
-278749663 brushwood
-27876 astro
-278766288 astronaut
-278768873 astroturf
-278825493 brutalize
-2789675 artwork
-27896757 artworks
-279 cry
-279464 crying
-27978 crypt
-2797825 crystal
-27978257 crystals
-279787 crypts
-28 at
-28222 bubba
-282253 bubble
-2822537 bubbles
-28229 cubby
-282294653 cubbyhole
-2822946537 cubbyholes
-2823 cube
-2824253 cubicle
-28249 cubix
-2825 buck
-282529643 buckazoid
-2825296437 buckazoids
-282538 bucket
-282553 buckle
-2825667 cuckoos
-282566725625 cuckoosclock
-28257 bucks
-282827 avatar
-283 bud cue
-2833 buff cuff
-2833256 buffalo
-283333 cuffed
-28334478 buddhist
-283353 cuddle
-28337 cuffs
-28339 buddy
-28343 budge
-283435 cudgel
-28343623 audience
-2834867486 auditorium
-283683 avenue
-2837 cues
-283934737 budweiser
-284 bug
-28453 build
-2845337 builder
-28453464 building
-284534647 buildings
-28453842 athletic
-2847 bugs
-2847463 cuisine
-284746377 buisiness
-2852 bulb
-28527 bulbs
-2853 cuke
-2855 bull
-2855364 bulldog
-285538 bullet
-28553846 bulletin
-2855384626273 bulletinboard
-285538467 bulletins
-2855387 bullets
-2855538 bulllet
-28557 bulls
-2858 cult
-286 bum bun cum
-28624 bunch
-286353 bundle
-28642569 bungalow
-28643 avoid
-28644653 bunghole
-2865 bunk
-2865233 bunkbed
-28652337 bunkbeds
-28657 bunks
-28664546487 cunnilingus
-2866493 atomize
-2866774373 atmosphere
-28669 bunny
-2867 atop bump buns
-286737 bumper
-2867377 bumpers
-286766 bunson
-287 bus cup
-2872 curb
-28726273 cupboard
-287262737 cupboards
-2873 cure
-287328 bureau
-2873287 bureaus
-2874 bush
-287425 burial
-28743 cupid
-287433 buried
-287437 burger bushes cupids
-28743756468 burgerjoint
-2874377 burgers
-2874466 cushion
-28744667 cushions
-28745263 bushland
-287453 burgle
-28746377 business
-2876 burn
-287633 burned
-287637 burner
-2876464 burning
-2877 burp cups cuss
-28773629 currency
-2877368 current
-28773687 currents
-2877464 burping
-287769 burrow
-28778 burst
-2878 bust
-2878246 curtain
-28782467 curtains
-2878246763 curtainrod
-2878273 bustard custard
-28783 curve
-287847 curtis
-2878477 curtiss
-287863426 custodian
-28786637 customer
-287866377 customers
-2879 bury
-288 but ctu cut
-288224 attach
-288225 attack
-2882437 butcher
-288246 attain
-288278 ctucru
-2883 cute
-288363268 attendant
-2883678 attempt
-288368466 attention
-28842 attic
-288467 author
-288467489 authority
-288473 attire
-28848833 attitude
-2885379 cutlery
-2886 auto
-2886628 autonav
-288662842 automatic
-28866284428466 autonavigation
-288662866 automaton
-2886662453 automobile
-28866624537 automobiles
-28867 autos
-288674568 autopilot
-2887 cuts
-2887228466 attraction
-2888 butt
-288837 butter cutter
-28883724876 butterchurn
-28883734353 butterfield
-28883735437 butterflies
-288837359 butterfly
-288837688 butternut
-2888377 cutters
-28884653 butthole
-288866 button
-2888667 buttons
-288869 buttox
-28887377 buttress
-2888737737 buttresses
-289 buy
-28937 buyer
-2899273 buzzard
-28992737 buzzards
-289937 buzzer
-29 ax by
-29253 cycle awake
-292536 awaken
-2925464 cycling
-29256737 cyclopes
-2925677 cyclops
-292567737 cyclopses
-2926 cyan
-29273 award
-292737 awards
-2927426 azarian
-2929 away
-293 axe bye
-293293 byebye
-2937 axes
-2947 axis
-29546337 cylinder
-295463377 cylinders
-296464 awning
-297663 awsome
-2978263377 bystanders
-322233 facade
-3223 face
-32237 faces
-3224 each
-322425 facial
-3224548437 facilities
-32245489 facility
-322742 fabric
-322742283 fabricate
-3227427 fabrics
-3228 fact
-3228679 factory
-323 dad
-32337 fader
-323377 faders
-32339 daddy
-323396 daddyo
-323397 daddys
-3237 dads
-324 fbi dbg fag
-3243553 echelle
-324437 dagger
-324468 faggot
-32447 dbggr
-32453 eagle
-3246 echo
-3247 fags
-3247437 daisies fairies
-32479 dairy daisy fairy
-324797 fairys
-32484 faith
-324847 faiths
-325 dak
-3253 dale fake
-3255 fall
-32557 falls
-32573 false
-326 dam dan fan
-32623 dance
-3262335667 dancefloor
-326237 dancer
-3262377 dancers
-326243 damage
-3262464 dancing
-3263 dame fame
-3264 dang
-326435 daniel
-3264357 daniels
-326437 danger
-326437687 dangerous
-326453 dangle
-32645437 families
-326459 family
-3264597 familys
-3266 damn
-326633 damned
-326648 dammit
-3266669 economy
-32669 danny
-3267 fans
-326735 damsel
-326736 dampen
-32682 fanta
-327 ear far
-32726 ecran
-327267 ecrans
-3273 fare fase
-32737 farer
-32739355 farewell
-3274 dash
-327426273 dashboard
-327473 ecrire
-3275 dark
-32756377 darkness
-32757666 darkroom
-32759 early
-3276 darn farm
-327637 farmer
-327646873 farmhouse
-32765263 farmland
-3277 ears
-3277464 earring
-32774647 earrings
-3278 dart east fart fast
-327826273 dartboard
-327836 fasten
-327836377 fasteners
-327837 faster
-3278378 fastest
-32784 darth earth
-3278459 earthly
-3278482337 darthvader
-327849676 earthworm
-3278626 dartman
-32787 darts
-32788476937 dartthrower
-3278867737 darttosser
-328 eat fat
-3282 data
-32822265 databank
-328238 faucet
-3282387 faucets
-328269 fatboy
-328274663 dataphone
-3283 date dave
-32836 eaten
-32836879 daventry
-32837 eater
-328373767 eavesdrop
-3283737677464 eavesdropping
-328377 eaters
-32839 davey
-32843 david davie
-3284323 fathead
-328437 father
-32843766 davidson
-3284377 fathers
-32844837 daughter
-328448377 daughters
-328464 eating
-32847 davis
-32858 fault
-328587 faults
-32862 fauna
-32867 favor
-3287 eats
-328837 fauves
-32889 fatty
-3289 davy
-329 day
-329233 daybed
-3296 fawn
-32967 fawns
-3297 days
-33 de ed ff
-33225 fecal
-3322728283 decapatate
-3322748283 decapitate
-332283 debate
-3322848283 deactivate
-3323 dead
-33232733 deceased
-3323537283 decelerate
-33237 feces
-33247437 decipher
-33247466 decision
-3325 deal deck
-3325273 declare
-332537 dealer
-3325377 dealers
-3325463 decline
-3325464 dealing decking
-3326 dean
-3326337 decoder
-332668264628466 decontamination
-33267283 decorate
-3326728466 decoration
-3327 dear fear
-33273273 decrease
-332747 debris
-33278 feast
-3328 debt
-33284 death debug
-3328437 feather
-33284377 feathers
-33284729843 deathscythe
-33284847328 deaththreat
-3328873 feature
-333223 deface efface
-333253 feeble
-3333 feed
-33332283 defecate
-333328 effect
-3333464 feeding
-3333673 defense
-333463 fefine
-3335 feel
-3335283 deflate
-3335464 feeling
-3337 deep deer
-3337379464 deepfrying
-33377546 deerskin
-3338 feet
-3339 eddy
-3343 edge
-3343423 edifice
-334733 degree
-3347337 degrees
-3348466 edition
-33484667 editions
-3349372833 dehydrated
-33542283 delicate
-335424687 delicious
-335463 feline
-3354837 deliver
-33548379 delivery
-33548737 delivrer
-3355 dell
-33552 fella
-335527 fellas
-33552846 fellatio
-335569 fellow
-3355697 fellows
-335669 felony
-335746742 delphoria
-3358287 deltaur
-336 den fem fen
-3362 fenc
-33623 fence
-336237 fences
-336253 female
-3362537 females
-3363873 fenetre
-33638737 fenetres
-33646463 feminine
-336473 denise
-336476 deniro
-3366 demo femo
-33663 femme
-33665328527493 demolecularize
-33665474 demolish
-33666 demon
-336667 demons
-3369 deny
-337 eds
-3372363 descend
-337236373 descendre
-337237 fesces
-33727478466 description
-337278 depart
-33727833 departed
-3372786368 department
-337363368 dependent
-337378 desert
-337446 design
-33744628466 designation
-337473 desire
-337478 desist
-3375 desk
-33757 desks
-3375867 desktop
-3376 fern
-337633 derned
-337637 fermer
-3376748 deposit
-3377377 depress
-3377377466 depression
-3377425 derrick
-33774257 derricks
-33774373 derriere
-337746437 derringer
-337786 ferrum
-33779 ferry
-33779626 ferryman
-3378 dept
-33784 depth
-3378453 fertile
-337845493 fertilize
-3378454937 fertilizer
-337847 depths
-33786238 dervocet
-3378769 destroy
-33787828 destruct
-33787828466 destruction
-337887 festus
-337889 deputy
-338224 detach
-33822437 detacher
-338228466 education
-338245 detail
-338278283 devastate
-33832867 detector
-338328677 detectors
-33835673 develope
-33835676368 development
-33837 deter
-338374368 detergent
-338423 device
-33845 devil
-3384565 dethlok
-33846283 detinate
-338687 devour
-33874887 detritus
-339 dew
-339273 edward
-3392737 edwards
-34 dg eh ei fi
-3424667842 diagnostic
-34246678427 diagnostics
-3424726 diagram
-34247267 diagrams
-3425 dial dick
-3425328 dialect
-34254323 dickhead
-34255377 dickless
-34256483 dialogue
-34257 dials dicks
-342623 fiance
-3426233 fiancee
-34262337 fiancees
-3426237 fiances
-3426663 diamond
-342666328 diconnect
-34266637 diamonds
-34273 fibre
-342737 diaper
-34274726 diaphram
-34277432 diarrhea
-34279 diary
-3428466 fiction
-343 did die
-343337368 different
-3433428589 difficulty
-343353 fiddle
-34353 field
-343537 fields
-34363 fiend
-34379 fiery
-34384 fifth
-344 dig egg
-34436 eigen
-344378 digest
-344378466 digestion
-344437 digger
-34448 eight fight
-3444825 digital
-3444837 fighter
-344484 eighth
-3447 eggs
-344873 figure
-3448737 figures
-34487463 figurine
-34524 filch
-34526368 filament
-3453 file
-34532273 filecase
-3453269 filebox
-34536 dildo
-34537 files
-345484486 dilithium
-3455 fill
-34553 fille
-345533 filled
-34553883 fillette
-3455464 filling
-3456 film
-345837 filter
-34584 filth
-346 dim din ego
-346262425 financial
-346262437 financier
-34626483 dinamite
-3463 dime dine find fine
-34637 dimes diner
-3464 ding
-346437 finger
-3464377 fingers
-346464 dining
-34646482253 diningtable
-346464822537 diningtables
-346474 finish
-346478 finist
-346543 dinkie
-3466 egon
-34662 dhooa
-346637 dinner
-34667287 dinosaur
-34669787 dionysus
-347 dip dir dis fir
-3472 disc
-3472253 disable
-3472273 discard
-3472376 discern
-347242743 discharge
-34726 disco
-347262255 discoball
-3472637 discoer
-3472666328 disconnect
-347268379 discovery
-347268773 discourse
-347276 disarm
-347277327 disappear
-3472776468464 disappointing
-3472777683 disapprove
-3472877 discuss
-3472877466 discussion
-3473 fire
-34732625 firecock
-3473273 disease
-34732737 diseases
-3473276 firearm
-34732767 firearms
-347328466 direction
-34732867 director
-347328679 directory
-3473398464847437 fireextinguisher
-34734673 firehose
-34734766 fireiron
-347362275 disembark
-3473626935 disembowel
-347364243 disengage
-34737 fires
-3473748 firepit
-347375223 fireplace
-34737584 fireplug
-347376537 firepoker
-34737828466 firestation
-34739663 firewood
-34739675 firework
-347396757 fireworks
-3474 dish fish
-34742663 fishbone
-347437 dishes fishes
-347437626 fisherman
-3474464 fishing
-34744645463 fishingline
-3474464763 fishingrod
-34744647653 fishingpole
-3474464822553 fishingtackle
-3474666437 fishmonger
-347468347283 disintegrate
-34747663 fishpond
-34748473 disguise
-3474878 disgust
-34749 fishy
-347492 fishx2
-3474927437 dishwasher
-3475 disk
-34753883 diskette
-347562283 dislocate
-34756343 dislodge
-3475662 diploma
-34756627 diplomas
-34762 firma
-347626368 firmament
-347626853 dismantle
-347636237 dismember
-34766868 dismount
-34772824 dispatch
-3477282437 dispatcher
-347736253 dissemble
-347736737 dispenser
-347743 dipsie
-347743368 dissident
-34775223 displace
-3477529 display
-34775297 displays
-3477623 disrobe
-347767 fissop
-34776725 disposal
-34778 first
-3477873 fissure
-34778737 fissures
-3477878 disrupt
-347787837 disrupter
-347787867 disruptor
-34779 dipsy
-3478 dirt
-34782255 dirtball
-34782623 distance
-34784648474 distinguish
-3478678466 distortion
-347874288466 distribution
-3478872 disturb
-34789 dirty
-34824 ditch
-34826 divan
-3483 dive five
-348433 divide
-34843464 dividing
-34847466 division
-34886 ditto
-349 fix
-34926 diwan
-34933 fixed
-3498873 fixture
-34988737 fixtures
-35 dj el
-352285283 ejaculate
-3524 flag
-3524355283 flagellate
-35245 flail
-352463 elaine
-35247 flags
-35247653 flagpole
-352478233 flagstaff
-35253 flake
-35263 flame
-352637 flames
-3526444 flamgig
-3526464 flaming
-3527 flap
-35273 flare
-35274 flash
-3527437 flasher
-35274464 flashing
-3527454448 flashlight
-35275 flask
-352757 flasks
-3527842 elastic
-3528 flat
-35287 flats
-3528836 flatten
-353 ele elf
-35328 eject
-3532872 electrc
-35328742 electric
-3532874225 electrical
-35328742489 electricity
-3532874289 electricty
-3532876624 electromag
-3532876642 electronic
-35328766427 electronics
-3532876763 electrorod
-35328767763 electroprod
-3533 flee
-35337 elder
-3533759 elderly
-35362 elena
-3536368279 elementary
-35363687 elements
-35374 flesh
-35374268 elephant
-35382867 elevator
-353828677 elevators
-353836 eleven
-35387 fleur
-353877 fleurs
-35425 flick
-3542537 flicker
-3542537464 flickering
-35437 flies
-354448 flight
-35464 fling
-354646283 eliminate
-35468 flint
-3547 flip
-35473567 flipflop
-35478 flirt
-35492 eliza
-354922384 elizabeth
-3549223847 elizabeths
-354927 elizas
-354947 elixir
-355378 ekkert
-35625 flock
-35628 float
-35628464 floating
-356287 floats
-3564 flog
-35667 floor
-3566726273 floorboard
-35667262737 floorboards
-3566726837464 floorcovering
-35667464 flooring
-35667628 floormat
-356677 floors
-3567 flop
-35672 flora
-356738 floret
-3567387 florets
-35674935 florizel
-356779 floppy
-35687 flour
-3569 flow
-356937 flower
-3569377 flowers
-356937768 flowerpot
-358243283 elucidate
-3583 flue
-35833 elude fluff
-35837 elves
-35843 fluid
-35874 flush
-3587437 flusher
-35883 flute
-359 fly
-35937 flyer
-359464 flying
-36 do fm
-362 dna doc
-36237 ember
-362377 embers
-362426837 enchanter
-36245 email
-3625 dock
-3625464 docking
-362567873 enclosure
-36257 docks
-3626 foam
-3627 docs
-3627223 embrace
-36286368 document
-362863687 documents
-362867 doctor
-3628677 doctors
-362925673342 encyclopedia
-363 dod doe end
-3633 doff
-363337 fodder
-363337633 dodderned
-36343 dodge
-3636 dodo
-363637 doener
-3636437 enemies
-3636469 enenimy
-36369 enemy
-3637253 emerald
-36374362437 emergencies
-363743629 emergency
-36374473 energise
-36374493 energize
-363749 energy
-364 dog fog
-364243 engage
-364443 doggie
-364463 engine
-36446337464 engineering
-3644637 engines
-36449 doggy
-3645243 foilage
-364636 eminem
-36464 doing
-3647 dogs
-364723353 dogpaddle
-364728464 engraving
-364853 engulf
-3652 fola
-3652743 enlarge
-3653 fold
-365333 folded
-365337 folder
-3653377 folders
-36537 folds
-3653837 enlever
-36539 dokey
-3654243 foliage
-3655 doll
-365527 dollar
-3655272455 dollarbill
-3655277 dollars
-365569 follow
-36556937 follower
-365569464 following
-36557 dolls folks
-36559 dolly
-36569 enjoy
-3657446 dolphin
-36574467 dolphins
-366 don doo
-36618 don't
-3662 emma
-366243 doobie
-366253 donald
-366283 donate
-3663 dome done fone food foof
-366323 doodad
-366353 fondle
-366366 doodoo
-36637 domes doner foods
-366378833 foodstuff
-3663788337 foodstuffs
-3664 dong
-36642453 domicile
-366437 donger
-366442539 doohickey
-3665 fool
-366539 donkey dooley
-3665397 donkeys
-3665474 foolish
-366637 donner
-36669 donny
-3667 door
-36672 door2
-36672355 doorbell
-366723557 doorbells
-3667539 doorkey
-36675625 doorlock
-3667626 doorman
-3667628 doormat
-36676287 doormats
-36677 doors
-36677837 doorstep
-3667929 doorway
-36679297 doorways
-3668 dont font foot
-36682255 football
-366844 enough
-36684455 foothill
-366844557 foothills
-36684667 emotions
-3668562537 footlocker
-36687284 footpath
-36687837 footstep
-366878377 footsteps
-367 for
-36723 force
-3672334353 forcefield
-367237 forces
-3673 dope ford
-36736253 ensemble
-36737 doper
-36737546 foreskin
-367377 dopers
-367378 forest
-3674 dosh
-36743 forge
-367446 ensign
-36746 ensin
-3675 dork fork
-367569 employ
-36756933 employee
-3675696368 employment
-36757 forks
-3676 dorm form
-367628 format
-367628466 formation
-3676284667 formations
-367648679 dormitory
-36767 dorms forms
-36767486 emporium
-367735 dossel
-3677626 forsman
-3678 fort
-36784 forth
-3678473 enquire
-36787 forts
-36787377 fortress
-3678737737 fortresses
-3678863835537 fortuneteller
-36789 empty
-367893687 fortyfour
-36789749 fortysix
-36789896 fortytwo
-3679273 forward
-36792737 forwards
-368 dot
-368253 double
-36828 doubt
-36835673 envelope
-36837 enter
-3683782466368 entertainment
-368423 entice
-36844 dough
-3684736668 enviremont
-36847666368 environment
-3685 foul
-36868246 fountain
-3687 four
-368715323 four-leaf
-36872457 entrails
-36872623 entrance
-368726237 entrances
-36873 douse
-368737 entrer
-36875323 fourleaf
-36878336 fourteen
-368784 fourth
-368789 fourty
-3687893687 fourtyfour
-368789749 fourtysix
-368789896 fourtytwo
-36879 entry
-36879929 entryway
-369 fox
-3693 doze
-36935 dowel
-36936 dozen
-36937 foyer
-3695 fowl
-3696 down
-36964455 downhill
-36965623 download
-36967473 downpipe
-369677688 downspout
-3696782477 downstairs
-36969273 downward
-37 dr fs
-372 f72
-372252867 escalator
-372273 escape
-37228466 fraction
-3722852 dracula
-37228873 fracture
-372342283 eradicate
-3724 drag
-3724446 fraggin
-37244464 fragging
-37246 drain
-37246243 drainage
-37246368 fragment
-372463687 fragments
-3724637 drainer
-372464653 drainhole
-372466 dragon
-372467 drains
-372467473 drainpipe
-37253 drake
-372537 drakes
-3726227 escobar
-372624726 francisco
-37263 frame
-372633 framed
-372637 frames
-37265 frank
-372653678346 frankenstein
-372659 franky
-37273 drape erase
-372737 drapes eraser
-3727379 drapery
-3727486473 escritoire
-3728 frat frau
-3729 draw
-372937 drawer
-3729377 drawers
-3729452867 frazilator
-3729464 drawing
-37294647 drawings
-37325 freak
-3732546 freakin
-37325464 freaking
-373257 freaks
-37326 dream
-37328466 erection
-3733 epee fred free
-373337425 frederick
-37333745 frederik
-373337457 frederiks
-37337 freds
-373378953 freestyle
-3733929 freeway
-373393 freeze
-3733937 freezer
-37339464 freezing
-373444837 freighter
-373624 french
-3736925 frenzal
-37377 dress
-3737733 dressed
-3737737 dresser
-37377377 dressers
-37378368 frequent
-3742 eric
-37422 frica
-37433 dried
-374343 fridge
-374363 friend
-3743637 friends
-37437 fries
-37438 drift
-3744 frig
-3744372867 frigerator
-3744446 friggin
-37444464 frigging
-3745 erik
-37455 drill
-3745546486937 drillingtower
-37455464869377 drillingtowers
-37465 drink
-3746537 drinker
-37465377 drinkers
-37465464 drinking
-374656224463 drinkmachine
-374657 drinks
-3747 drip
-37475 frisk
-37477 drips
-3748274 epitaph
-37482747 epitaphs
-37483 drive
-3748346 drivein
-374837 driver
-3748377 drivers
-37483929 driveway
-374839297 driveways
-3748464 driving
-3748836 fritten
-375466 eskimo
-37546644678 eskimoghost
-375466774748 eskimospirit
-3764 frog
-37643 droid
-376437 droids
-376542 frolic
-3766 from fron
-37663 frond
-376637 fronds
-37667 frons
-37668 front
-3767 drop
-37672 erosa
-376727 erosas
-3767466 erosion
-37675425 dropkick
-3767633 dropoff
-37677 drops
-376774647 droppings
-37678 frost
-376789 frosty
-3767967 dropzor
-37683 drove
-376936 frozen
-37696464 drowning
-3773623 essence
-37767 error
-3779 espy
-378 fst
-378225474 establish
-37825 equal
-3784 drug
-37847 drugs equip
-378476368 equipment
-37848 fruit
-37848464 fruiting
-378487 fruits
-3786 drum
-37865 drunk
-37865273 drunkard
-37865379466 drunkerwion
-378657 drunks
-3786637 drummer
-37867 drums
-378678425 drumstick
-3788279 estuary
-379 dry fry
-37937 dryer
-379377 dryers
-379464 drying frying
-3798543 erzulie
-38 et ft
-382 eva
-3822597887 eucalyptus
-3823 dube
-38233 evade
-3824373 etagere
-38243737 etageres
-3825 duck fuck
-382537 fucker
-3825464 fucking
-38257 ducks
-3828 duct
-38287 ducts
-383 eve
-3833 dude
-38337 dudes
-3833883 dudette
-3835 fuel
-383539 fudley
-3836 even
-3836464 evening
-38368 event
-3837 duds ever eves
-3837625 eternal
-38376489 eternity
-38379 every
-3837984464 everything
-384 dui
-38433623 evidence
-3843742 etheria
-3845 evil
-3847237283 eviscerate
-3855 full
-385866 fulton
-386 fun
-3862 dumb
-386224 funbag
-3862247 funbags
-38627837 dumbster
-3862924837 dumbwaiter
-3863 dune fund
-3863464 funding
-38637 dunes fumes funds
-3864 dung
-3864366 dungeon
-38644 fungi
-386444 fungii
-386453 etoile
-3864537 etoiles
-386487 fungus
-38659 funky
-3866437 dummies
-38669 dummy dunny funny
-3867 dump
-3867464 dumping
-38677837 dumpster
-387 ets fur
-3872255 furball
-3873 fuse
-3873269 fusebox
-38737 fuses
-387542283 duplicate
-3875422837 duplicates
-3876223 furnace
-3876474 furnish
-3876474464 furnishing
-38764744647 furnishings
-387648873 furniture
-387672 europa
-38779 furry
-3878 dust
-3878246 dustbin
-387825683 dustcloud
-387837 duster
-3878683 dustove
-38866 futon
-388872 futura
-388873 future
-3889 duty
-3899 fuzz
-39 dx ex
-39228283 excavate
-392372473 excercise
-39242643 exchange
-3925 eyal
-3926463 examine
-39264637 examiner
-3926753 example
-39273 dwarf
-392737 dwarfs
-3927383 excrete
-3927837 dwarves
-392873 excuse
-393 dye eye
-3932255 eyeball
-39322557 eyeballs
-393225584464 eyeballthing
-3932255844647 eyeballthings
-3932769 eyebrow
-3932883 execute
-3934653 eyehole
-3935537 dweller
-39355464 dwelling
-3937 ewer eyes
-39372473 exercise
-39374323 eyepiece
-393743237 eyepieces
-39384464 eyething
-393844647 eyethings
-394 dwi
-3942878 exhaust
-39464 dying
-39465437 dwinkies
-39478 exist
-394783623 existence
-3948 exit
-394863 exhume
-39529 exlax
-3953 dyke
-39626483 dynamite
-397267466 expansion
-39732867283 expectorate
-39735 expel
-3973743623 experience
-3973746368 experiment
-397374636825 experimental
-397374636828466 experimentation
-397378 expert
-397473 expire
-3974733 expired
-3975246 explain
-3975648 exploit
-3975673 explore
-397567483 explosive
-3975674837 explosives
-3976863 expound
-3977377 express
-39836337 extender
-398363377 extenders
-3983636 extendo
-39837467 exterior
-39837625 external
-39837646283 exterminate
-3984648474 extinguish
-398464847437 extinguisher
-39872 extra
-3987228 extract
-3987283773787425 extraterrestrial
-39872837737874257 extraterrestrials
-4131 i.d.
-4155 i'll
-416 i'm
-42 gb
-422 gab hac
-4224828 habitat
-4225 hack
-42272 haara
-423 ice
-4232374 iceberg
-42323747 icebergs
-42324378 icechest
-423269 icebox
-42337 hades
-423438 gadget
-4234387 gadgets
-424 gag hag
-4242842 hagatha
-424453 haggle
-4245 hail
-4247 hags hair
-42477 hairs
-4247746 hairpin
-42479 hairy
-425 gal
-42522867 galactor
-42529437 galaxies
-425299 galaxy
-4253 gale half
-42533278 halffast
-4255 hall
-425539 galley
-42557 halls
-4255929 hallway
-4258 halt
-42583 halve
-426 h2o ham
-426253 gamble
-42625377 gamblers
-426253874437 hambleurgher
-42625464 gambling
-426287437 hamburger
-4263 game hand
-4263269 gameboy
-42632833 handcuff
-4263283333 handcuffed
-426328337 handcuffs
-4263385 handful
-426344 gandhi handig
-4263486 handgun
-42634867 handguns
-426353 handle
-426353724433 handkerchief
-4263688 handout
-42636887 handouts
-42637 games hands
-42637245 handrail
-426372457 handrails
-4263738 handset
-4263742 ganesha
-42637663 handsome
-4264 gang hang
-426437 hanger
-4264464 hanging
-42645866 hamilton
-4264636237 gangmember
-42646362377 gangmembers
-426474 hamish
-4265 hank
-42652 ganja
-426538 hamlet
-42659 hanky
-4265972659 hankypanky
-4266225 hammack
-426637 hammer
-42663733 hammered
-426637334323 hammeredhead
-4266625 hammock
-427 gap gas has
-4272 garb hara
-42722343 garbadge
-4272243 garbage
-4272243226 garbagecan
-427242 garcia
-427243 garage
-4272433667 garagedoor
-4272434283 garagegate
-42725474 harakiri
-427266 garcon
-427266638 garconnet
-427267 harbor
-4272687 harbour
-427277 harass
-4273 gape hard hare
-427336 garden
-4273367 gardens
-427346 gardin
-42737 gases
-42739273 hardware
-4274 gash hash
-4274474 hashish
-427453 gargle
-427539 harley
-427568 harlot
-4276 harm
-4276368 garment
-42763687 garments
-427638 garmet
-4276387 garmets
-427653 harold
-42765377 harmless
-42765463 gasoline
-4276669 harmony
-4277 gaps gars gasp
-427736 happen
-42773633 happened
-42774 harri
-4277437 harpies
-4277464 gasping
-42777424673 harpsichord
-42779 happy harpy harry
-4278 harv
-42783 haste
-427837837 harvester
-427839 harvey
-42784 garth
-4278537 hastler
-428 hat
-42824 hatch
-4282438 hatchet
-42824929 hatchway
-4283 gate hate have
-4283533737 gatekeeper
-42837 gates
-4283929 gateway
-42843 gauge
-428437 gather
-428437464 gathering
-4285 haul
-42867 gator
-4286833 haunted
-4287 hats
-4287225 hatrack
-42877626 haussman
-4288 haut
-429 hay icy
-429273 hazard
-4293 gaze haze
-429326 gazebo
-42934353 hayfield
-4295 gawk hawk
-42978225 haystack
-43 gd he id if
-4323 head
-432326273 headboard
-43234327 headgear
-432354448 headlight
-4323562 headjob
-4323627837 headmaster
-43237 heads
-432378278377 headquarters
-432378663 headstone
-4323786637 headstones
-4325 heal
-432537 healer
-432553 heckle
-432584 health
-4325849 healthy
-4327 gear heap hear
-4327464 hearing
-432774438 gearshift
-43278 heart
-432784 hearth
-4328 heat
-43283 heave
-432836 heaven
-4328367 heavens
-432837 heater
-43289 heavy
-4332 idea
-43343 hedge
-433437 hedges
-43343769 hedgerow
-4335 geek
-43368434228466 identification
-43368439 identify
-4338 heft
-433937 geezer
-4346 hein
-43468 idiot
-4347 heir
-435 gel
-43536 helen
-4354 heli
-4354267837 helicopter
-4355 hell
-435546863 hellhound
-43556 hello
-435638 helmet
-4357 help
-43571 help!
-436 gem geo hen
-4362336784 henceforth
-43624626 henchman
-43624636 henchmen
-43633 geode
-436337 geodes
-4363725 general
-43637283 generate
-4363728387 generateur
-436372867 generator
-4363728677 generators
-43637287423 generatrice
-436374257 hendricks
-4363782 genesta
-436382542 genetalia
-43643 genie
-43648257 genitals
-4365625 hemlock
-4366234 gennadi
-43662349 gennadiy
-4366239 gennady
-4367 gems gens henp
-436734 geordi
-436743 george
-43678663 gemstone
-4368 gent
-436824 hentai
-436853626 gentleman
-436853636 gentlemen
-437 her ids
-4372 herb
-4372378 herbert
-43727 herbs
-4373 here
-4374237887 hephaestus
-4376 hero
-437626 german
-437643 geroge
-437646 heroin
-43764663 hermione
-437648 hermit
-437648243 hermitage
-4377 herr hers
-43773 herpe
-4377353 herself
-4377464 herring
-4378873 gesture
-438 get het
-438376 hetero
-43876 hetro
-4388464 getting
-439 gey hey
-4392 heya
-439737 geyser
-44 ii hh hi
-44268 giant
-44268377 giantess
-4433 hide
-44331688 hide-out
-4433687 hideous
-4433688 hideout
-44339 hidey
-4433946 hideyho
-4434 hifi
-4437645974427 hieroglyphics
-4438 gift
-443886 ghetto
-4438862527837 ghettoblaster
-444 iii
-4444 high
-444424247 highchair
-44447533737 highsleeper
-4444929 highway
-444687466 ghinusion
-4446874667 ghinusions
-4452 hija
-445225 hijack
-4453 hike
-4455 hill
-44557 hills
-446 gin him
-4463 hind
-44643 ginie
-44643727323 gingerbread
-446483 ignite
-4464837 igniter
-44648466 ignition
-44663 gimme
-446643 gimmie
-4467353 himself
-44678 ghost
-446787 ghosts
-4468 hint
-44685 ghoul
-446857 ghouls
-44687 hints
-447 hip his iis
-4475 girl
-447524 hislah
-44753 girle
-4475374363 girlfriend
-44753743637 girlfriends
-44757 girls
-4477 hips hiss
-4477437 hippies
-447797 hippys
-4478679 history
-448 git hit
-44824 hitch
-448244453 hitchhike
-4482444537 hitchhiker
-44824464 hitching
-4483 give hive
-448437 hither
-448464 giving
-448537 hitler
-4485377 hitlers
-4492 hiya
-44929 hiway
-452623 glance
-45273 glare
-45277 glass
-452772243 glasscage
-452772273 glasscase
-4527737 glasses
-452779675 glasswork
-45326 gleam
-45326464 gleaming
-453267 gleams
-45433 glide
-4546637 glimmer
-4546637464 glimmering
-45466377 glimmers
-4546773 glimpse
-45468 glint
-4547836464 glistening
-45478367 glistens
-4548837 glitter
-4548837464 glittering
-45488377 glitters
-455 ill
-4553425 illegal
-4558646283 illuminate
-45623 globe
-45683 glove
-456837 gloves
-4569 glow
-4569464 glowing
-45699 glowy
-4583 glue
-4584 glug
-4588866 glutton
-46 go hn ho im in
-462248 hobbit
-4622484653 hobbithole
-46224846873 hobbithouse
-462253 gobble
-46226828466 incantation
-4623673 incense
-462423 imbibe
-46243 image
-462437 images
-462462546 hobgoblin
-4624625467 hobgoblins
-4625 goal
-462546 goblin
-4625463 incline
-4625467 goblins
-4625833 include
-4626 hobo
-46269 inbox
-46273273 increase
-4628 goat
-462833 goatee
-46287 gnats hocus
-4629 gnaw
-463 god hoe
-463268 infant
-4633264 goddang
-4633266 goddamn
-463326633 goddamned
-463348 hoddit
-4633484653 hoddithole
-46334846873 hoddithouse
-4633626 hoffman
-46336267 hoffmans
-46337 infer
-463373633623 independence
-4633766 inferno
-4634843825 individual
-4635282253 inflatable
-4635283 inflate
-463583623 influence
-4636 info
-463668437 godmother
-463676 inform
-46367628466 information
-4637 gods
-4637228466 infraction
-4638237 inducer
-46387879 industry
-464 hog
-4642248268 inhabitant
-46422482687 inhabitants
-4642528466 inhalation
-464253 inhale
-464344 hohegh
-464352 ingela
-464378 ingest
-464453 goggle
-4644537 goggles
-46464 going
-4647 hogs
-4647334368 ingredient
-46473343687 ingredients
-46478 hoist
-464787 hoists
-4648 init
-4648425493 initialize
-46484257 initials
-4648473 inguire
-465 ink
-4652 hola
-4653 gold hold hole
-465327633 goldarned
-465328 inject
-46533474 goldfish
-465336 golden
-465337 holder
-4653464 holding
-4653468439255 holeinthewall
-46536725 goldorak
-46537 holer holes
-4654329 holiday
-46546842 golgotha
-46552 holla
-465537 holler
-465569 hollow
-4656 holm
-4656345645 holodilnik
-46564726 hologram
-46564727442 holographic
-4657837 holster
-465873 injure
-465879 injury
-4659 holy
-466 goo hoo inn
-466237 gonads goober
-4662737 innards
-466283 inmate
-4663 good home hood
-46632 honda
-4663238376666 goodafternoon
-466329 goodby
-4663293 goodbye
-4663329 goodday
-46633836464 goodevening
-4663437 goodies
-466346343353 hoodindiddle
-46635377 homeless
-4663626 goodman
-466366 hoodoo
-46636676464 goodmorning
-46637 goner goods homer homes inner
-46639 gomez goody honey
-466392662 honeycomb
-46639527 honeyjar
-466396666 honeymoon
-466464 homing
-4665 hook
-466533737 innkeeper
-466537 hooker
-4665377 hookers
-46657 hooks
-4666 goon homo
-46662368 innocent
-46663 gnome homme
-46667 goons honor
-466672253 honorable
-466687 honour
-4667 hoop
-467 hop imp
-467247 impair
-46727423 inscribe
-46727478466 inscription
-467274784667 inscriptions
-467278 impart
-4673 gore hope hose
-467328 insect
-4673287 insects
-46735 impel
-46737 hoses
-46737425 imperial
-46737473 hosepipe
-46737626 horesman
-467378 insert
-46743 gorge
-467433 inside
-46743687 gorgeous
-467464 goring
-4674667 gorgons
-4674966 horizon
-4674966825 horizontal
-467536368 implement
-4675363687 implements
-4675467 hopkins
-4676 horn
-4676263493 gormandize
-467638 hornet
-4676387 hornets
-467639 horney
-46767 horns
-467678268 important
-46769 horny
-4677 horq
-46773 horse
-4677328 inspect
-467737 hopper horses
-467743 horsie
-467747 gossip
-46774766 imprison
-46774825 hospital
-4678 host
-4678255 install
-4678268 instant
-4678473 inquire
-46784888466 institution
-4678573 impulse
-46787 horus
-467872623 insurance
-467878284667 instructions
-4678786368 instrument
-46787863687 instruments
-468 got hot inv
-4682337 invader
-46835 hotel hovel
-46836 inven
-4683682473 inventaire
-468368466 invention
-46836867 inventor
-468368679 inventory
-46837 hover
-46837228 interact
-46837228483 interactive
-46837268773 intercourse
-4683727238 hovercraft
-468373373 interfere
-46837378 interest
-4683742522842 intergalactic
-46837467 interior
-468376257 internals
-46837638 internet
-4683766368 government
-468377328 intersect
-468377328466 intersection
-46837764283 interrogate
-46837773837 interpreter
-468377738464 interpreting
-468377878 interrupt
-468378 invest
-46837833 inverted
-46837844283 investigate
-468378463 intestine
-4683784637 intestines
-468474245489 invisibility
-468474253 invisible
-4684828466 invitation
-46848284667 invitations
-4686 goto into
-46863 hound
-4686367 hounfor
-46863687 hounfour
-4686426 houngan
-46869422833 intoxicated
-4687 hour
-46873 house
-46873359 housefly
-468734653 household
-4687366943357 houseonwheels
-468737 houses
-4687464 housing
-46876 intro
-468843 hottie
-468882 hottub
-4689473 hotwire
-469 how
-46939 howdy
-4696 gown
-46967 gowns
-4697 hows
-47 is hq
-4722 grab
-47222 isaac
-47233 grade
-47233484 graffiti
-472334847 graffitis
-472334884 graffitti
-47233489 graffity
-4723484 grafiti
-47234884 grafitti
-4723489 grafity
-472426 graham
-47242617 graham's
-4724267 grahams
-47246 grain
-472467 grains
-47263 grand
-472633 grande
-47263328437 grandfather
-47263374266 grandepiano
-4726362 grandma
-47263668437 grandmother
-4726372 grandpa
-4726374266 grandpiano
-4726483 granite
-472669 granny
-47268 grant
-4727 gras
-472737 grapes
-4727442 graphic
-4727635 grapnel
-47277 grasp grass
-4727737 grasses
-4727753 grapple
-472775464 grappling
-472779 grassy
-4728 grav
-47283 grate grave
-47283344437 gravedigger
-472835 gravel
-472837 grates graves
-472837483 gravesite
-4728378663 gravestone
-47283786637 gravestones
-472839273 graveyard
-4728392737 graveyards
-4728464 grating
-47284647 gratings
-4728489 gravity
-4729 gray
-473273 grease
-47328 great
-47336 green
-4733653222 greenkebab
-4733653227 greenkebap
-47338 greet
-473384647 greetings
-4736233 grenade
-47362337 grenades
-4739 grey
-4743 grid
-4743346 griffin
-47433467 griffins
-474467 grigor
-4744674 grigori
-47455 grill
-47455243 grillage
-474553 grille
-4745537 grilles
-4745539675 grillework
-474557 grills
-4746 grim grin
-47463 grind
-47466464 grinning
-47467 grins
-4746737 grimper
-474677666 grinspoon
-4747 grip
-475263 island
-4752637 islands
-4753 isle
-47537 isles
-47538 islet
-476237437 groceries
-4762379 grocery
-47646 groin
-4766 iron
-476683 groove
-4766837 grooves
-476689 groovy
-47673 grope
-476783783464 grostesteing
-476863 ground
-4768637 grounds
-4768637533737 groundskeeper
-47687 group
-476886 grotto
-4769 grow
-476984 growth
-4782 grub
-4784687 isthmus
-48 it iv
-4817 it's
-482 hub
-4822 huba
-482226653 guacamole
-4826 ivan
-48273 guard
-482737 guards
-482737245 guardrail
-483 hue iud
-483329 guffaw
-4836 item
-48367 items
-48377 guess
-48378 guest
-483787 guests
-484 4th hug huh
-4843 huge
-48433 guide
-4845568463 guillotine
-484589 guilty
-48466377 guinness
-484827 guitar
-4848273 guitare
-484827478 guitarist
-48524 gulch
-4853 gulf
-48546 hulio
-485467 hulios
-4855 gull
-485538 gullet
-48557 gulls
-4857 gulp
-486 gum gun hum
-4862358 gunbelt
-48626 human
-486267 humans
-48629 gumby
-486326 gundam
-4863733 hundred
-486479 hungry
-4865 hunk
-486637 hummer
-4866464 humming
-48664647 hummings
-48667478 humorist
-486687 humour
-4867 gums guns hump hums
-48674448 gunsight
-4867467 gunshop
-486769337 gunpowder
-48678673 gunstore
-48679 ivory
-4868 hunt
-486837 hunter
-487 its
-4872263 husband
-48722637 husbands
-487353 hurdle
-4874 hush
-4875 hurl
-487742263 hurricane
-48779 hurry hussy
-4878 guru gust hurt
-488 hut
-48824 hutch
-4882437 hutches
-4882446766 hutchinson
-488362374 gutenberg
-4887 guts huts
-488837 gutter
-489 guy ivy
-4897 guys
-489953 guzzle
-49 ix
-4937268 hydrant
-493728466 hydration
-496 gym
-496627486 gymnasium
-49737 hyper
-4973777333 hyperspeed
-497379277 hyperwarp
-4976 gyro
-4976337642 hypodermic
-4993466 gwydion
-522 jab lab
-522237 jabber
-52234 laadi
-52235 label
-522357 labels
-522466 labion
-5225 jack
-522522 laalaa
-522538 jacket
-5225387 jackets
-5225426637 jackhammer
-5225766 jackson
-52257667 jacksons
-5226728679 laboratory
-5227664 jabroni
-522867 labtop
-5228994 jacuzzi
-523 lad lae lcd
-523337 ladder laffer
-5233377 ladders
-52343 ladie
-523437 ladies
-52353 ladle
-5239 lady
-524 jah
-5243 laid
-52437 jager lager
-5245 jail
-5245362374 kahlenberg
-52453623747 kahlenbergs
-524537 jailer
-52457 jails
-52458 lahku
-524666 lagoon
-5247 lair
-5248546 kaitlin
-5248596 kaitlyn
-5253 jake lake
-5254 kali
-5257272 kalsarc
-52572727 kalsarcs
-526 jam lam
-5262 jamb
-52623 lance
-526237 lancer
-5263 jane land lane
-52633455 landfill
-5263464 landing
-5263464723 landingpad
-5263476 janeiro
-52637 james
-526372273 landscape
-52645293 kamikaze
-52648243 language
-5264867 janitor
-52648677 janitors
-5267 lamp
-526727 kansas
-52673 lampe
-52677 lamps
-52677678 lamppost
-526779673 lampsword
-5268376 lantern
-52683767 lanterns
-527 jar las
-52725 kasck
-5272653 karaoke
-5273 lard
-527346 jardin
-5273467 jardins
-52737 lards laser
-527372326 laserbeam
-5273723267 laserbeams
-52737266382867 laserconductor
-52737486 lasergun
-527377 lasers
-52737932766 laserweapon
-52743 large
-5275 kask
-52766 jason lasoo
-5277 jars lars lass
-52773 lasse
-527737 jasper
-52776 lasso
-52779 larry
-527797 larrys
-5278 last
-527845 kartik
-527867 laptop
-5278677 laptops
-527882 kasuta
-528 kat
-5282 lava
-52824 latch
-528262 katana
-5282867437 lavatories
-52828679 lavatory
-5283 late
-52837 later
-52837387466 laterfusion
-52844 laugh
-5284642 lavinia
-528624 launch
-52863373883 launderette
-5286373883 laundrette
-5286376628 laundromat
-5286379 laundry
-52872 laura
-5287368 laurent
-5287463 latrine
-5288423 lattice
-52884239675 latticework
-529 jaw jay law lay
-5292663 jawbone
-52933 layed
-5293629 lazenby
-52936297 lazenbys
-529464 laying
-5296 lawn
-529626 lawman
-529666937 lawnmower
-52967 lawns
-5297 jaws lays
-5299 jaxx
-53 le
-53222 kebab
-53227 kebap
-5323 lead leaf
-53233424 jebediah
-532337 leader
-5323538 leaflet
-53235387 leaflets
-53237 leads
-5325 leak
-5326 lean
-532639 keaney
-53267 jeans
-532686 leanto
-5327 leap
-53274 leash
-53276464 learning
-53283 leave
-532837 leaves
-5328376 lectern
-5328437 leather
-5328873 lecture
-533 lee
-53324 leech
-5333 jeff
-533337766 jefferson
-53337 jeffs
-5333739 jeffrey
-5334 jedi
-53343 ledge
-533437 ledges
-5335 keel
-5336743 leforge
-5337 jeep keep
-533737 keeper
-5338 left
-53389 lefty
-533897 leftys
-534 keg leg
-53422 legba
-534229 legacy
-5342663 legbone
-5346824 jehovah
-5347 kegs legs
-5347873 leisure
-53484 keith
-53487227 lehtsaar
-5348727 lehtsar
-5355 kell
-535539 kelley
-53556 jello
-53559 jelly
-536 jen ken
-536372 kendra
-536484 length
-5365 lenk
-5365467 jenkins
-5366 jenn
-5366273 leonard
-53662737 leonards
-5366347837 kenmeister
-53664 jenni
-53664337 jennifer
-536643377 jennifers
-536647 jennis
-53666233 lemonade
-536662337 lemonades
-53667 jenns
-53669 jenny kenny
-536697 jennys
-5367 jens lens
-5367273 leopard
-53673 lense
-5368 lent
-537 jep
-53737 leper
-537466 lesion
-5375 jerk
-537648 kermit
-537662 kerona
-53766426 keronian
-537666426 kernonian
-53767363 kerosene
-53769 leroy
-5377 jess leps
-5377324286 leprechaun
-53773242867 leprechauns
-5377422 jessica
-537763 jerrod
-537766 lesson
-5377667 lessons
-5377687 leprous
-53779 jerry
-53787 jesus
-538 jet let
-53835 level
-53837 lever
-538377 levers
-538428426 leviathan
-5384284267 leviathans
-53848283 levitate
-5387 jets lets
-5387225 jetpack
-538837 letter
-538837269 letterbox
-5388377 letters
-538853 kettle
-5388537 kettles
-538868 levtov
-539 key
-5391 key1
-5392273 keycard
-53922737568 keycardslot
-53924246 keychain
-53926273 keyboard
-53935 jewel
-53935379 jewelery
-53935533 jewelled
-539357 jewels
-5393579 jewelry
-5394653 keyhole
-53946537 keyholes
-5397 keys
-5397225 keyrack
-539723 keypad
-5397464 keyring
-5397568 keyslot
-542233 libbed
-5422623 licance
-5423673 license
-54236737 licenses
-5423737 liberer
-5425 kick lick
-542537 kicker
-54257 kicks
-5427279 library
-543 kid lid lie
-5433 life
-54332628 lifeboat
-54333676 lifeform
-543336767 lifeforms
-543627737 kidnapper
-5436277377 kidnappers
-5436277464 kidnapping
-5437 kids
-5438 lift
-54387 lifts
-5438836268 lieutenant
-544 jig
-544278487 ligaruius
-54448 light
-544482852 lightbulb
-5444837 lighter
-54448377 lighters
-54448464 lighting
-544486464 lightning
-544487 lights
-5444877333 lightspeed
-545 lil
-5453 like
-545437 lilies
-5455 jill kill
-545537 killer
-545537626 killerman
-5456 kiln
-5459 lily
-546 jim kim
-5462 limb
-54626 jimbo
-5462656 lincoln
-54626567 lincolns
-54627 limbs
-5463 kind line
-54633 kinfe
-54636 linen
-54637 lines
-54637539 lindsley
-5463925537 linewalker
-5464 king
-54643743 lingerie
-5464487 kinghts
-54647 kings
-54648 limit
-5465 link
-5466 lion
-54667 lions
-54669 jimmy
-54675 kiosk
-5468 lint
-54696 jinwo
-547 lip
-5472 lisa
-54723673 liscense
-5473 lire
-5474 kiri
-5477 kiss lips
-5477488 lippitt
-54778425 lipstick
-54779 lissy
-5478 list
-547836 listen
-547836464 listening
-547837 liquer
-547843 liquid
-547847 liquir
-547867 liquor
-5478687 liquour
-548 kit lit
-5482436 kitchen
-548243672643 kitchenrange
-5483 lite
-54837 liver
-5483728873 literature
-548378625 livestock
-548379 livery
-548464 living
-5487 kits
-54873 livre
-548737 livres
-5487485 kitshuk
-548785 kitsuk
-548836 kitten
-548837 litter
-548837269 litterbox
-548853 little
-54889 kitty
-54889548837 kittylitter
-549 liz
-549273 lizard
-5492737 lizards
-5497 lizs
-5499 jizz
-5533639 kleenex
-5539367 llewdor
-55464667 klingons
-5547843 lliquid
-5587 llur
-562 job loa lob loc
-56225 local
-562257 locals
-562283 locate
-56228466 location
-56229 lobby
-5623 load loaf
-562333 loaded
-562337 loader
-56234 loadi
-56237 locer
-5625 jock lock
-562537 locker
-5625377 lockers
-562538 locket
-562539 jockey
-56257 locks
-56257425 lockpick
-56257425464 lockpicking
-562578727 jockstrap
-5626 loam loan loco
-5627 loas
-5627837 lobster
-563 joe
-56323 knead
-5633 knee
-56335 kneel
-56343 lodge
-5635 joel
-5637 joes
-5638 loft
-5639 joey
-56397 joeys
-564 jog log
-5642533 knicked
-56426 johan
-56426637 johannes
-5642665 logbook
-56433 knife
-564337 knifes
-564448 knight
-564453 joggle
-5646 john join logo
-564625684 loincloth
-564633 logoff
-564669 johnny
-56467 johns
-56468 joint
-564687 joints
-564688 logout
-5647 logs lois
-564837 knives
-56488464 knitting
-565 lok lol
-565296 kolayn
-5653 joke
-56537 jokes
-5654 loki
-56554767 lollipop
-5656883 lolotte
-5658 jolt
-565962 kolyma
-566 kon loo
-5662 knob
-566237 joober
-56625 knock
-5662537 knocker
-56625377 knockers
-56625464 knocking
-56627 knobs
-56637 jones
-5664 long
-5665 look
-566533 looked
-5665464 looking
-5665688 lookout
-56656887 lookouts
-566587 lookup
-5666 loom
-56665 loook
-56667 looms
-56673 loose
-566736 loosen
-5668 knot loot
-5668454 kontiki
-56684547 kontikis
-56684653 knothole
-5669 know
-566953343 knowledge
-56696 known
-567 los
-5673 lord
-567342765377 lordharmless
-56737 loser
-567377 losers
-567463 josine
-5674867 loritos
-56752 korja
-5677 loss
-5677464 lopping
-5678 korv lost
-56782546 lostalim
-56784 losti
-56785246 lostlaim
-568 lot lou
-5683 loud love
-568359 lovely
-5683625464 lovemaking
-56839 kotex
-56843 louie
-568466 lotion
-56847 louis
-568643 lounge
-5687625 journal
-56876257 journals
-5687639 journey
-5688379 lottery
-569 kow low
-56937 lower
-56978425 joystick
-57 jr kq
-572324 kq2dbg
-573 lpd lsd
-57324 kqdbg
-573324 kq3dbg
-574324 kq4dbg
-5747462 krishna
-5747836 kristen
-57478367 kristens
-57493299766 krgzdaxzson
-577 lss
-5778 kprt
-58 kt lt
-582237 lubber
-5822377 lubbers
-5824337 lucifer
-5824687 lucious
-5827422833 lubricated
-5829 lucy
-58343 judge
-58367 kudos
-58374 jueri
-584 jug lug
-58423 juice
-584236224463 juicemachine
-584237 juicer
-5844243 luggage
-58444 luigi
-584447 luigis
-5847 jugs
-5853 juke luke
-5853269 jukebox
-58543 julie
-585437 julies
-5855229 lullaby
-5862 jumb
-586237 lumber
-5862375225 lumberjack
-58624 lunch
-58643 lunge
-5864385 lungful
-586453 jungle
-5865 junk
-58657453 junkpile
-58659273 junkyard
-5867 jump
-586737 jumper
-5867464 jumping
-5873 lure
-5874 juri
-58749 juriy
-587537 lurker
-5875377 lurkers
-5878 just
-587846 justin
-587846353824 justinfletch
-5879 jury
-5883 jute lute
-5883269 jutebox
-58836453 juvenile
-593 lye
-59454 kwiki
-5974 jyri
-59742 lyric
-597427 lyrics
-598866 lytton
-599948 lxxxiv
-62 ma mc
-622 nab
-6223 mace
-6224 mach nach
-622426476 machanism
-6224383 machete
-6224436 machien
-6224463 machine
-62244633 machined
-62244637 machines
-622446379 machinery
-6225 mack
-62277437 mbarrier
-62287 occur
-62287268 occupant
-622872687 occupants
-62297 nabys
-623 oaf
-6232 nada
-62326 ocean
-623263 madame
-6233 made
-62342 nadia
-623663 mcfood
-6236756933 mcemployee
-6237 nads
-6237437 mcfries
-624 mag mai nah
-62429463 magazine
-624294637 magazines
-6243 mage maid
-624336 maiden
-62442 magic
-6244225 magical
-62442426 magician
-624443 maggie
-62449 maggy
-6245 mail nail
-6245269 mailbox
-624526937 mailboxes
-6245626 mailman
-62457 nails
-6246 maim main
-62462 magma
-624626273 mainboard
-624637263 mainframe
-624638 magnet
-62464269 mahogany
-624643437 magnifier
-6246439464 magnifying
-62468362623 maintenance
-624686 magnum
-62468973 mcintyre
-6247 mags
-624766 maison
-625 oak obj
-6252656 malcolm
-62526567 malcolms
-6253 make male
-625328 object
-625328483 objective
-6253287 objects
-62533 naked
-625336377 nakedness
-6253566 malekom
-6253688 makeout
-62537 maker makes males
-625377 makers
-625387 makeup
-625387548 makeupkit
-625464 making
-6254837283 obliterate
-6255 mall
-625538 mallet
-625663 malone
-626 mam man
-62617 man's
-6262 mama
-626243 manage
-6262437 manager
-62624377 managers
-62626 mambo
-62626626 manannan
-62627 mamas
-6263 mame name
-62637 names
-62637253 mandrake
-626375283 nameplate
-62638837 maneuver
-62643 mange
-626437 manger
-626453 mangle
-6264653 manhole
-6264785283 manipulate
-62649 mangy
-6266 mano
-62662 mamma
-626625 mammal
-626637846 mannequin
-626643 mannie
-62667 manor
-6267 mans
-6267466 mansion
-626825 manual
-6268257 manuals
-626835 mantel
-62683574323 mantelpiece
-626844387 mcnuggets
-626853 mantle
-62685373423 mantlepeice
-62685374323 mantlepiece
-626873 manure
-6269 many
-627 map mas nap
-6272 marc narc
-627253 marble
-627256 napalm
-62726 maran
-627268 mascot
-62726842 narcotic
-627268427 narcotics
-62728 mcrat
-627292 naraza
-6273426 mardian
-62737828466 observation
-6273783 observe
-62737837 observer
-6274 mash
-62742 maria mcrib
-62743 marge marie
-62743426 obsidian
-627448262 marihuana
-627458262 marijuana
-62747 mcrip oasis
-6275 mark mask
-62752676 marlboro
-62753 maple
-627533 marked
-627537 marker
-627538 market
-627546 napkin
-6275464 marking
-62754647 markings
-62757 marks
-62758 markt
-6276679 masonry
-6277 maps mass
-62772273 massacre
-6277243 massage
-62774 marsh
-62774243 marriage
-6277433 married
-6277464 napping
-6277483 massive
-627769 narrow
-62779 marry nappy
-6278 mart mast
-62782228 mastabat
-627822283 mastabate
-6278228 mastbat
-62782283 mastbate
-6278328 marteau
-627837 master
-6278372283 masterbate
-62783774323 masterpiece
-62784228 mastibat
-627842283 mastibate masticate
-6278426 martian
-627846 martin marvin
-6278464 martini
-627847 maquis
-6278487 martius
-62785587 marullus
-62787828 obstruct
-62788228 mastubat
-627882283 mastubate
-6278872283 masturbate
-627887228464 masturbating
-62789 nasty
-6279 mary
-628 mat nav
-62824 match
-628242665 matchbook
-62824269 matchbox
-6282437 matches
-628246 obtain
-6282478425 matchstick
-62824784257 matchsticks
-6282667 navcomp
-62826678837 navcomputer
-6283 mate
-62835 navel
-6283647 obtenir
-6283742 materia
-62837425 material
-62837487 materius
-628374877 materiuss
-6283883 navette
-628424933 naugahyde
-62844283 navigate
-6284428466 navigation
-628442846625 navigational
-628466 nation
-628483 native
-6284837 natives
-6285 maul
-6286787 octopus
-6287 oats
-6287277 matrass
-628765386 mausoleum
-628766 matron
-6288 matt
-628837 matter
-6288725 natural
-628873 mature nature
-62887377 mattress
-629 maw max may nay
-6293 maze
-62934353 mayfield
-6294 nazi
-6294256763455483 maxiclorofillite
-62943524 naziflag
-629435247 naziflags
-62946455466 maximillion
-62947 nazis
-62967 mayor
-6297 maxs
-6299355 maxwell
-63 md me ne of
-63222 mecca
-632369 meadow
-6323695263 meadowland
-632377279 necessary
-632377447 mebership
-6324 mech
-63242 mecha
-632426427 mechanics
-632426476 mechanism
-6325 meal neal neck
-63255223 necklace
-63257 meals neals
-6325843 necktie
-6327 near
-6327873 measure
-632787464 measuring
-6328 meat
-632827 nectar
-632832837 meateater
-6328328377 meateaters
-632852 nebula
-6328523 nebulae
-6328527 nebulas
-633 off
-6332255 oddball
-63325 medal
-633255466 medallion
-6333 need
-633353 needle
-63337 offer
-63337464 offering
-633377 offers
-6334225 medical
-6334228466 medication
-633423 office
-6334237 officer
-63342463 medicine
-6334548 medikit
-6334787 oedipus
-63348283 meditate
-6334828464 meditating
-6334828466 meditation
-633486 medium
-6337 odds
-63374668 offshoot
-6338 meet
-6338464 meeting
-633872 medusa
-6342 mega
-63422527837 megablaster
-63426 megan
-63428483 negative
-63444267 neighbor
-634442687 neighbour
-6344426877 neighbours
-634443 meggie
-634453 meggle
-634684283 negotiate
-6347 megs
-635 mel
-6352643 melanie
-635362485 melenchuk
-63547 nelis
-635543 nekkid
-635639 melody
-635667 melons
-636 mem men
-636237 member
-6362377 members
-6362377447 membership
-636243743 menagerie
-6363 mend
-6366 memo neon
-63667 memos
-6366726386 memorandum
-63667425 memorial
-636679 memory
-6367 mens
-6368 menu
-63687 menus
-6372 mesa
-63723337 mercedes
-637236279 mercenary
-63724263473 merchandise
-63724268 merchant
-6373 nerd
-63743 merge
-637439 nephew
-6376243 mermaid
-6377 mess
-6377243 message
-637724326273 messageboard
-63772437 messages
-637769 merrow
-63779 merry
-6378 merv nest
-63783 nerve
-6378863 neptune
-638 net
-63825 metal
-63825542 metallic
-638257 metals
-638367 meteor
-6383673 meteore
-638367483 meteorite
-6383677 meteors
-63837 meter never
-638376463 nevermind
-638463 method
-63876 metro
-6388464 netting
-638873 mettre
-639 new
-6394226 mexican
-6397 news
-639772737 newspaper
-6397727377 newspapers
-6398 newt next
-6399675 newyork
-64 oh
-642 mic
-642253 nibble
-6423 mice
-6424235 michael
-64243 niche
-6424435 michiel
-642487 nichts
-6425 mick nick
-642533 nicked
-642535 nickel
-6425357 nickels
-642539 mickey
-642567 mickos
-64257 micks
-64259 nicky
-64276 micro
-642762447 microchip
-6427672673 microscope
-6427674663 microphone
-64276776237767 microprocessor
-642769283 microwave
-6427692836836 microwaveoven
-643326 niddam
-643353 middle
-643438 midget
-6435 niek
-64357 niels
-643643 nienie
-643683 niente
-64387 niets
-64437 niger
-644453 niggle
-64448 night might
-64448464253 nightingale
-6444854448 nightlight
-64448544487 nightlights
-6444874233 nightshade
-6444878233 nightstaff
-6444878263 nightstand
-64448782637 nightstands
-6444878425 nightstick
-645 oil
-64515267 oil&lamp
-6452568 oilblot
-64525687 oilblots
-6453 mike ogle
-6453377425 oilderrick
-64533774257 oilderricks
-64535 mikel
-64539 mikey
-64548279 military
-6455 milk mill
-645574253 milkshake
-64557663 millpond
-6456267 oilmans
-64576327 oilsmear
-645768343 oilsmudge
-6457683437 oilsmudges
-6457768 oilspot
-64578246 oilstain
-645782467 oilstains
-64586937 oiltower
-645869377 oiltowers
-646287 nimbus
-6463 mind mine nine
-64637 miner mines
-6463725 mineral
-64637257 minerals
-646384 nineth
-6464 mini
-646428873 miniature
-64647837 minister
-6464887493 miniturize
-64648874937 miniturizer
-646488749464 miniturizing
-64652 ninja
-64652887853 ninjaturtle
-64667 minor
-64669462 minoxina
-64678735 minstrel
-6468 mint
-64683636 nintendo
-64686368 ointment
-646883 minute
-64688359 minutely
-64689 minty
-647 mir
-6472632 miranda
-64726847673 misanthrope
-647273268 miscreant
-6473 mire ogre
-64733632667 misdemeanor
-64737 miser
-647377 ogress
-64765 mirok
-647654 miroki
-647657 miroks
-6477 miss
-647747 missis
-647753 nipple
-6477537 nipples
-647767 mirror
-64776733 mirrored
-6477677 mirrors
-6478 mist
-6478262 nirvana
-647837 mister
-647853863 mistletoe
-64787 mists
-64787377 mistress
-64824 nitch
-648246 mitain
-648836 mitten
-649 mix
-64933 mixed
-64937 mixer
-649464 mixing
-6498873 mixture
-65 ok
-6529 okay
-653 old
-65322867493 olfactorize
-6533 olde
-65337 older
-6539 mkey okey
-653936539 okeydokey
-654387 olievr
-65483 olive
-65483645 oliveoil
-654837 oliver
-655 oll
-65736 olsen
-66 no on
-662 mob
-662245 nobail
-6624 noah
-662453 mobile
-66245362758 mobilemarkt
-66245374663 mobilephone
-662632 omanda
-662639 nobody
-6628 moat
-6629 moby
-663 moe one
-66314253 one-half
-6633 mode
-66335 model
-663357 models
-66337 onder
-663439 modify
-663538 omelet
-6636 mofo
-663853 module
-6642 ooga
-66473 noise
-6647362537 noisemaker
-66473625377 noisemakers
-664737 noises
-66478873 moisture
-66527 molar
-665277 molars
-6653 moke mold
-665333 molded
-6653624677 mokenchops
-665378 molest
-665543 mollie
-6656 mojo nolo
-6656868 molotov
-665836 molten
-6659 only
-666 mom non
-666278379 monastery
-66639 money
-66639224 moneybag
-666392547 moneyclip
-6664 mong mooh
-666437 monger
-666437382736 mongeretardo
-6664377382736 mongerretardo
-6664626 mongman
-6664735 mongrel
-6664837 moniter
-66648387 moniteur
-666483877 moniteurs
-6664867 monitor
-66648677 monitors
-6665 monk
-666524 moolah
-666539 monkey
-666539626 monkeyman
-6665397 monkeys
-6665437 monkies
-6666 moon
-66662 momma
-666643 moonie
-66665484 monolith
-66667 moons
-66669 mommy moony
-666697 mommys
-6667 moms
-66673 moose noose
-666734323 moosehead
-66673673 nonsense
-6667837 monster
-66678377 monsters
-6667873 monstre
-66678737 monstres
-666837 monter
-66684 month
-66686368 monument
-666863687 monuments
-667 mop
-6673 more nope nose
-66733 moped
-6674 nopi omri
-667426 morgan
-66743 norge
-667536 moslem
-667625 normal
-6676464 morning
-66766 moron
-6677 moss
-667737 mosses
-66774 morph
-667747 morris
-66778486 mosquito
-6678 most mort
-667825 mortal
-667827 mortar
-66784 north
-667843278 northeast
-667849378 northwest
-6678745 nostril
-6678926833 mostwanted
-667929 norway
-667934426 norwegian
-668 not
-66824 notch
-6683 move note
-66832665 notebook
-66835 motel novel
-66836 movem
-66836368 movement
-66837 notes
-6683723 notepad
-6684 moth
-668423 notice
-66842326273 noticeboard
-6684237 notices
-66843 movie
-668437 mother
-6684377 mothers
-6684377447 mothership
-6684464 nothing
-668464 moving
-668466 motion
-66847 moths
-66853 mould
-6686 onto
-66863 mound
-668637 mounds
-66867 motor
-6686729253 motorcycle
-66867292537 motorcycles
-66868 mount
-66868246 mountain
-668682467 mountains
-668682467433 mountainside
-668687 mounts
-66873 mouse
-66873723 mousepad
-668747 mourir
-6687474 nourish
-668782243 moustache
-6688246 moutain
-66882467 moutains
-66884 mouth
-66884385 mouthful
-669 now
-6693 ooze
-66937 mower
-669464 mowing
-669953 nozzle
-6699537 nozzles
-67 mr ms or
-672 npc orb
-672253 oracle
-672437872 orchestra
-672643 orange
-6726437 oranges
-6726763 osborne
-6728 orat
-673 ore
-67337 order
-673377 orders
-6736 open
-673633 opened
-6736464 opening
-6737283 operate
-67372846482253 operatingtable
-673728466 operation
-67372867 operator
-674 msg
-67426 organ
-67426476 organism
-674264767 organisms
-674264928466 organization
-674267 organs
-674276 orgasm
-6743423 orifice
-6746466 opinion
-67486 orium
-67626368 ornament
-676263687 ornaments
-677 mrs
-67767483 opposite
-6824 much
-6825 muck
-6825327 nuclear
-683 mud
-6832255 mudball
-6833 muff nude
-68339 muddy
-68343 nudge
-683489 nudity
-6836 oven
-6837 over
-6837255 overall
-68372557 overalls
-683726273 overboard
-68372628 overcoat
-683726287 overcoats
-6837328 overeat
-68374264 overhang
-68377277 overpass
-6837768 mudspot
-68377687 mudspots
-684 mug oui
-68437 other
-684377 others
-684438 nugget
-6844387 nuggets
-6847 mugs
-6853 mule
-685337 mulder
-68537 mules
-6855439 nullify
-685848833 multitude
-6858488337 multitudes
-686 mum
-686237 number
-6862377 numbers
-68624 munch
-686253 mumble
-6865337 munkees
-68662 mumma
-68669 mummy
-687 mur
-68725 mural
-687253 muscle
-687337 murder
-687386 museum
-6874 mush
-68742 music
-6874225 musical
-68742269 musicbox
-68742426 musician
-687424267 musicians
-68742752937 musicplayer
-68747666 mushroom
-687476667 mushrooms
-687546 muslim
-6877 murs
-68773 nurse
-6877379 nursery
-687743 nursie
-687749 murphy
-68782243 mustache
-6878873 nurture
-688 mut muu nut out
-688268 mutant
-6882687 mutants
-688348 outfit
-6883487 outfits
-68836677 outdoors
-68837 outer
-68845283 mutilate
-68846873 outhouse
-688538 outlet
-6887 nuts outs
-6887433 outside
-688743687 nutrients
-688747 ouvrir
-6888 mutt
-688866 mutton
-689953 nuzzle
-69 my nw ox
-69263676 mycoform
-692643 mycoid
-6936 owen oxen
-69367 owens
-695667 nylons
-696 own
-69629 nyoby
-69637 owner
-697353 myself
-697837 oyster
-6978377 oysters
-697842 mystic
-6984 myth
-699436 oxygen
-72 pc r2
-722248 rabbit
-722266 raccon
-7222666 raccoon
-7223 race
-72237 saber
-722435 rachel
-7224357 rachels
-7225 pack rack sack
-7225243 package
-72253 scale
-722538 packet racket
-7225464 scaling
-72257 sacks scalp
-7225735 scalpel
-72257464 scalping
-7225746456433 scalpingknife
-7225753 scalple
-722575464 scalpling
-72257546456433 scalplingknife
-72259 packy
-7226 scan
-7226637 scanner
-72266377 scanners
-72266464 scanning
-722666 racoon
-72268243 sabotage
-722722 scarab
-7227263686 sacramento
-72273 scape scare scarf
-722732769 scarecrow
-722733 sacred
-72274342425 sacrificial
-72278 pabst
-72279 scary
-723 pad raf sad
-7231 r2d1
-7232 r2d2
-72327 radar
-7233 safe
-7233464 padding
-723353 paddle
-7233766 saffron
-723389 safety
-72342623 radiance
-72342867 radiator
-72346 radio
-72346564 radiolog
-7234667 radioos
-723467 radios
-72346752937 radioplayer
-7234692837 radiowaves
-723478 sadist
-7235625 padlock
-72363 scene
-7236379 scenery
-72368 scent
-7237 pads
-7237873 sceptre
-7238 raft
-723837 rafter
-7238377 rafters
-724 rag
-7243 page sage
-724337 raider
-72433853 schedule
-724338537 schedules
-7243623 science
-724368478 scientist
-7243684787 scientists
-72437 pages
-7243724446 ragfraggin
-72437244464 ragfragging
-7245 pail rail sail
-72452628 sailboat
-7245464 railing
-72454647 railings
-724566437 schlonger
-724567 sailor
-7245677 sailors
-72457 rails
-72457626 sailsman
-7245796626 sailswoman
-7246 pain rain
-72462628 raincoat
-724626287 raincoats
-7246269 rainbow
-7246368 raiment
-724665 school
-7246657 schools
-72468 paint saint
-7246824477 paintchips
-724683 sainte
-7246833 painted
-72468464 painting
-724684647 paintings
-72468562 paintjob
-7247 pair rags
-72473 raise
-724733 raised
-724744 rairgh
-7247467 raisins
-7247767 scissor
-72477677 scissors
-72488737 pcitures
-725 sal
-725223 palace
-7252237 palaces
-72523 salad
-725233 salade
-7252337 salades
-725237 salads
-725269 salamy
-7252837 palaver
-7253 rake sale
-72537 sales
-7253725375 salesclerk
-72537626 salesman
-72537636 salesmen
-7253784464 salesthing
-7256 palm
-725637 palmer
-725666 saloon
-72567 palms
-72568733 palmtree
-725687337 palmtrees
-7258 raju salt
-72588284667 salutations
-725892837 saltwater
-726 pan ram ran sam san sao
-72622783 pancarte
-7262437 rancher
-726253 ramble
-726262 panama
-72628439 sanctify
-7263 pane rand same sand
-726325 sandal
-7263257 sandals
-726334 samedi
-72634 sandi
-72635 panel
-726355464 panelling
-726357 panels
-7263672 pandora
-726367217 pandora's
-72636727 pandoras
-72637 panes rands
-726372 sandra
-72639 sandy
-72639424 sandwich
-7264 sang
-72642 panic
-72643 range
-726437 ranger
-72648279 sanitary
-726623 sconce
-7266328 panneau
-726637 panner
-7266464 panning
-72667 scoop
-72668 scoot
-7266837 scooter
-72668377 scooters
-72669 sammy
-7267 pans ramp
-726724 scorch
-7267246275 scorchmark
-72673 scope score
-72674538 pamphlet
-726745387 pamphlets
-7267464 ramping
-726753 sample
-7267537 samples
-7268 pant
-72682 santa
-726824 scotch
-72682547 raotalis
-726825477 raotaliss
-7268437 panties
-72686 santo
-72687 pants scour
-726879 pantry
-72688 scott scout
-727 pas pbr pcs rap sap sas
-7272 papa
-727224883 parachute
-727235 parcel
-72724 sarah
-727246368 parchment
-72725535 parallel
-7272622 saranac
-72726253 scramble
-72726742487 sarcophagus
-72727 papas scrap
-727273 scrape
-7272737 scrapes
-7272738 parapet
-72727483 parasite
-727274837 parasites
-727277 scraps
-7272824 scratch
-727282437 scratches
-7273 rape
-727326 scream
-727326464 screaming
-7273267 screams
-727336 screen
-7273367 screens
-727368 parent
-7273687 parents
-72737 paper papes
-727372547 paperclip
-727377 papers
-727379675 paperwork
-72739 screw
-7273933 screwed
-72739374837 screwdriver
-727393748377 screwdrivers
-72739464 screwing
-727397 screws
-7274 pash raph
-7274235 raphael
-72743 sarge
-727433 rapide
-727436 sarien
-7274367 sariens
-727437 rapids
-7275 park
-727537 parker parler
-7275387 parleur
-7275464 parking
-727567 parlor
-727655 scroll
-7276557 scrolls
-7277 pass
-72772273 passcard
-72772377437 raspberries
-727723779 raspberry
-7277243 passage
-7277243929 passageway
-7277273552 sasparella
-727737 parser
-72774473 sapphire
-727746628359 passionately
-7277539 parsley
-727768 parrot
-7277687 parrots
-72777678 passport
-72779673 password
-7278 part past
-72782 scrub
-7278253 partake
-72783 paste
-727848466 partition
-7278637 partner
-727867 pastor
-7278673 pastore
-72787 parts
-727879 pastry
-7278846473 scrutinise
-7278846493 scrutinize
-7278873 pasture
-72788737 pastures
-72789 party
-728 pat rat
-72822 scuba
-728237 saucer
-72824 patch
-72826 satan
-7283 save rate
-7283548833474 satelittedish
-728355483 satellite
-7283554837 satellites
-72836 raven
-72836368 pavement
-728363687 pavements
-728367 ravens
-7284 path
-72843842 pathetic
-72846 patio
-728463 ravine
-7284637 ravines
-728464 saving
-7284647 savings
-728466 ration
-7284667 rations
-72847 paths
-7284929 pathway
-7285 paul saul
-72855379 scullery
-728559 scully
-72857 sauls
-728578873 sculpture
-72858 sault
-7286 scum
-7287 rats
-7287243 sausage
-72872437 sausages
-72873 pause
-728765 patrol
-7287652568 patrolalot
-7287655464 patrolling
-728765626 patrolman
-728766 patron
-7287667 patrons
-728797 patsys
-72883427337 sauvegarder
-7288376 pattern
-72883767 patterns
-728853 rattle
-7288537 rattler
-72885376253 rattlesnake
-72889 patty
-72897 satyr
-729 paw pay ray saw sax say
-72924325 paycheck
-72937 payer
-7294433 rawhide
-72946773 sawhorse
-729486 raygun
-7294867 rayguns
-7296 pawn
-7296368 payment
-7296455 sawmill
-729674663 saxophone
-72967466478 saxophonist
-7297 rays
-72974663 payphone
-729843 scythe
-73 rd se sf
-732 pda pea sea
-73223 peace
-73224 peach reach
-732253 pebble
-7322537 pebbles
-7322625 peacock
-73226257 peacocks
-73228466 reaction
-7322867 reactor
-7323 read
-73231688 read-out
-732316887 read-outs
-7323222 rebecca
-7323446 rebegin
-7323464 reading
-7323478 receipt
-7323483 receive
-73234837 receiver
-73235 rebel
-732357 rebels
-732368 recent
-7323688 readout
-73236887 readouts
-732377 recess
-7323782253 receptacle
-7323784225 receptical
-732378466 reception
-732378466478 receptionist
-73239 ready
-73243837 reciever
-73246773 seahorse
-732473 recipe
-7324737 recipes
-732483 recite
-7324855 seagull
-73248557 seagulls
-7325 peak peal peck seal
-732537 pecker
-732559 really
-73257 peaks
-7326 sean
-732626 seaman
-732663 second
-73266664837 reconnoiter
-732668 reboot
-732673 record
-73267337 recorder
-732673464 recording
-732673752937 recordplayer
-7326787377 seamstress
-732688 peanut
-7326887 peanuts
-7327 pear peas rear
-732724 search
-7327263 seasame
-7327268 peasant
-73272687 peasants
-7327328437 rebreather
-7327363 rearend
-732737 reaper
-732738 secret
-732738279 secretary
-7327387 secrets
-73274355 seashell
-73274673 seashore
-73275 pearl
-732766 reason
-7328 peat seat
-73282358 seatbelt
-732833 seated
-7328466 section
-732867 sector
-73287 seats
-732873 secure
-7328748437 securities
-73287489 security
-732925464 recycling
-73292837 seawater
-7329333 seaweed
-733 see red pee
-73326 sedan
-7333 reed seed
-733336 redeem
-733337 reefer
-733353 peddle
-73337 reeds seeds
-73337825 pedestal
-733378257 pedestals
-733378665 pedestool
-7335 peek peel reel seek
-7335328 reflect
-7335328466 reflection
-7335328483 reflective
-733532867 reflector
-7336 redo seem
-733626 redman
-7337 peep peer
-73373746368 refreshment
-733737463687 refreshments
-7337434372867 refridgerator
-733744372867 refrigerator
-73374653 peephole
-733823 reduce seduce
-73383537 refueler
-733873 refuse
-734 peg
-73425 regal
-73426273 pegboard
-73427337 regarder
-734453 peggle
-734466 region
-73447837 register
-734478728466 registration
-73467 reins
-7347 pegs
-734738 regret
-7348527 regular
-734852867 regulator
-734874482867 regurgitator
-73493 seize
-735283 relate
-73528464 relating
-73528466 relation
-735284667 relations
-73529 relax
-7353 self
-7353273 release
-735328 reject select
-735328466 selection
-7354226 pelican
-735433 relief
-7354383 relieve
-73544466 religion
-735444687 religious
-7355 sell
-735537 seller
-735538 pellet
-7355387 pellets
-7355464 selling
-7356 relm
-73562283 relocate
-735623 reload
-7358 pelt
-735842 pelvic
-735847 pelvis
-736 pen
-736245 pencil
-7362457 pencils
-736246 remain
-7362467 remains
-736275 remark
-7363 send
-7363268 pendant
-7363398687 rendezvous
-73638586 pendulum
-736387283 penetrate
-73638728466 penetration
-7364 seng
-73647 penis
-7366 peon reno
-73662687 remnants
-7366437 pennies
-736683 remote remove
-73669 penny
-7367 pens
-73673 sense
-736753 people
-7367537 peoples
-736767 sensor
-7367677 sensors
-7368 rent sent
-73684368 sentient
-736843687 sentients
-73684635 sentinel
-736846357 sentinels
-736846873 penthouse
-7368486 pentium
-73687437 sentries
-736879 sentry
-736886 pentum
-737 pep
-73723483 perceive
-73724 perch
-737247 repair
-737263 sesame
-73727283 separate
-737278 repast
-737283 rescue
-7372837 rescuer
-73728377 rescuers
-73729 percy
-73732724 research
-7373642 serenia
-73736728466 perforation
-7373676 perform
-737367637 performer
-7373676377 performers
-73737828466 reservation
-7373783 reserve
-737378647 reservoir
-73738 reset
-7373863 perfume
-737425 serial
-73743268 sergeant
-737433623 residence
-73743368 resident
-737446 resign
-7374634225 periodical
-73746342257 periodicals
-7374687 serious
-7375223 replace
-73752236368 replacement
-737542283 replicate
-7375422837 replicates
-73754228464 replicating
-7375422867 replicator
-73759 reply
-7376 repo
-7376748466 reposition
-737678 report
-7377 pepp
-7377328 respect
-7377368 serpent
-737737 pepper
-73773736828466 representation
-73773736828483 representative
-7377376468 peppermint
-7377377 peppers
-73774 pepsi
-7377426 persian
-737747 pepsis
-7377472867 respirator
-737766 person
-73776625 personal
-7377667 persons
-73776674245489 responsibility
-73776674253 responsible
-737774728466 perspiration
-73777473 perspire
-73779 peppy
-737797 peppys
-7378 pest rest sert
-7378268 servant
-7378278 restart
-7378287268 restaurant
-737828737 restaurer
-73783 serve
-737837 server
-7378378 pervert request
-7378423 service
-73784237 services
-7378453 reptile
-7378464 resting
-737852437 sepulcher
-737853 pestle
-7378673 restore
-73787 pests
-7378724637 restrainer
-737872466368 restrainment
-737872468 restraint
-737873 peruse
-73787666 restroom
-737877328 resurrect
-737877328466 resurrection
-7378872868 resturaunt
-738 pet set
-73825 petal
-738257 petals
-738273 retard
-7382736 retardo
-7383 pete
-738325 reveal
-73833 setee
-73835 revel
-73836 seven
-738368336 seventeen
-7383684 seventh
-73837 peter petes sever
-738373 severe
-7383733 severed
-73837363 reverend
-7384367 reviens
-738456 revilo
-7384656 reviolo
-738473 retire
-738483 revive
-7386583 revolve
-73865837 revolver
-738658377 revolvers
-7387 petr
-7387328 retreat
-738743825 retrieval
-73874383 retrieve
-73879 retry
-738833 settee
-738837 petter
-73883733738837 peuterdepeuter
-7388536368 settlement
-738863 retune
-738876 return
-73887637 returner
-738876464 returning
-7388767568 returnslot
-739 pew sex
-739273 reward
-73937 sewer
-739464 sewing
-7397 pews
-7397483 rewrite
-739825 sexual
-7398268 sextant
-7399 sexy
-74 pg
-742 pic rib sic
-7422243 ribcage
-742229 shabby
-742233 ribbed
-74225 shack
-7422553 shackle
-74225537 shackles
-742257 shacks
-742266 ribbon
-7423 rice
-74233 shade
-742337 shades
-742369 shadow
-7423697 shadows
-74238 shaft
-7424 rich shag
-7424273 richard
-74244 shagg
-7425 pick sick
-7425229 sickbay
-742529 pickax
-7425293 pickaxe
-74253 shake
-74253773273 shakespeare
-742538 picket
-74253837 picketer
-742538377 picketers
-742553 pickle
-742587 pickup
-74263 shame
-74266 piano
-7426766 shampoo
-742689 shanty
-7427 pics ribs
-7427264 pharaoh
-74273 phase shape shard share
-742737 phaser
-7427374438 shapeshift
-7427377 phasers
-74275 shark
-742757 sharks
-742767 phasor
-74277 sharp
-7427736 sharpen
-742773633 sharpened
-74283 shave
-7428464 shaving
-742846427326 shavingcream
-74286 shaun
-742869 shauny
-7428837 shatter
-7428873 picture
-74288737 pictures
-742926 shazam
-74293 phaze
-742937 phazer
-742967 phazor
-743 pie rid she
-74323 piece
-74323278 shebeast
-743237 pieces
-74327 shear
-743277 shears
-743284 sheath
-7433 ride shed side
-743328767 sideburns
-743337825 piedestal
-743353 piddle
-74337 sheep sides
-74338 sheet
-743387 sheets
-74339255 sidewalk
-743392557 sidewalks
-7433946337 sidewinder
-74343 ridge
-74345 sheik
-743453 sheild
-743464 riding
-74353 rifle shelf
-743537 rifles shelfs
-74355 shell
-743557 shells
-743583 shelve
-7435837 shelter shelves
-74358464 shelving
-7436 rien
-7437 pier pies
-7437433 sheriff
-74374337 sheriffs
-743772 sierra
-743773 pierre
-7437766 pierson
-743782 siesta
-7438 rift
-744 pig rig
-74435 pihel
-744352 shiela
-744353 shield
-744366 pigeon
-7443664653 pigeonhole
-74436646537 pigeonholes
-74438 shift
-744443 piggie
-7444464 rigging
-74448 right sight
-74448464 sighting
-744487 rights
-7445 phil
-744538 piglet
-744547 philip
-74454773 philippe
-7445535244 shillelagh
-7445547 phillip
-74455473 phillipe
-74455477 phillips
-74456767437 philosopher
-744587 philup
-7446 shin sign
-744625 signal
-744628873 signature
-74463 shine
-744637 shines
-7446453 shingle
-74464537 shingles
-7446464 shining
-7446637 shimmer
-7446637464 shimmering
-74466377 shimmers
-74467 signs
-74467678 signpost
-74469 shiny
-7447 rigs ship
-74476368 shipment
-744763687 shipments
-74477 ships
-74478 shirt
-744797325 shipwreck
-7447973257 shipwrecks
-744873 sigurd
-7448737 sigurds
-7453 pike pile
-745337 pilfer
-7453623 silence
-74536859 silently
-745464 piling
-7454746 pilgrim
-7455 pill silk
-745527 pillar
-7455277 pillars
-745569 pillow
-7455697 pillows
-74557 pills
-74566437 shlonger
-74568 pilot
-745687 pilots
-7458 silt
-745837 silver
-746 pin rio
-7462 pina
-74624 pinch
-74625 shock
-7463 pine shoe
-74637 shoes
-746374463 shoeshine
-7463765474 shoepolish
-74639 rhody
-7464 ring sing
-74643 singe
-746437 ringer singer singes
-7464377 singers
-7464464 ringing
-7464527 similar
-74647 rings
-7465 pink sink
-74657 sinks
-74658 pinku
-746586 pinkun
-74662 rhomb
-74662253 pinnacle
-74663 phone
-746632273 phonecard
-746632427437 phonecharger
-746632665 phonebook
-7466326684 phonebooth
-746632686837 phonecounter
-746636862377 phonenumbers
-746637 phones
-74667 simms
-74668 shoot
-7466837 shooter
-74668377 shooters
-7467 pimp shop
-74673 rinse shore
-746753 simple
-7467533737 shopkeeper
-74677 shops
-746773 shoppe
-7467737 shopper
-74677464 shopping
-74678 short
-746787 shorts
-7468 shot
-74683 shove
-746835 shovel
-7468357 shovels
-746845277 shotglass
-7468486 shotgun
-74686 photo
-74686267437 photocopier
-7468647274 photograph
-74686472747 photographs
-746867 photos
-74688 shout
-7469 show
-74693 rinze
-746937 shower
-746937435 showergel
-7469377 showers
-747 rip sip sir
-747283 pirate
-7472837 pirates
-7473 pipe rise
-74735463 pipeline
-747354637 pipelines
-74736 siren
-747367 sirens
-74737 pipes
-7474 pipi
-747426 sirian
-7474267 sirians
-747435 shriek
-747435464 shrieking
-7474357 shrieks
-74746 pipin
-747463 shrine
-747464 piping
-747465 shrink
-747466 siphon
-747467 shrimp
-7474677 shrimps
-7474679 shrimpy
-747666 shroom
-7476667 shrooms
-747683 shroud
-7477 piss shsr
-747733 pissed ripped
-74774 pippi
-74782 shrub
-74782237437 shrubberies
-747822379 shrubbery
-747827 shrubs
-747837 sister
-7478377 sisters
-747865 pistol
-7478657 pistols
-747866 piston
-7478667 pistons
-7478672683 ristorante
-748 pit sgt sit
-7482272 rhubarb
-74824 pitch
-7482437 pitcher
-74824377 pitchers
-7483 site
-74833 shuff
-74837 river
-748372265 riverbank
-748377 rivers
-74866637 pitonner
-7488 shut
-7488283 situate
-74883696 shutdown
-7488837 shutter
-74888377 shutters
-7488853 shuttle
-74888537 shuttles
-7488853763 shuttlepod
-749 six
-7493 size
-74943 pixie
-74963 rhyme
-74974225 physical
-749742426 physician
-7497427 physics
-7498336 sixteen
-74984 sixth
-749846 rhythm
-749893433 sixtyfife
-749893483 sixtyfive
-749896463 sixtynine
-74992 pizza
-74992488 pizzahut
-74993742 pizzeria
-75 pj rl
-7522 slab
-7522273 placard
-75222737 placards
-75223 place
-7522326 placebo
-752237 placer places
-752257 slacks
-75243 plaid
-75246 plain
-752467 plains
-7526 plan slam
-75263 plane
-752638 planet
-75263827486 planetarium
-7526387 planets
-75265 plank
-752657 planks
-7526637 slammer
-75268 plant
-7526837 planter
-75268377 planters
-752687 plants
-7527 plas slap
-75274 slash
-7527437 slashes
-752762 plasma
-752783 plaque
-7527837 plaques
-7527842 plastic
-7528 slat
-75283 plate slave
-7528328 plateau
-75283676 platform
-752837 plates skater slaves
-752844837 slaughter
-75286 plato
-75287 slats
-7528837 platter
-75288377 platters
-75288676 platvorm
-7529 play slay
-75292 plaza
-752937 player
-7529377 players
-75294475 playgirl
-7529464 playing
-7529476863 playground
-752962537 playmaker
-75323 plead
-753273 please
-75327873 pleasure
-753299 sleazy
-7533 sled
-753343 sledge
-753343426637 sledgehammer
-75337 sleep
-75337464 sleeping
-75353866 skeleton
-753538667 skeletons
-753824 sketch
-754 ski
-75423 slice
-75433 slide
-7543464 sliding
-75437 skies
-7545538 skillet
-75455387 skillets
-7546 skim skin
-754627326 skincream
-75463 slime
-75464 pling sling
-754647468 slingshot
-75465 slink
-7546637 skimmer
-754684 plinth
-7547 skip slip
-7547737 skipper slipper
-75477377 slippers
-75478 skirt
-7548 slit
-75488437 skivvies
-7566437 plonger
-75673 slope
-756737 slopes
-7568 plot slot
-756844 plough slough
-75687 pjotr plots slots
-7569 plow slow
-756937 slower
-756959 slowly
-75825 pluck
-758343 sludge
-7584 plug slug
-75847 slugs
-7585 rlul
-75855 skull
-758557 skulls
-7586 plum
-7586237 slumber
-75862464 plumbing
-758643 plunge
-7586437 plunger
-75865 plunk
-7587 plus
-75877 slurp
-7588 slut
-759 sky
-75954448 skylight
-7595463 skyline
-7597272737 skyscraper
-75972727377 skyscrapers
-76 so
-762 rob
-762237 robber
-7622372255 soccerball
-7622379 robbery
-76224 roach snach
-76225 smack snack
-762257 snacks
-7623 road robe
-762325625 roadblock
-76237 roads robes sober
-762378 robert
-7623929 roadway
-7624 snag
-762425 social
-76243 poche roche
-762437 rocher roches
-7624389 society
-76245 snail
-76246 robin
-7625 rock soak sock
-76253 snake
-762537 rocker snakes
-762537546 snakeskin
-762538 pocket rocket socket
-7625382665 pocketbook
-7625387 pockets rockets
-7625464 rocking
-76255 small
-7625537 smaller
-76257 rocks socks
-76257453 rockpile
-7626 roam
-76268 robot
-7626842 robotic
-7626848273 robotguard
-762687 robots
-7627 snap soap
-76272837 socrates
-76273 snare
-76274 smash
-76274389 sobriety
-76277 soaps
-76278 roast
-762824 snatch
-76287 pocus
-763 pod rod sod
-7632 soda sofa
-76325 sneak
-7632537 sneaker
-76325377 sneakers
-76327 smear sofas
-7632767 sodapop
-763277 smears
-763368 rodent
-76336862 rodentmc
-763368626844387 rodentmcnuggets
-763393 sneeze
-76344464 smegging
-76347 rmdir
-763486 podium
-76355 smell
-763559 smelly
-7636 poem
-76366493 sodomize
-7637 pods rods
-7638 soft
-76383637 softener
-763837465 softdrink
-7638374657 softdrinks
-763862842 pneumatic
-763879 poetry
-76389 softy
-76389273 software
-7642 soga
-76433 sniff
-76437 roger
-7643837 snifter
-7645 soil
-76453 smile
-764533 soiled
-764543 smilie
-7645464 smiling
-76459 smily
-76468 point
-764689 pointy
-76473 snipe
-764737 sniper
-76475 smirk
-764766 poison
-76476633 poisoned
-76477 snips
-7647737 snipper
-76477377 snippers
-76483 rogue smite
-764837 rogues
-76484 smith
-764849 smithy
-765 rol
-76527 solar
-7653 poke pole
-7653437 soldier
-76534377 soldiers
-7653626 poleman
-7653666 pokemon
-76536662655328466 pokemoncollection
-76537 poker poles
-765423 police
-765423626 policeman
-765423636 policemen
-7654248 solicit
-76543 solid
-765474 polish
-765484225 political
-76548427 politics
-7655 roll
-765533 rolled
-765536 pollen
-765537 roller
-76553726837 rollercover
-7655464 rolling
-7655867 rolltop
-765588466 pollution
-76567 rojos
-765722 solrac
-76583 solve
-76588466 solution
-766 poo ron son
-76624 pooch
-766253 ronald
-7662623 romance
-76627376 sombrero
-7663 pond poof roof some
-7663464 roofing
-76637 roofs
-7663837 poofter
-766384464 something
-7663867 rooftop
-7664 pooh song
-76642 sonia sonic
-76642327 poohbear
-76647 songs
-7665 pool
-76653 smoke
-766533 smoked
-766537 smoker smokes
-7665378225 smokestack
-766574275 poolshark
-7665742757 poolsharks
-7665752937 poolplayer
-76657529377 poolplayers
-766578425 poolstick
-766582253 pooltable
-7666 room smoo soon
-766624 smooch
-766637 pommes
-7666537 snooker
-76667 rooms snoop
-766684 smooth
-76669 sonny
-766693 snooze
-7667 poop poor romp sons
-766738358 roosevelt
-76678 snort
-7667837 rooster
-7668 root soot
-76682337 rootbeer
-766823377 rootbeers
-766843 soothe
-76687 roots
-76687453 sootpile
-7669 pony snow
-7669227853 snowcastle
-766926273 snowboard
-766926273464 snowboarding
-766935253 snowflake
-76694668377 snowhooters
-766946873 snowhouse
-7669626 snowman
-76697266837 snowscooter
-766972668377 snowscooters
-76697827 snowstar
-766978277 snowstars
-767 pop pos
-76723737 sorcerer
-7672379 sorcery
-76724 porch
-767279 rosary
-7672873 porcure
-7673 rope rose sore
-7673523337 ropeladder
-7673552 rosella
-76736279 rosemary
-76737 ropes roses
-767377 posess
-7673882 rosetta
-76748466 position
-7675 pork
-767674342 soporific
-76773 posse
-7677377 possess
-76773774667 possessions
-76774253 possible
-76774343 porridge
-7677437 poppies
-76776473 porpoise
-76779 poppy sorry
-7678 port post sort
-76782253 portable
-767825 portal
-7678257 portals
-7678269 postbox
-7678285547 portcullis
-76783 porte
-767837 porter portes poster
-7678377 posters
-7678426 portico
-7678437 portier
-76784653 porthole
-767846537 portholes
-767847 sortir
-7678626 postman
-76786275 postmark
-7678627837 postmaster
-7678633423 postoffice
-76787 ports posts
-76787248 portrait
-767872487 portraits
-7678786 rostrum
-768 pot
-76824 pouch
-7682437 pouches
-768283 rotate
-768286 potato
-7682863 potatoe
-76828637 potatoes
-768328 poteau
-76833 snuff
-768343 smudge
-7683437 smudges
-7684 snug
-7684323 pothead
-76844 rough
-76844288 roughcut
-7684453 snuggle
-768466 potion
-7685 soul
-7685879 poultry
-76863 pound round sound
-768632527837 soundblaster
-768637 rounds sounds
-76867 rotor
-7687 pots pour soup sous
-768723 source
-76873 rouse smurf soupe
-768747 souris
-76883 route
-768833 rotted
-768836 rotten
-768837 potter routes
-76884 south
-768843278 southeast
-768849378 southwest
-76889 potty
-769 row roy
-7692628 rowboat
-76926287 rowboats
-769337 powder
-76933733 powdered
-769337346437 powderfinger
-7693379 powdery
-76937 power
-769377 powers
-772 spa
-77223 space
-772232665437 spacecookies
-7722327238 spacecraft
-77223626 spaceman
-772237447 spaceship
-772237488853 spaceshuttle
-77223762538 spacerocket
-772237848 spacesuit
-7722378487 spacesuits
-7722425 spacial
-77228423 practice
-772324 sq2dbg
-77233 spade
-7724 pr24
-772473 praise
-7724743 prairie
-77247437 prairies
-77256 psalm
-7725623 psalm23
-772567 psalms
-77256723 psalms23
-7726 pram
-7726474 spanish
-77265 spank
-7726637 spanner
-77273 spare
-77275 spark
-7727553 sparkle
-77275537 sparkles
-772755464 sparkling
-7727559 sparkly
-772757 sparks
-7727599263 sparkywand
-7727769 sparrow
-7727842 spastic
-7728425 spatial
-77284253 spatiale
-7728852 spatula
-7729 pray spaz
-77296 prawn
-77299 spazz
-772992 spazza
-773 sq3
-773224 preach
-77322437 preacher
-773233464 preceding
-77324 pqdbg
-7732425 special
-77324626 speciman
-77324636 specimen
-773246367 specimens
-77324687 precious
-773247423 precipice
-77325 speak
-7732537 speaker
-77325377 speakers
-77327 spear
-773276468 spearmint
-773277 spears
-773282253 spectacle
-77328225345277 spectacleglass
-7732822537 spectacles
-7732837 specter
-77328377 specters
-7732873 spectre
-77333 speed
-773339 speedy
-77355 spell
-773552665 spellbook
-773557 spells
-77363 spend
-7736373 prendre
-7737273 prepare
-773727478466 prescription
-7737368 present
-773736828466 presentation
-773743368 president
-7737433687 presidents
-77376 sperm
-77377 press
-773772273 presscard
-773773 presse
-77377873 pressure
-7738 pret
-77384687 previous
-7738735 pretsel
-7738745 pretsil
-7738753 pretsle
-773889 pretty
-7739 spew
-774 pri
-77423 price spice
-774237 spices
-774237225 spicerack
-77424686 sphagnum
-77425 prick
-774337 spider
-7743372248 spiderbait
-7743377 spiders
-774337932 spiderweb
-774373 sphere
-774378 priest
-774378377 priestess
-7743787 priests
-774468 spigot
-774469 sphinx
-77453 spike
-774537 spikes
-77455 spill
-77459 spiky
-7746 spin
-774623 prince
-7746237 princes
-77462377 princess
-774624725 principal
-774625 spinal
-77463 spine
-77467489 priority
-77468 print
-7746837 printer
-77468464 printing
-774725 spiral
-77473 spire
-774748 spirit
-7747487 spirits
-77476 prism
-774766 prison
-77476637 prisoner
-7747667 prisons
-7748 spit
-7748283 private
-7748853 spittle
-77493 prize
-77496 prizm
-775274 splash
-775433 spliff
-77548 split
-77622253 probable
-77623 probe
-7762333 proceed
-7762377 process
-776237737 processes
-7762377464 processing
-776237767 processor
-7762536 problem
-7762873 procure
-7763 prod rsoe
-7763337 proffer
-776348 profit
-7763823 produce
-77638237 producer
-7764726 program
-7764726633 programmed
-7764726637 programmer
-77647267 programs
-77647377 progress
-7765328466 projection
-77653284667 projections
-776625 promak
-77663 spoof
-776636233 promenade
-7766384387 prometheus
-776643 sponge
-77665 spook spool
-776657 spooks
-776659 spooky
-77666 spoon
-77666385 spoonful
-776663857 spoonfuls
-776667 spoons
-77673 prose spore
-776732327464 sporebearing
-776735 propel
-776735537 propeller
-7767355377 propellers
-776737 spores
-77673789 property
-7767438 prophet
-776749522842 prophylactic
-7767495228427 prophylactics
-77676725 proposal
-7767673 propose
-77676748466 proposition
-776784 prosti
-7767848883 prostitute
-77678488837 prostitutes
-776787 sports
-776787283 prostrate
-7768 spot
-7768328466 protection
-7768328483 protective
-7768378 protest
-776837837 protester
-7768378377 protesters
-7768433 provide
-7768474667 provisions
-77687 spots
-77688 spout
-77729 spray
-777323 spread
-77736437 sprenger
-77744 sprig
-777464 spring
-77746553 sprinkle
-777465537 sprinkler
-7774655377 sprinklers
-777465537797836 sprinklersystem
-777468 sprint
-777483 sprite
-7774837 sprites
-777688 sprout
-777823 spruce
-778273 square
-778274 squash
-77828 squat
-7783393 squeeze
-77843 squid
-778437 squids
-778474 squish
-77847735 squirrel
-778477357 squirrels
-778478 squirt
-778499 squizz
-77877435 squrriel
-779 pry spy
-779227 prybar
-77945277 spyglass
-7794653 spyhole
-78 st sv
-782 pub rub
-7822 stab
-78223 stace
-782237 rubber
-7822377 rubbers
-78223775268 rubberplant
-782239 stacey
-7822397 staceys
-7822474 rubbish
-78225 stack
-782253 rubble stable
-78229 stacy
-782297 stacys
-7823 quad rube
-78233 staff
-78237 pubes
-7823726453 quadrangle
-7823745283725 quadrilateral
-7824 such
-78242 pubic
-78243 stage
-7824326224 stagecoach
-78245 quail
-78246 stain
-7824633 stained
-78246473 quagmire
-782467 stains
-78247 stair
-782472273 staircase
-782477 stairs
-782477837 stairstep
-7824778377 stairsteps
-78247929 stairway
-782479355 stairwell
-7825228483 stalactite
-78252284837 stalactites
-7825246483 stalagmite
-78252464837 stalagmites
-78252484837 stalagtites
-78253 stake
-782537 stakes
-782542 public
-782542493 publicize
-782547437 publisher
-7825474464 publishing
-7825489 quality
-78255 stalk stall
-782553 suckle
-782557 stalls
-78263 stand
-78263273 standard
-78263377 standers
-78263464 standing
-782637 stands
-78263743 submerge
-78263773 submerse
-782648 submit
-7826539 stanley
-78267 stamp
-782692 stanza
-7827 star
-78272273 starbase
-782727238 starcraft
-78273 stare
-78273474 starfish
-78274 stash
-78276362 subpoena
-782763627 subpoenas
-78277 stars
-78277447 starship
-78278 start
-782782623 substance
-7827833 started
-7827837 quarter
-78278372225 quarterback
-78278377 quarters
-782784888466 substitution
-7828 stat
-78283 state
-782836368 statement
-7828363687 statements
-7828466 station
-78284667 stations
-7828478427 statistics
-78287 stats
-782883 statue
-7828837 statues
-782883883 statuette
-782887 status
-7829 ruby stay
-782929 subway
-78325 steak steal
-783257 steaks
-78326 steam
-7832637 steamer
-783267447 steamship
-7832674477 steamships
-78327464 stearing
-7833 puff rude
-783326 stefan
-783336 sudden
-783337 rudder
-78335 steel
-783353 puddle ruffle
-7833537 puddles
-78336 queen
-78337 queer steer
-78337464 steering
-7833753 steeple
-783377 steers
-78339 puffy
-783522844 stelbaugh
-7836 stem sven
-783624 quench stench
-7836633 stemmed
-78367 stems
-7837 step suer
-78372322895 pteradactyl
-783727287 pterasaur
-783736 stereo
-783736797836 stereosystem
-78374 steph
-783742643 stephanie
-783745493 sterilize
-7837523337 stepladder
-7837643 steroid
-78376437 steroids
-783767287 pterosaur
-78377 steps
-78377464 stepping
-78378 quest
-78378466 question
-78379 query
-78383 steve
-783836 steven
-7839 stew
-7839728 stewrat
-784 rug
-7842433 suicide
-78425 quick stick
-7842537 sticker
-78425377 stickers
-78425378 quickest
-784254 quicki
-7842543 quickie
-7842559 quickly
-784257 sticks
-784257263 quicksand
-784259 sticky
-78427 sugar
-78433 stiff
-78433356 stiefeln
-784334 stiffi
-7843343 stiffie
-784337 stiffs
-784339 stiffy
-78438 quiet
-7844378466 suggestion
-78454 quiki
-78455 still quill
-78458 quilt
-784587 quilts
-7846 ruin
-78465 stink
-7846546 stinkin
-78465464 stinking
-784659 stinky
-78466 quinn
-78467 ruins
-7847 rugs stir
-7847737 stirrer
-78477377 stirrers
-7848 puit quit suit
-78482273 suitcase
-784824 stitch
-78483 quite suite
-78487 puits suits
-7848837 quitter
-7853 puke rule
-78533 puked
-78535463925537 pukelinewalker
-78537 ruler rules
-785387 sulfur
-7855 pull rull
-78552673 pullcord
-785539 pulley
-78573 pulse
-78573729 pulseray
-785737297 pulserays
-7857374353 pulserifle
-78573743537 pulserifles
-785748 pulpit
-786 rum run sun
-7862284464 sunbathing
-7862326 sunbeam
-78624 punch
-78625 stock
-786253 rumble
-7862537 rumbles
-78625463 sunblind
-7862546337 sunblinder
-78625464 stocking
-786254647 stockings
-78625625 sunblock
-786257453 stockpile
-786257666 stockroom
-78628873 puncture
-786337 sunder
-7864 rung sung
-7864527737 sunglasses
-78647 rungs
-7864746368 punishment
-7865 punk
-786536 stolen
-786537 punker
-7866224 stomach
-7866243 rummage
-78663 stone
-786631 stone'
-786635 pummel
-786637 stones summer
-786639675 stonework
-78665 stool
-786657 stools
-78667 stomp
-78669 sunny
-7867 pump stop suns
-78672 stop2
-7867243 storage
-78672437666 storageroom
-78673 store
-78673533737 storekeeper
-786735784587546 rumpelstiltskin
-786737 stores
-786737666 storeroom
-786738 sunset
-7867464 pumping storing
-7867473 sunrise
-786753784587546 rumplestiltskin
-78676 storm
-786767 storms
-78677 pumps
-7867737 stopper
-78679 story
-7868 punt
-786826 suntan
-7868266464 suntanning
-78683 stove
-78683867 stovetop
-7869 stow
-787 7up pup sup
-78724273 purchase
-787242737 purchaser
-78724448 straight
-7872444836 straighten
-787246 strain
-787248 strait
-787248522538 straitjacket
-7872643 strange
-78727 strap
-78729 straw
-78729626 strawman
-7873 sure
-7873223 surface
-787326 stream
-78733 puree
-787338 street
-78733832623 streetdance
-78733854448 streetlight
-787338544487 streetlights
-7873387 streets
-78733874663 streetphone
-7873389327 streetwear
-78736484 strength
-78737 super
-787373278 superfast
-787374583 superglue
-7873747277 supergrass
-787377527 superplas
-7873784767 supervisor
-7873824 stretch
-7874 push
-787428679 purgatory
-78743437 purifier
-787437 pusher
-7874377 pushers
-7874464 pushing
-78745 pupil
-787453 strike
-787457 pupils
-787464 string
-7874647 strings
-78747 strip
-787473 stripe
-7874733 striped
-7874737 stripes
-7874746 pushpin
-787477 strips
-78747732724 stripsearch
-78749 strix
-787653 stroke
-787655 stroll
-787664 strong
-787664269 strongbox
-7877 russ
-78773 purse
-7877328 suspect
-78773287 suspects
-7877363 suspend
-787736337 surrender
-787738 puppet
-7877426 russian
-787743 puppie
-787753 purple
-78775437 supplies
-7877587 surplus
-787759 supply
-7877673 purpose
-7877678 support
-787767837 supporter
-78776787 supports
-787768634647 surroundings
-78777473 surprise
-78779 puppy pussy
-78779228 pussycat
-7878 rust
-7878246 sustain
-787828873 structure
-7878288737 structures
-787834552623 surveillance
-787839 survey
-78784825 survival
-78786738 strumpet
-78788 strut
-7878873 rupture
-78789 rusty
-788 put
-7883 stud
-78833 stuff
-78833464 stuffing
-7883368 student
-78833687 students
-788346 studio
-78839 study
-7886 stun
-78867 stump
-788677 stumps
-788743 putrid stupid
-788837 sutter
-7888377 sutters
-789 sux
-789953 puzzle
-79 sw
-7925569 swallow
-7926 ryan swan
-79267 swamp swans
-792679 swampy
-7927 swap
-79276 swarm
-79276464 swarming
-79278422 swastica
-792784223524 swasticaflag
-7927842235247 swasticaflags
-7928 swat
-7929 sway
-793 rye
-79327323 ryebread
-79328 sweat
-79337 sweep
-7933737 sweeper
-79338 sweet
-7944 swig
-79455 swill
-7946 swim
-79464 swing
-794647 swings
-79464738 swingset
-79466437 swimmies
-79466464 swimming
-79467848 swimsuit
-794687687377 swimtrousers
-79473 swipe
-79477 swiss
-794824 switch
-79482425233 switchblade
-794824269 switchbox
-79482437 switches
-795 syl
-796265 symbol
-7962657 symbols
-79673 sword
-796737 swords
-796737626 swordsman
-7967376267 swordsmans
-79684 synth
-79684374937 synthesizer
-796843842 synthetic
-79687 pyotr
-7972643 pyramid
-7973 pyre
-797836 system
-79787 syrup
-797877 syrups
-798466 python
-799764912 sw9764912
-82 ta u2
-822 tab vac
-82227226 tabascco
-82235 tabel
-8225 tack
-82253 table
-822537 tables
-822538 tablet
-8225387 tablets
-822553 tackle
-8226 taco
-8227 tabs
-823 tad
-82337 vader
-8238 taft
-824 tag tai
-824462 vagina
-824484 tahiti
-8245 tail
-824567 tailor
-82457223 tailrace
-8246 vain
-8247268 vagrant
-82477328 vaisseau
-8252 ucla
-82526423 valanice
-8253 take tale
-825464 taking
-825473 valise
-82547626 talisman
-8255 talk tall
-825539 valley
-825543 talkie
-825586463 valjumine
-8257 takr
-82583 value valve
-825837 valves
-826 tan van
-8263 tame vane
-826325473 vandalise
-826325493 vandalize
-82647 tamir
-826489 vanity
-8265 tank
-82657 tanks
-8266464 tanning
-8267473 vampire
-82674737 vampires
-826766 tampon
-827 tap var vcr
-82726 taran
-8273 tape vase
-8273554 taselli
-82737 taper vases
-8273787437 tapestries
-82737879 tapestry
-82742253 variable
-827438 target
-8274387 targets
-82767493 vaporize
-827677 vapors
-8277 taps
-82783 taste
-8279 tarx
-828 vat
-82822 ucucc
-82837 tater
-828376 tavern
-828377 taters
-82858 vault
-828866 tattoo
-829 tax
-8294 taxi
-8294222 taxicab
-83 ve
-832 tea
-8322437 teacher
-83224464 teaching
-832287 teacup
-8324642426 technician
-83246424267 technicians
-8324647837 techniques
-8324665649 technology
-8326 team
-83267 teams
-8327 tear
-83277 tears
-833 ted
-83339 teddy
-833392327 teddybear
-8336 teen
-83362437 teenager
-833833 teevee
-83384 teeth
-834382253 vegetable
-8343822537 vegetables
-8343828466 vegetation
-8344235 vehicel
-8344253 vehicle
-83442537 vehicles
-8344437 veggies
-8345 veil
-8346 vein
-835246 telbin
-8353 tele
-835372673 telescope
-8353726735367 telescopelens
-83537267353673 telescopelense
-8353726742 telescopic
-835374663 telephone
-8353746632273 telephonecard
-83537466326684 telephonebooth
-8353746636862377 telephonenumbers
-8353746637 telephones
-83537466464 telephoning
-83537678 teleport
-8353767828466 teleportation
-8353767837 teleporter
-8353847466 television
-83538474667 televisions
-8353847466738 televisionset
-8353882243 teletubbie
-83538822437 teletubbies
-835388229 teletubby
-8353882297 teletubbys
-8355 tell
-835537 teller
-835543 tellie
-8355437 tellies
-83559 telly
-836 ten ufo
-83633629 tendency
-836337 tender vender
-8363387 vendeur
-8363464 vending
-83634646224463 vendingmachine
-83648258466 venitaltion
-836637 tenner
-836647 tennis
-83666 venom
-836753 temple
-83676 tempo
-83676725 temporal
-83678 tempt
-8368 tent vent
-83682253 tentacle
-836822537 tentacles
-83682528466 ventalation
-83684 tenth
-83684258466 ventialtion
-83684528387 ventilateur
-83684528464 ventilating
-83684528464724238 ventilatingschaft
-83684528466 ventilation
-8368452846674238 ventilationshaft
-836845284667473 ventilationpipe
-8368452846674737 ventilationpipes
-836845284668823 ventilationtube
-8368452846688237 ventilationtubes
-8368452867 ventilator
-83687 tents vents
-837 ver
-837225493 verbalize
-8372632 veranda
-837268766 vercotron
-8375 tesk
-837638536 vermeulen
-837646 vermin
-83764625 terminal
-837646257 terminals
-837646283 terminate
-83772 terra
-8377223 terrace
-8377246 terrain
-83773 verse
-837735 vessel
-8377466 version
-837767 terror
-837778 tessst
-8378 test vest
-83783272 vertebra
-837832723 vertebrae
-837837 tester
-83784253 testicle
-837842537 testicles
-837842853 vestibule
-8378452 tequila
-83784552 tequilla
-8379 very
-838 vdu
-8383 veve
-8387 vdus
-838747 tetris
-8398 text
-8398453 textile
-83987 texts
-84 uh vi
-842 thc vic
-84225 tical
-84246489 vicinity
-8425 tick vial
-842538 ticket
-8425387 tickets
-842553 tickle
-84257 vials
-8426 than
-84265 thank
-842657 thanks
-84272 tiara
-8428 that
-8428227 tictacs
-842846 victim
-8428463 victime
-84284637 victimes
-842867 victor
-84288257 victuals
-843 the tie
-8432837 theater
-8432873 theatre
-8433 thee
-84336 video
-8433673267337 videorecorder
-843368273 videotape
-84338 theft
-8434263 vidgame
-84347 their
-8436 them then
-8436735837 themselves
-843679 theory
-84373 there these
-8437368337844 vierenveertig
-8439 tidy view
-8439464 viewing
-8439727336 viewscreen
-84397273367 viewscreens
-84397678 viewport
-843976787 viewports
-844 vii
-84425 thick
-8442538 thicket
-84433 thief
-84437 tiger
-844383 thieve
-8444 viii
-84444 thigh
-844447 thighs
-84448 tight
-8444859 tightly
-8446 thin
-8446253 thimble
-8446253385 thimbleful
-84462537 thimbles
-84463 thine
-84464 thing
-84464262544 thingamajig
-844647 things
-844649 thingy
-84465 think
-84465464 thinking
-8447 this
-84473 third
-84478336 thirteen
-844789 thirty
-84484 uhhuh
-8448437 thither
-84529 vijay
-8453 tile vile
-84537 tiles
-84539675 tilework
-8454 tiki
-84547 tikis
-8455 till
-8455243 village
-84553 ville
-8459 ugly
-846 tin vin
-846237 timber
-8462377 timbers
-846246489 vincinity
-8463 time vine
-846337 tinder
-8463427 vinegar
-84637 timer times vines
-846374323 timepiece
-846382253 timetable
-8463822537 timetables
-846437 tinier
-846464 timing
-846472 viogra
-8465283 violate
-8465368 violent
-846538 violet
-846543 tinkie
-846543946543 tinkiewinkie
-846546 violin
-846553 tinkle
-84659 tinky
-8465994659 tinkywinky
-846627 thomas
-84664 thong
-84668 timov
-8467 thor
-846729463 thorazine
-84673 those
-84676 thorn
-846767 thorns
-8468 thou
-846844 though
-8468448 thought
-84684487 thoughts
-84687263 thousand
-8469 tiny
-847 tip
-847243 visage
-847274 thrash
-8473 tire
-847323 thread
-8473237 threads
-847328 threat
-84733 three tired
-847337 tireds
-84737 tires viper
-8474 virh
-8474253 visible
-847446 virgin
-847468 vishnu
-84748 visit
-8474867 visitor
-84748677 visitors
-847628 throat
-847647 tiroir
-847663 throne
-847664 throng
-8476844 through
-84768853 throttle
-84769 throw
-8476937 thrower
-84769464 throwing
-8477 tips
-847739 tippex
-847783 tissue
-8477837 tissues
-8478 thru
-847825493 visualize
-84786 thrum
-847863 tiptoe
-847866464 thrumming
-8478664647 thrummings
-847867 thrums
-84787 virus
-8478737 viruses
-847878 thrust
-84787837 thruster
-847878377 thrusters
-848 tit
-84826 titan
-8482642 titanic
-84826427 titanics
-8484 uhuh
-848437 tities
-84847 thugs
-84853 title
-848537 titles
-84862 thumb
-8486337 thunder
-84867 thump
-8487 tits
-84875464 titsling
-8488437 titties
-84889 titty
-849 thy
-8494225 thwhack
-84963 thyme
-8497353 thyself
-853623 ulence
-8539 ukey
-85872 ultra
-858723278 ultrafast
-86 to
-8622226 tobacco
-86225493 vocalize
-8623 toad
-862378665 toadstool
-8623786657 toadstools
-8624246 unchain
-8625684 uncloth
-86256843 unclothe
-862568433 unclothed
-862658 unbolt
-8626837 uncover
-86273552 umbrella
-86278 toast
-8627837 toaster
-86282553 unbuckle
-862833 uncuff
-863 toe
-86327836 unfasten
-8632784 unearth
-86329 today
-863297 todays
-863323 undead
-8633537 toddler
-86337 under
-8633725684464 underclothing
-8633726837 undercover
-8633727874 underbrush
-86337476863 underground
-8633763284 underneath
-863376678 undermost
-8633772687 underpants
-8633778263464 understanding
-8633792837 underwater
-863379327 underwear
-8633796753 underworld
-86338837 unfetter
-86352 vodka
-8636 todo undo
-863653 unfold
-863737 undres
-8637377 undress
-863737733 undressed
-8639 undy
-86423 voice
-864237 voices
-8642676 unicorn
-864285 vohaul
-8642857 vohauls
-8643 void
-864336843433 unidentified
-8643676 uniform
-86436767 uniforms
-86438437 together
-864453 toggle
-8644824 unhitch
-8645283 toilate
-864538 toilet
-86453835874 toiletflush
-8645387 toilets
-86453872737 toiletpaper
-8645387328 toiletseat
-864657837 unholster
-86466 union
-864665 unhook
-8648 unit
-86483 unite
-864831 unite!
-864837725 universal
-86483773 universe
-8648377489 university
-86487 units
-8652266 volcano
-8652824 unlatch
-86529385 unlawful
-8653 toke
-86536 token
-865367 tokens
-8654448 unlight
-86548 unlit
-865623 unload
-865625 unlock
-8656696 unknown
-865669619673 unknown.word
-8658243 voltage
-865863 volume
-8658637 volumes
-866 tom too
-8662 tomb
-86624295 tomahawk
-86627 tombs
-866278663 tombstone
-8662786637 tombstones
-866286 tomato
-8663 tome tone
-866366 voodoo
-86637 tomes tones
-86642 tonic
-86648 vomit
-866483 tongue
-8665 tool
-8665269 toolbox
-86657 tools
-86657433 toolshed
-86667769 tomorrow
-8667837 vonster
-86678377 vonsters
-8668 toot
-86684 tooth
-8668433 toothed
-8669 tony
-86697 tonys
-867 top vms
-86724 torch
-8672437 torches
-86725426 vorakian
-8672726253 unscramble
-8672739 unscrew
-86732873 unsecure
-86733 topee
-86746283 unrinate
-867584 unplug
-8676 torn
-8676236 tornado
-8676336426 tormeenian
-86763364267 tormeenians
-867655 unroll
-8676678 topmost
-8677 tops toss
-867737 tosser
-86774 topsg
-86776 torso
-8677645 topsoil
-867839 vortex
-86784552 tortilla
-8678873 torture
-868 tnt
-8682 v6ta
-86824 touch
-868243 touche
-8682437 touches voucher
-86824464 touching
-86825 total
-8682559 totally
-86826453 untangle
-868345 unveil
-86836 totem
-86843 untie
-86845 until
-86873 toupe
-868732 toupea
-868733 toupee
-8689 unty
-869 tow toy
-869243 voyage
-869273 toward
-8692737 towards
-86935 towel
-869353883 towelette
-869357 towels
-86937 tower
-869377 towers
-86946 toxin
-8695263 toyland
-8696 town
-86966873 toymouse
-86967 towns
-86967447 township
-8697 toys vows
-87 tp ts up us vs
-87223 trace
-87225 track
-87225464 tracking
-87233 trade
-8723342 traffic
-87245 trail
-8724537 trailer
-872457 trails
-87246 train
-87246377 trainers
-872467 trains
-8724825 upchuck
-8726 tram
-87267 tramp
-87267337 transfer
-872674368 transient
-8726748 transit
-872675283 translate
-8726752837 translater
-87267528464 translating
-87267528466 translation
-8726752867 translator
-87267648 transmit
-87267648837 transmitter
-87267766337 transponder
-872677678 transport
-87267767828466 transportation
-87267767837 transporter
-872677678464 transporting
-8727 trap
-87273667 trapdoor
-87274 trash
-87274226 trashcan
-872742267 trashcans
-87274227538 trashbasket
-87274246 trashbin
-872742467 trashbins
-872773 trappe
-872835 travel
-87283537 traveler
-872835464 traveling
-872835537 traveller
-87283773 traverse
-87286582 travolta
-8729 tray
-873 use
-87323 tread
-873236455 treadmill
-873237 treads
-87327873 treasure
-87327879 treasury
-87328 treat
-8733 tree used
-873346873 treehouse
-8733626 treeman
-8733636 treemen
-87337 trees
-8735377 useless
-873624 trench
-8736242628 trenchcoat
-87364 tseng
-8737 user
-87386378433356 tretoestiefeln
-874 uri
-87423 tribe
-87425 trick
-8742863 tribune
-87429253 tricycle
-8743368 trident
-874368 urgent
-8744437 trigger
-874478 tshirt
-8746 trio
-874625 urinal
-8746283 urinate
-87463 urine
-87464 using
-87465387 trinkets
-8746637 trimmer
-8747 trip
-8747233 upgrade
-87543837 uplifter
-876 urn
-876225 trobak
-87627 urmas
-8763 trod
-8764563983 troglodyte
-87655 troll
-876557 trolls
-87658738 usoltsev
-8766 upon
-87666 vroom
-876666 vrooom
-87667 troop
-8766737 trooper
-87667377 troopers
-8767 urns
-87674437 trophies
-876749 trophy
-8768 trou
-8768253 trouble
-876844 trough
-87687 trous
-87687377 trousers
-876935 trowel
-87695 trowl
-87737 upper
-877376678 uppermost
-877433 upside
-877658738 ussoltsev
-87782477 upstairs
-87825 truck usual
-8783 true
-87832 truda
-878524272 tsukahara
-87859 truly
-8786353 trundle
-87865 trunk
-878657 trunks
-8786738 trumpet
-879 try
-88 tv
-881 tv.
-882 tub
-882243 tubbie
-8822437 tubbies
-8823 tube
-88237 tubes
-882537 tucker
-8836745 utensil
-88367457 utensils
-8838 tuft
-88387 tufts
-884 tug
-8842628 tugboat
-8845473 utilise
-88454737 utiliser
-8845489 utility
-8845493 utilize
-88547 tulip
-885477 tulips
-8858873 vulture
-88588737 vultures
-886253 tumble
-8863 tune
-88637 tunes
-886464 tuning
-886635 tunnel
-8866357 tunnels
-88669 tummy
-887 tvs
-88726 turbo
-8873 turd turf
-887336 tureen
-88738 tvset
-88746 turin
-8875 turk
-887539 turkey
-8875397 turkeys
-8876 turn
-887682253 turntable
-887738 turret
-887828466 tvstation
-887853 turtle
-88837 utter
-89325 tweak
-893583 twelve
-893689 twenty
-8943353 twiddle
-8944 twig
-89447 twigs
-8946 twin
-89463 twine
-8946543 twinkie
-8946553 twinkle
-89465537 twinkles
-894655464 twinkling
-89467 twins
-89475 twirl
-89478 twist
-89537 tyler
-896 two
-8962656733 twocolored
-89626568733 twocoloured
-8973 type
-911 911
-92 wc ya
-922 waa zac
-922237 yabber
-9224379 zachery
-9225379 zackery
-9233 wade
-923464 wading
-924 wag yah
-92437 wager
-9245 wail
-9245464 wailing
-92457 wails
-92466 wagon
-924667 wagons
-92478 waist
-924782263 waistband
-9248 wait
-924837 waiter
-9248464 waiting
-92487377 waitress
-924934 yahweh
-925 yak
-925268 walbot
-9253 wake
-92536 waken
-9255 walk wall
-9255268 wallbot
-92552687 wallbots
-925538 wallet
-925543 walkie
-925546 walkin
-9255464 walking
-925567 wallop
-925569277 wallowars
-92557 walls
-925572737 wallpaper
-92558476844 walkthrough
-9255929 walkway
-925688 walnut
-9256887 walnuts
-9263 wand
-926337 wander
-9264 wang
-9265 wank yank
-926537 wanker
-9268 want
-926833 wanted
-92687 wants
-9269 yaow
-927 war yap zap
-9273 ware yard
-9273273 warfare
-927346873 warehouse
-9273468737 warehouses
-92737 wares yards
-92737623 wardrobe
-927376237 wardrobes
-927378425 yardstick
-9274 wash
-927422746 washbasin
-927425684 washcloth
-927426 zarian
-92742695 washbowl
-92742876 washburn
-927437 washer
-9274377 washers
-9274464 washing
-92744646224463 washingmachine
-9274464866 washington
-9275625 warlock
-9276 warm yarn
-9276464 warning
-9277 warp wars wasp
-9277268 warrant
-9277467 warrior
-92774677 warriors
-92777 wasps
-927777333 warpspeed
-9277978425 zappystick
-92783 waste
-92783226 wastecan
-92783227538 wastebasket
-92783246 wastebin
-9278372737 wastepaper
-92824 watch
-9282437 watcher
-9282486937 watchtower
-9283 wave
-92837 water waver waves
-9283722746 waterbasin
-92837266537 watercooler
-928373255 waterfall
-9283732557 waterfalls
-9283737668 waterfront
-928374653 waterhole
-928377 waters
-92837737378647 waterreservoir
-928377473 waterpipe
-9283774737 waterpipes
-92837929 waterway
-9284 xavi
-928766 watson
-929 wax way
-92937 waxer
-93 we ye
-932 web yea
-9324 yeah
-932568 zealot
-9327 wear webs year
-93272 zebra
-9327357 weasels
-932766 weapon
-9327667 weapons
-93283 weave
-9328437 weather
-9328437627 weathermap
-933 wed wee
-9333 weed
-933332837 weedeater
-9333464 wedding
-93337 weeds
-93339422537 weedwhacker
-9335 week
-9337 weep
-9337464 weeping
-93378 weest
-93444 weigh
-934448 weight
-9344487 weights
-93473 weird
-934736 weirdo
-934737 weiser
-9352663 welcome
-93532 zelda
-9355 well yell
-9355464 yelling
-935569 yellow
-93556933 yellowed
-93557 yells
-935827 zeltar
-9358277 zeltars
-93582771 zeltars)
-93624 wench
-93666 xenon
-9368 went
-937 yep yes
-9373 werd
-9378 west
-937837329 yesterday
-938 wet
-9384 yeti
-9387 zeus
-9387848 wetsuit
-94 xi
-94225 whack
-9422537 whacker
-94253 whale
-9425317 whale's
-94273 wharf
-9428 what
-942824262225548 whatchamacallit
-942827392 whatareya
-94287 whats
-94328 wheat
-9433 wide wife
-94335 wheel
-94335227769 wheelbarrow
-943357 wheels
-94336 widen
-94337 wifes
-943438 widget
-94353 wield
-9436 when
-94373 where
-94373226887 whereabouts
-943737 wheres
-944 wig xii zig
-94433 whiff
-9444 xiii
-94449 ziggy
-944497 ziggys
-94453 while
-9447 whip whir zigs
-9447539 whiskey
-944757665 whirlpool
-944759 whisky
-94477 whirs
-9447737 whisper
-9447853 whistle
-94483 white
-944836377 whiteness
-944839 whitey
-94485267 whitlams
-94499 whizz
-945 wil
-9452378 wilbert
-9452478 wilbirt
-94526 wilco
-9453 wild
-9453356937 wildflower
-94533569377 wildflowers
-9453376377 wilderness
-94535433 wildlife
-9455 will
-9455387 willets
-9455426 william
-94554267 williams
-945543 willie
-94559 willy
-945597 willys
-945766 wilson
-946 who
-946264 whoami
-9463 wind wine zine
-946369 window
-9463697 windows
-9463697263 windowpane
-94636972637 windowpanes
-9463697455 windowsill
-94636974557 windowsills
-9463744353 windshield
-946387 windup
-9464 wing
-946433 winged
-94647 wings
-9465 wink
-94653 whole
-946543 winkie
-94659 winky
-9466 wino
-946637 winner
-946643 winnie
-9466464 winning
-946674 whoosh
-9466743 whoopie
-9466948 whoozit
-9467 wimp
-94673 whore
-946737 whores
-9467866 winston
-946837 winter
-9473 wipe wire wise
-94735377 wireless
-947366 wisdom
-94737 wires
-9474 wish
-947437 wishes
-947464 wiring
-94779 zippy
-948 xiv
-94824 witch
-9482437 witches
-94837 wives
-9484 with
-94843729 withdraw
-94843729464 withdrawing
-948437295 withdrawl
-948446 within
-9484688 without
-9486377 witness
-949 why wiz
-949273 wizard
-9499 wizz
-9596223 zkxoabd
-96 yo
-962 yob
-9626 yobo
-9629 yoaw
-9632 yoda
-9643 woid
-9653 wolf
-9653626 wolfman
-9653726 wolfram
-965638 zoloft
-96624 zombi
-966243 zombie
-9662437 zombies
-966247 zombis
-96626 woman
-966267 womans
-9663 wood zone
-9663288837 woodcutter
-96632888377 woodcutters
-966336 wooden
-966337 wonder
-96635263 woodland
-96636 women
-966367 womens
-96637 woods
-96637433 woodshed
-966378683 woodstove
-96639 woody
-96639273 woodward
-9665 wool
-9666 zoom
-9666464 zooming
-96666 zooom
-9673 word
-96737 words
-9675 work york
-967523624 workbench
-96753 world
-967537 worker
-9675377 workers
-96757 works
-9675867 worktop
-9676 worm worn
-9676684486 zornothium
-9677447 worship
-96774477377 worshippers
-967845377 worthless
-968 you zot
-96853 would
-96863 wound
-96864 young
-968647837 youngster
-9687 your
-96873 youre youse
-96877 yours
-96877353 yourself
-96884 youth
-96884385 youthful
-972484 wraith
-9724847 wraiths
-9727 wrap
-9729 xray
-97297 xrays
-97325 wreck
-97325243 wreckage
-9732533 wrecked
-973257 wrecks
-973624 wrench
-97362437 wrenches
-9737853 wrestle
-97478 wrist
-9747892824 wristwatch
-97483 write
-974837 writer
-9748464 writing
-974846462837425 writingmaterial
-97484647 writings
-974846482253 writingtable
-9748464822537 writingtables
-97664 wrong
-97683 wrote
-98 xv
-98222 yucca
-982227256 yuccapalm
-9846 yugo
-987 wus yup
-98992 wuzza
-99 xx xy zz
-99464 xwing
-998 xxv
-99867 zztop
-999 xxx
-99999 xyzzy
diff --git a/dists/slackware/scummvm.SlackBuild.in b/dists/slackware/scummvm.SlackBuild.in
deleted file mode 100755
index 84ac94d7e9..0000000000
--- a/dists/slackware/scummvm.SlackBuild.in
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/bin/sh
-# ScummVM Slackware 9(.1) Package Creation Script
-# by Jay Lanagan - roni@parodius.com
-
-CWD=`pwd`
-if [ "$TMP" = "" ]; then
- TMP=/tmp
-fi
-PKG=$TMP/package-scummvm
-
-VERSION=@VERSION@
-ARCH=i486
-BUILD=1
-
-if [ ! -d $TMP ]; then
- mkdir -p $TMP
-fi
-if [ ! -d $PKG ]; then
- mkdir -p $PKG
-fi
-
-cd $TMP
-# tar xzvf scummvm-$VERSION.tgz
-tar xzvf scummvm-$VERSION.tar.gz
-# cd scummvm-$VERSION
-cd scummvm
-chown -R root.root .
-CXXFLAGS="-O2 -march=i486 -mcpu=i686" \
-./configure
-make
-strip scummvm
-chmod 755 scummvm
-mkdir -p $PKG/usr/bin
-cp scummvm $PKG/usr/bin
-chown -R root:bin $PKG/usr/bin
-gzip -9 dists/scummvm.6
-mkdir -p $PKG/usr/man/man6
-cp dists/scummvm.6.gz $PKG/usr/man/man6
-mkdir -p $PKG/usr/doc/scummvm-$VERSION
-cp -a AUTHORS COPYING COPYRIGHT ChangeLog NEWS README TODO \
- $PKG/usr/doc/scummvm-$VERSION
-chmod 644 $PKG/usr/doc/scummvm-$VERSION
-mkdir -p $PKG/install
-cat $CWD/slack-desc > $PKG/install/slack-desc
-mkdir -p $PKG/usr/share/pixmaps
-cp -a icons/scummvm.ico icons/scummvm.xpm \
- $PKG/usr/share/pixmaps
-mkdir -p $PKG/usr/share/applications
-cp -a dists/scummvm.desktop \
- $PKG/usr/share/applications
-
-cd $PKG
-makepkg -l y -c n $TMP/scummvm-$VERSION-$ARCH-$BUILD.tgz
-
-if [ "$1" = "--cleanup" ]; then
- rm -rf $TMP/scummvm-$VERSION
- rm -rf $PKG
-fi
diff --git a/engines/agi/agi_v3.cpp b/engines/agi/agi_v3.cpp
index 1e0baeaa81..69a8698ecb 100644
--- a/engines/agi/agi_v3.cpp
+++ b/engines/agi/agi_v3.cpp
@@ -52,14 +52,14 @@ int AgiLoader_v3::detectGame() {
FSList fslist;
FilesystemNode dir(ConfMan.get("path"));
- if (!dir.listDir(fslist, FilesystemNode::kListFilesOnly)) {
- warning("AgiEngine: invalid game path '%s'", dir.path().c_str());
+ if (!dir.getChildren(fslist, FilesystemNode::kListFilesOnly)) {
+ warning("AgiEngine: invalid game path '%s'", dir.getPath().c_str());
return errInvalidAGIFile;
}
for (FSList::const_iterator file = fslist.begin();
file != fslist.end() && !found; ++file) {
- Common::String f = file->name();
+ Common::String f = file->getName();
f.toLowercase();
if (f.hasSuffix("vol.0")) {
diff --git a/engines/agi/detection.cpp b/engines/agi/detection.cpp
index 29b5bb726a..1ab59c0806 100644
--- a/engines/agi/detection.cpp
+++ b/engines/agi/detection.cpp
@@ -1876,13 +1876,13 @@ Common::EncapsulatedADGameDesc fallbackDetector(const FSList *fslist) {
// First grab all filenames and at the same time count the number of *.wag files
for (FSList::const_iterator file = fslist->begin(); file != fslist->end(); ++file) {
if (file->isDirectory()) continue;
- Common::String filename = file->name();
+ Common::String filename = file->getName();
filename.toLowercase();
allFiles[filename] = true; // Save the filename in a hash table
if (filename.hasSuffix(".wag")) {
// Save latest found *.wag file's path (Can be used to open the file, the name can't)
- wagFilePath = file->path();
+ wagFilePath = file->getPath();
wagFileCount++; // Count found *.wag files
}
}
diff --git a/engines/agi/wagparser.cpp b/engines/agi/wagparser.cpp
deleted file mode 100644
index bac4a34454..0000000000
--- a/engines/agi/wagparser.cpp
+++ /dev/null
@@ -1,229 +0,0 @@
-/* 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.
- *
- * $URL$
- * $Id$
- *
- */
-
-#include "common/stdafx.h"
-
-#include "common/file.h"
-#include "common/util.h"
-
-#include "agi/wagparser.h"
-
-namespace Agi {
-
-WagProperty::WagProperty() {
- setDefaults();
-}
-
-WagProperty::~WagProperty() {
- deleteData();
-}
-
-WagProperty::WagProperty(const WagProperty &other) {
- deepCopy(other);
-}
-
-WagProperty &WagProperty::operator=(const WagProperty &other) {
- if (&other != this) deepCopy(other); // Don't do self-assignment
- return *this;
-}
-
-void WagProperty::deepCopy(const WagProperty &other) {
- _readOk = other._readOk;
- _propCode = other._propCode;
- _propType = other._propType;
- _propNum = other._propNum;
- _propSize = other._propSize;
-
- deleteData(); // Delete old data (If any) and set _propData to NULL
- if (other._propData != NULL) {
- _propData = new char[other._propSize + 1UL]; // Allocate space for property's data plus trailing zero
- memcpy(_propData, other._propData, other._propSize + 1UL); // Copy the whole thing
- }
-}
-
-bool WagProperty::read(Common::SeekableReadStream &stream) {
- // First read the property's header
- _propCode = (enum WagPropertyCode) stream.readByte();
- _propType = (enum WagPropertyType) stream.readByte();
- _propNum = stream.readByte();
- _propSize = stream.readUint16LE();
-
- if (stream.ioFailed()) { // Check that we got the whole header
- _readOk = false;
- return _readOk;
- }
-
- // Then read the property's data
- deleteData(); // Delete old data (If any)
- _propData = new char[_propSize + 1UL]; // Allocate space for property's data plus trailing zero
- uint32 readBytes = stream.read(_propData, _propSize); // Read the data in
- _propData[_propSize] = 0; // Set the trailing zero for easy C-style string access
-
- _readOk = (_propData != NULL && readBytes == _propSize); // Check that we got the whole data
- return _readOk;
-}
-
-void WagProperty::clear() {
- deleteData();
- setDefaults();
-}
-
-void WagProperty::setDefaults() {
- _readOk = false;
- _propCode = PC_UNDEFINED;
- _propType = PT_UNDEFINED;
- _propNum = 0;
- _propSize = 0;
- _propData = NULL;
-}
-
-void WagProperty::deleteData() {
- if (_propData != NULL) {
- delete _propData;
- _propData = NULL;
- }
-}
-
-WagFileParser::WagFileParser() :
- _parsedOk(false) {
-}
-
-WagFileParser::~WagFileParser() {
-}
-
-bool WagFileParser::checkAgiVersionProperty(const WagProperty &version) const {
- if (version.getCode() == WagProperty::PC_INTVERSION && // Must be AGI interpreter version property
- version.getSize() >= 3 && // Need at least three characters for a version number like "X.Y"
- isdigit(version.getData()[0]) && // And the first character must be a digit
- (version.getData()[1] == ',' || version.getData()[1] == '.')) { // And the second a comma or a period
-
- for (int i = 2; i < version.getSize(); i++) // And the rest must all be digits
- if (!isdigit(version.getData()[i]))
- return false; // Bail out if found a non-digit after the decimal point
-
- return true;
- } else // Didn't pass the preliminary test so fails
- return false;
-}
-
-uint16 WagFileParser::convertToAgiVersionNumber(const WagProperty &version) {
- // Examples of the conversion: "2.44" -> 0x2440, "2.917" -> 0x2917, "3.002086" -> 0x3086.
- if (checkAgiVersionProperty(version)) { // Check that the string is a valid AGI interpreter version string
- // Convert first ascii digit to an integer and put it in the fourth nibble (Bits 12...15) of the version number
- // and at the same time set all other nibbles to zero.
- uint16 agiVerNum = ((uint16) (version.getData()[0] - '0')) << (3 * 4);
-
- // Convert at most three least significant digits of the version number's minor part
- // (i.e. the part after the decimal point) and put them in order to the third, second
- // and the first nibble of the version number. Just to clarify version.getSize() - 2
- // is the number of digits after the decimal point.
- int32 digitCount = MIN<int32>(3, ((int32) version.getSize()) - 2); // How many digits left to convert
- for (int i = 0; i < digitCount; i++)
- agiVerNum |= ((uint16) (version.getData()[version.getSize() - digitCount + i] - '0')) << ((2 - i) * 4);
-
- debug(3, "WagFileParser: Converted AGI version from string %s to number 0x%x", version.getData(), agiVerNum);
- return agiVerNum;
- } else // Not a valid AGI interpreter version string
- return 0; // Can't convert, so failure
-}
-
-bool WagFileParser::checkWagVersion(Common::SeekableReadStream &stream) {
- if (stream.size() >= WINAGI_VERSION_LENGTH) { // Stream has space to contain the WinAGI version string
- // Read the last WINAGI_VERSION_LENGTH bytes of the stream and make a string out of it
- char str[WINAGI_VERSION_LENGTH+1]; // Allocate space for the trailing zero also
- uint32 oldStreamPos = stream.pos(); // Save the old stream position
- stream.seek(stream.size() - WINAGI_VERSION_LENGTH);
- uint32 readBytes = stream.read(str, WINAGI_VERSION_LENGTH);
- stream.seek(oldStreamPos); // Seek back to the old stream position
- str[readBytes] = 0; // Set the trailing zero to finish the C-style string
- if (readBytes != WINAGI_VERSION_LENGTH) { // Check that we got the whole version string
- debug(3, "WagFileParser::checkWagVersion: Error reading WAG file version from stream");
- return false;
- }
- debug(3, "WagFileParser::checkWagVersion: Read WinAGI version string (\"%s\")", str);
-
- // Check that the WinAGI version string is one of the two version strings
- // WinAGI 1.1.21 recognizes as acceptable in the end of a *.wag file.
- // Note that they are all of length 16 and are padded with spaces to be that long.
- return scumm_stricmp(str, "WINAGI v1.0 ") == 0 ||
- scumm_stricmp(str, "1.0 BETA ") == 0;
- } else { // Stream is too small to contain the WinAGI version string
- debug(3, "WagFileParser::checkWagVersion: Stream is too small to contain a valid WAG file");
- return false;
- }
-}
-
-bool WagFileParser::parse(const char *filename) {
- Common::File file;
- WagProperty property; // Temporary property used for reading
- Common::MemoryReadStream *stream = NULL; // The file is to be read fully into memory and handled using this
-
- _parsedOk = false; // We haven't parsed the file yet
-
- if (file.open(filename)) { // Open the file
- stream = file.readStream(file.size()); // Read the file into memory
- if (stream != NULL && stream->size() == file.size()) { // Check that the whole file was read into memory
- if (checkWagVersion(*stream)) { // Check that WinAGI version string is valid
- // It seems we've got a valid *.wag file so let's parse its properties from the start.
- stream->seek(0); // Rewind the stream
- if (!_propList.empty()) _propList.clear(); // Clear out old properties (If any)
-
- do { // Parse the properties
- if (property.read(*stream)) { // Read the property and check it was read ok
- _propList.push_back(property); // Add read property to properties list
- debug(4, "WagFileParser::parse: Read property with code %d, type %d, number %d, size %d, data \"%s\"",
- property.getCode(), property.getType(), property.getNumber(), property.getSize(), property.getData());
- } else // Reading failed, let's bail out
- break;
- } while (!endOfProperties(*stream)); // Loop until the end of properties
-
- // File was parsed successfully only if we got to the end of properties
- // and all the properties were read successfully (Also the last).
- _parsedOk = endOfProperties(*stream) && property.readOk();
-
- if (!_parsedOk) // Error parsing stream
- warning("Error parsing WAG file (%s). WAG file ignored", filename);
- } else // Invalid WinAGI version string or it couldn't be read
- warning("Invalid WAG file (%s) version or error reading it. WAG file ignored", filename);
- } else // Couldn't fully read file into memory
- warning("Error reading WAG file (%s) into memory. WAG file ignored", filename);
- } else // Couldn't open file
- warning("Couldn't open WAG file (%s). WAG file ignored", filename);
-
- if (stream != NULL) delete stream; // If file was read into memory, deallocate that buffer
- return _parsedOk;
-}
-
-const WagProperty *WagFileParser::getProperty(const WagProperty::WagPropertyCode code) const {
- for (PropertyList::const_iterator iter = _propList.begin(); iter != _propList.end(); iter++)
- if (iter->getCode() == code) return iter;
- return NULL;
-}
-
-bool WagFileParser::endOfProperties(const Common::SeekableReadStream &stream) const {
- return stream.pos() >= (stream.size() - WINAGI_VERSION_LENGTH);
-}
-
-} // End of namespace Agi
diff --git a/engines/agi/wagparser.h b/engines/agi/wagparser.h
deleted file mode 100644
index 1fc554d522..0000000000
--- a/engines/agi/wagparser.h
+++ /dev/null
@@ -1,288 +0,0 @@
-/* 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.
- *
- * $URL$
- * $Id$
- *
- */
-
-namespace Agi {
-
-/**
- * WagProperty represents a single property from WinAGI's *.wag file.
- * A property consists of a header and of data.
- * The header consists of the following:
- * - Property code (Integer/Enumeration, 1 byte)
- * - Property type (Integer/Enumeration, 1 byte)
- * - Property number (Integer, 1 byte)
- * - Property size (Little endian integer, 2 bytes)
- * And then there's the data with as many bytes as defined in the header's property size variable.
- */
-class WagProperty {
-// Constants, enumerations etc
-public:
- /**
- * Property codes taken from WinAGI 1.1.21's source code file WinAGI/AGIObjects.bas.
- */
- enum WagPropertyCode {
- PC_GAMEDESC = 129, ///< Game description (WinAGI 1.1.21 limits these to 4096 bytes)
- PC_GAMEAUTHOR, ///< Game author (WinAGI 1.1.21 limits these to 256 bytes)
- PC_GAMEID, ///< Game ID
- PC_INTVERSION, ///< Interpreter version (WinAGI 1.1.21 defaults to version 2.917)
- PC_GAMELAST, ///< Last edit date
- PC_GAMEVERSION, ///< Game version (WinAGI 1.1.21 limits these to 256 bytes)
- PC_GAMEABOUT, ///< About game (WinAGI 1.1.21 limits these to 4096 bytes)
- PC_GAMEEXEC, ///< Game executable
- PC_RESDIR, ///< Resource directory name
- PC_DEFSYNTAX, ///< Default syntax
- PC_INVOBJDESC = 144,
- PC_VOCABWORDDESC = 160,
- PC_PALETTE = 172,
- PC_USERESNAMES = 180,
- PC_LOGIC = 192,
- PC_PICTURE = 208,
- PC_SOUND = 224,
- PC_VIEW = 240,
- PC_UNDEFINED = 0x100 ///< An undefined property code (Added for ScummVM).
- };
-
- /**
- * Property types taken from WinAGI 1.1.21's source code file WinAGI/AGIObjects.bas.
- * At the moment these aren't really at all needed by ScummVM. Just here if anyone decides to use them.
- */
- enum WagPropertyType {
- PT_ID,
- PT_DESC,
- PT_SYNTAX,
- PT_CRC32,
- PT_KEY,
- PT_INST0,
- PT_INST1,
- PT_INST2,
- PT_MUTE0,
- PT_MUTE1,
- PT_MUTE2,
- PT_MUTE3,
- PT_TPQN,
- PT_ROOM,
- PT_VIS0,
- PT_VIS1,
- PT_VIS2,
- PT_VIS3,
- PT_ALL = 0xff,
- PT_UNDEFINED = 0x100 ///< An undefined property type (Added for ScummVM).
- };
-
-// Constructors, destructors, operators etc
-public:
- /**
- * Creates an empty WagProperty object.
- * No property header or property data in it.
- */
- WagProperty();
-
- /**
- * Destructor. Releases allocated memory if any etc. The usual.
- */
- ~WagProperty();
-
- /**
- * Copy constructor. Deep copies the variables.
- */
- WagProperty(const WagProperty &other);
-
- /**
- * Assignment operator. Deep copies the variables.
- */
- WagProperty &operator=(const WagProperty &other);
-
-// Non-public helper methods
-protected:
- /**
- * Sets the default values for member variables.
- */
- void setDefaults();
-
- /**
- * Delete's the property's data from memory if we have it, otherwise does nothing.
- */
- void deleteData();
-
- /**
- * Deep copies the parameter object to this object.
- * @param other The object to be deep copied to this object.
- */
- void deepCopy(const WagProperty &other);
-
-// Public methods that have side-effects
-public:
- /**
- * Read in a property (Header and data).
- * @return True if reading was a success, false otherwise.
- */
- bool read(Common::SeekableReadStream &stream);
-
- /**
- * Clears the property.
- * After this the property is empty. No header or data.
- */
- void clear();
-
-// Public access functions
-public:
- /**
- * Was the property read ok from the source stream?
- */
- bool readOk() const { return _readOk; };
-
- /**
- * Return the property's code.
- * @return The property's code if readOk(), PC_UNDEFINED otherwise.
- */
- enum WagPropertyCode getCode() const { return _propCode; };
-
- /**
- * Return the property's type.
- * @return The property's type if readOk(), PT_UNDEFINED otherwise.
- */
- enum WagPropertyType getType() const { return _propType; };
-
- /**
- * Return the property's number.
- * @return The property's number if readOk(), 0 otherwise.
- */
- byte getNumber() const { return _propNum; };
-
- /**
- * Return the property's data's length.
- * @return The property's data's length if readOk(), 0 otherwise.
- */
- uint16 getSize() const { return _propSize; }
-
- /**
- * Return property's data. Constant access version.
- * Can be used as a C-style string (i.e. this is guaranteed to have a trailing zero).
- * @return The property's data if readOk(), NULL otherwise.
- */
- const char *getData() const { return _propData; };
-
-// Member variables
-protected:
- bool _readOk; ///< Was the property read ok from the source stream?
- enum WagPropertyCode _propCode; ///< Property code (Part of the property's header)
- enum WagPropertyType _propType; ///< Property type (Part of the property's header)
- byte _propNum; ///< Property number (Part of the property's header)
- uint16 _propSize; ///< Property's size (Part of the property's header)
- char *_propData; ///< The property's data (Plus a trailing zero for C-style string access)
-};
-
-
-/**
- * Class for parsing *.wag files created by WinAGI.
- * Using this class you can get information about fanmade AGI games if they have provided a *.wag file with them.
- */
-class WagFileParser {
-// Constants, type definitions, enumerations etc.
-public:
- static const uint WINAGI_VERSION_LENGTH = 16; ///< WinAGI's version string's length (Always 16)
- typedef Common::Array<WagProperty> PropertyList; ///< A type definition for an array of *.wag file properties
-
-public:
- /**
- * Constructor. Creates a WagFileParser object in a default state.
- */
- WagFileParser();
-
- /**
- * Destructor.
- */
- ~WagFileParser();
-
- /**
- * Loads a *.wag file and parses it.
- * @note After this you can access the loaded properties using getProperty() and getProperties() etc.
- * @param filename Name of the file to be parsed.
- * @return True if parsed successfully, false otherwise.
- */
- bool parse(const char *filename);
-
- /**
- * Get list of the loaded properties.
- * @note Use only after a call to parse() first.
- * @return The list of loaded properties.
- */
- const PropertyList &getProperties() const { return _propList; };
-
- /**
- * Get property with the given property code.
- * @note Use only after a call to parse() first.
- * @return Pointer to the property if its found in memory, NULL otherwise.
- *
- * TODO/FIXME: Handle cases where several properties with the given property code are found.
- * At the moment we don't need this functionality because the properties we use
- * for fallback detection probably don't have multiples in the WAG-file.
- * TODO: Make this faster than linear time if desired/needed.
- */
- const WagProperty *getProperty(const WagProperty::WagPropertyCode code) const;
-
- /**
- * Tests if the given property contains a valid AGI interpreter version string.
- * A valid AGI interpreter version string is of the form "X.Y" or "X,Y" where
- * X is a single decimal digit and Y is a string of decimal digits (At least one digit).
- * @param version The property to be tested.
- * @return True if the given property contains a valid AGI interpreter version string, false otherwise.
- */
- bool checkAgiVersionProperty(const WagProperty &version) const;
-
- /**
- * Convert property's data to an AGI interpreter version number.
- * @param version The property to be converted (Property code should be PC_INTVERSION).
- * @return AGI interpreter version number if successful, 0 otherwise.
- */
- uint16 convertToAgiVersionNumber(const WagProperty &version);
-
- /**
- * Was the file parsed successfully?
- * @return True if file was parsed successfully, false otherwise.
- */
- bool parsedOk() const { return _parsedOk; };
-
-protected:
- /**
- * Checks if stream has a valid WinAGI version string in its end.
- * @param stream The stream to be checked.
- * @return True if reading was successful and stream contains a valid WinAGI version string, false otherwise.
- */
- bool checkWagVersion(Common::SeekableReadStream &stream);
-
- /**
- * Checks if we're at or past the end of the properties stored in the stream.
- * @param stream The stream whose seeking position is to be checked.
- * @return True if stream's seeking position is at or past the end of the properties, false otherwise.
- */
- bool endOfProperties(const Common::SeekableReadStream &stream) const;
-
-// Member variables
-protected:
- PropertyList _propList; ///< List of loaded properties from the file.
- bool _parsedOk; ///< Did the parsing of the file go ok?
-};
-
-} // End of namespace Agi
diff --git a/engines/agos/detection.cpp b/engines/agos/detection.cpp
index f16224dacd..0f5aa2768a 100644
--- a/engines/agos/detection.cpp
+++ b/engines/agos/detection.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/agos/detection.cpp $
+ * $Id:detection.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/agos/detection_tables.h b/engines/agos/detection_tables.h
index 6e499d2724..cb6123dc54 100644
--- a/engines/agos/detection_tables.h
+++ b/engines/agos/detection_tables.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/agos/detection_tables.h $
+ * $Id:detection_tables.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cine/sound.cpp b/engines/cine/sound.cpp
index 4ba083a653..4746e87a66 100644
--- a/engines/cine/sound.cpp
+++ b/engines/cine/sound.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cine/sound.cpp $
+ * $Id:sound.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cine/sound.h b/engines/cine/sound.h
index 719f37f151..4ebda2c236 100644
--- a/engines/cine/sound.h
+++ b/engines/cine/sound.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cine/sound.h $
+ * $Id:sound.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/actor.cpp b/engines/cruise/actor.cpp
index 44b0c9c92d..dd38e15838 100644
--- a/engines/cruise/actor.cpp
+++ b/engines/cruise/actor.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/actor.cpp $
+ * $Id:actor.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/actor.h b/engines/cruise/actor.h
index 43b9b03e87..072eef9581 100644
--- a/engines/cruise/actor.h
+++ b/engines/cruise/actor.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/actor.h $
+ * $Id:actor.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/background.cpp b/engines/cruise/background.cpp
index c375b37b1b..ebf0b78934 100644
--- a/engines/cruise/background.cpp
+++ b/engines/cruise/background.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/background.cpp $
+ * $Id:background.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/background.h b/engines/cruise/background.h
index d506d1663e..b8b9e623c6 100644
--- a/engines/cruise/background.h
+++ b/engines/cruise/background.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/background.h $
+ * $Id:background.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/backgroundIncrust.cpp b/engines/cruise/backgroundIncrust.cpp
index 25713394d9..edaa68b490 100644
--- a/engines/cruise/backgroundIncrust.cpp
+++ b/engines/cruise/backgroundIncrust.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/backgroundIncrust.cpp $
+ * $Id:backgroundIncrust.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/backgroundIncrust.h b/engines/cruise/backgroundIncrust.h
index 6de30978fd..3f61faadae 100644
--- a/engines/cruise/backgroundIncrust.h
+++ b/engines/cruise/backgroundIncrust.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/backgroundIncrust.h $
+ * $Id:backgroundIncrust.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/cell.cpp b/engines/cruise/cell.cpp
index d4b5aaed66..8a7b524a7b 100644
--- a/engines/cruise/cell.cpp
+++ b/engines/cruise/cell.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/cell.cpp $
+ * $Id:cell.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/cell.h b/engines/cruise/cell.h
index c10ab93541..ea2fb7e777 100644
--- a/engines/cruise/cell.h
+++ b/engines/cruise/cell.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/cell.h $
+ * $Id:cell.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/cruise.cpp b/engines/cruise/cruise.cpp
index 9693fb7d03..b427498c6f 100644
--- a/engines/cruise/cruise.cpp
+++ b/engines/cruise/cruise.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/cruise.cpp $
+ * $Id:cruise.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/cruise.h b/engines/cruise/cruise.h
index 73de46c599..cf768d8d57 100644
--- a/engines/cruise/cruise.h
+++ b/engines/cruise/cruise.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/cruise.h $
+ * $Id:cruise.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/cruise_main.cpp b/engines/cruise/cruise_main.cpp
index bd6f341d24..79a699433f 100644
--- a/engines/cruise/cruise_main.cpp
+++ b/engines/cruise/cruise_main.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/cruise_main.cpp $
+ * $Id:cruise_main.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/cruise_main.h b/engines/cruise/cruise_main.h
index c42650a007..324d99f024 100644
--- a/engines/cruise/cruise_main.h
+++ b/engines/cruise/cruise_main.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/cruise_main.h $
+ * $Id:cruise_main.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/ctp.cpp b/engines/cruise/ctp.cpp
index 84e510a53f..07df6029b2 100644
--- a/engines/cruise/ctp.cpp
+++ b/engines/cruise/ctp.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/ctp.cpp $
+ * $Id:ctp.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/ctp.h b/engines/cruise/ctp.h
index 2ea47ce62e..b35523a3a7 100644
--- a/engines/cruise/ctp.h
+++ b/engines/cruise/ctp.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/ctp.h $
+ * $Id:ctp.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/dataLoader.cpp b/engines/cruise/dataLoader.cpp
index 54a0e97732..2212a3bde2 100644
--- a/engines/cruise/dataLoader.cpp
+++ b/engines/cruise/dataLoader.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/dataLoader.cpp $
+ * $Id:dataLoader.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/dataLoader.h b/engines/cruise/dataLoader.h
index 46e4ef447f..6b6bf52cf6 100644
--- a/engines/cruise/dataLoader.h
+++ b/engines/cruise/dataLoader.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/dataLoader.h $
+ * $Id:dataLoader.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/decompiler.cpp b/engines/cruise/decompiler.cpp
index 7adfd00f3e..68beab0846 100644
--- a/engines/cruise/decompiler.cpp
+++ b/engines/cruise/decompiler.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/decompiler.cpp $
+ * $Id:decompiler.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/delphine-unpack.cpp b/engines/cruise/delphine-unpack.cpp
index b1cdc13148..db4188fbfe 100644
--- a/engines/cruise/delphine-unpack.cpp
+++ b/engines/cruise/delphine-unpack.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/delphine-unpack.cpp $
+ * $Id:delphine-unpack.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/detection.cpp b/engines/cruise/detection.cpp
index 2ca83f4046..fc1d864a56 100644
--- a/engines/cruise/detection.cpp
+++ b/engines/cruise/detection.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/detection.cpp $
+ * $Id:detection.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/font.cpp b/engines/cruise/font.cpp
index c94bbc8f82..92064acc53 100644
--- a/engines/cruise/font.cpp
+++ b/engines/cruise/font.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/font.cpp $
+ * $Id:font.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/font.h b/engines/cruise/font.h
index b74482962d..2a75cf28dd 100644
--- a/engines/cruise/font.h
+++ b/engines/cruise/font.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/font.h $
+ * $Id:font.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/fontCharacterTable.cpp b/engines/cruise/fontCharacterTable.cpp
index 2c2dddc479..ce0bec0f0f 100644
--- a/engines/cruise/fontCharacterTable.cpp
+++ b/engines/cruise/fontCharacterTable.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/fontCharacterTable.cpp $
+ * $Id:fontCharacterTable.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/fontCharacterTable.h b/engines/cruise/fontCharacterTable.h
index 0bfe78641a..f7956968ec 100644
--- a/engines/cruise/fontCharacterTable.h
+++ b/engines/cruise/fontCharacterTable.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/fontCharacterTable.h $
+ * $Id:fontCharacterTable.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/function.cpp b/engines/cruise/function.cpp
index 7841a5e4ce..092425bfc7 100644
--- a/engines/cruise/function.cpp
+++ b/engines/cruise/function.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/function.cpp $
+ * $Id:function.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/function.h b/engines/cruise/function.h
index 13eb21ea1f..76100e41ba 100644
--- a/engines/cruise/function.h
+++ b/engines/cruise/function.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/function.h $
+ * $Id:function.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/gfxModule.cpp b/engines/cruise/gfxModule.cpp
index 881bf1d3ca..119f99739e 100644
--- a/engines/cruise/gfxModule.cpp
+++ b/engines/cruise/gfxModule.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/gfxModule.cpp $
+ * $Id:gfxModule.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/gfxModule.h b/engines/cruise/gfxModule.h
index e63b26e29f..7339113f4c 100644
--- a/engines/cruise/gfxModule.h
+++ b/engines/cruise/gfxModule.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/gfxModule.h $
+ * $Id:gfxModule.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/linker.cpp b/engines/cruise/linker.cpp
index 6cd28062d3..0057625e81 100644
--- a/engines/cruise/linker.cpp
+++ b/engines/cruise/linker.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/linker.cpp $
+ * $Id:linker.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/linker.h b/engines/cruise/linker.h
index 808ace75e0..975ed0f322 100644
--- a/engines/cruise/linker.h
+++ b/engines/cruise/linker.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/linker.h $
+ * $Id:linker.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/mainDraw.cpp b/engines/cruise/mainDraw.cpp
index 95142e9edf..3d409d0ba5 100644
--- a/engines/cruise/mainDraw.cpp
+++ b/engines/cruise/mainDraw.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/mainDraw.cpp $
+ * $Id:mainDraw.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/mainDraw.h b/engines/cruise/mainDraw.h
index ad10bcddc6..7ff6ffdc8f 100644
--- a/engines/cruise/mainDraw.h
+++ b/engines/cruise/mainDraw.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/mainDraw.h $
+ * $Id:mainDraw.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/menu.cpp b/engines/cruise/menu.cpp
index 2ea8c4ff8c..e30542cc1b 100644
--- a/engines/cruise/menu.cpp
+++ b/engines/cruise/menu.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/menu.cpp $
+ * $Id:menu.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/menu.h b/engines/cruise/menu.h
index 4e15d15cf1..9a33545224 100644
--- a/engines/cruise/menu.h
+++ b/engines/cruise/menu.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/menu.h $
+ * $Id:menu.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/mouse.cpp b/engines/cruise/mouse.cpp
index a918e0536f..c9cec8f72a 100644
--- a/engines/cruise/mouse.cpp
+++ b/engines/cruise/mouse.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/mouse.cpp $
+ * $Id:mouse.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/mouse.h b/engines/cruise/mouse.h
index a6911ce27e..c7ef2a69c5 100644
--- a/engines/cruise/mouse.h
+++ b/engines/cruise/mouse.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/mouse.h $
+ * $Id:mouse.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/object.cpp b/engines/cruise/object.cpp
index 22e81dea90..ce4de2a12b 100644
--- a/engines/cruise/object.cpp
+++ b/engines/cruise/object.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/object.cpp $
+ * $Id:object.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/object.h b/engines/cruise/object.h
index 546d2bc440..feec666687 100644
--- a/engines/cruise/object.h
+++ b/engines/cruise/object.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/object.h $
+ * $Id:object.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/overlay.cpp b/engines/cruise/overlay.cpp
index 2b83e0f2b2..c1b35f61f6 100644
--- a/engines/cruise/overlay.cpp
+++ b/engines/cruise/overlay.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/overlay.cpp $
+ * $Id:overlay.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/overlay.h b/engines/cruise/overlay.h
index 5d2e4e890e..03db06fada 100644
--- a/engines/cruise/overlay.h
+++ b/engines/cruise/overlay.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/overlay.h $
+ * $Id:overlay.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/perso.cpp b/engines/cruise/perso.cpp
index e0cd85f2fe..a95607a2f1 100644
--- a/engines/cruise/perso.cpp
+++ b/engines/cruise/perso.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/perso.cpp $
+ * $Id:perso.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/perso.h b/engines/cruise/perso.h
index aa9f59a1a3..0d5676a4c8 100644
--- a/engines/cruise/perso.h
+++ b/engines/cruise/perso.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/perso.h $
+ * $Id:perso.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/polys.cpp b/engines/cruise/polys.cpp
index a2eea8a9a7..83192b0dda 100644
--- a/engines/cruise/polys.cpp
+++ b/engines/cruise/polys.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/polys.cpp $
+ * $Id:polys.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/polys.h b/engines/cruise/polys.h
index 53ce4672cd..b5da8dd241 100644
--- a/engines/cruise/polys.h
+++ b/engines/cruise/polys.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/polys.h $
+ * $Id:polys.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/saveload.cpp b/engines/cruise/saveload.cpp
index b5ec064d4b..d6b2c9ec93 100644
--- a/engines/cruise/saveload.cpp
+++ b/engines/cruise/saveload.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/saveload.cpp $
+ * $Id:saveload.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/saveload.h b/engines/cruise/saveload.h
index 5a719066c5..de97f24b64 100644
--- a/engines/cruise/saveload.h
+++ b/engines/cruise/saveload.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/saveload.h $
+ * $Id:saveload.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/script.cpp b/engines/cruise/script.cpp
index d3d88a8b5f..dc1b12f736 100644
--- a/engines/cruise/script.cpp
+++ b/engines/cruise/script.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/script.cpp $
+ * $Id:script.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/script.h b/engines/cruise/script.h
index e5d21b1ba0..ca7d812836 100644
--- a/engines/cruise/script.h
+++ b/engines/cruise/script.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/script.h $
+ * $Id:script.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/stack.cpp b/engines/cruise/stack.cpp
index 1639ba3942..7622564503 100644
--- a/engines/cruise/stack.cpp
+++ b/engines/cruise/stack.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/stack.cpp $
+ * $Id:stack.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/stack.h b/engines/cruise/stack.h
index 831c07e217..1adb3540cb 100644
--- a/engines/cruise/stack.h
+++ b/engines/cruise/stack.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/stack.h $
+ * $Id:stack.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/stringSupport.cpp b/engines/cruise/stringSupport.cpp
index 791f203d9b..54747104ff 100644
--- a/engines/cruise/stringSupport.cpp
+++ b/engines/cruise/stringSupport.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/stringSupport.cpp $
+ * $Id:stringSupport.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/stringSupport.h b/engines/cruise/stringSupport.h
index 841e2dd496..531fe56aca 100644
--- a/engines/cruise/stringSupport.h
+++ b/engines/cruise/stringSupport.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/stringSupport.h $
+ * $Id:stringSupport.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/various.cpp b/engines/cruise/various.cpp
index 5c6134c374..e4c908af5f 100644
--- a/engines/cruise/various.cpp
+++ b/engines/cruise/various.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/various.cpp $
+ * $Id:various.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/various.h b/engines/cruise/various.h
index fe18e5abd6..f6e07e00e7 100644
--- a/engines/cruise/various.h
+++ b/engines/cruise/various.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/various.h $
+ * $Id:various.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/vars.cpp b/engines/cruise/vars.cpp
index 094680f0bb..1a3d5f0a27 100644
--- a/engines/cruise/vars.cpp
+++ b/engines/cruise/vars.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/vars.cpp $
+ * $Id:vars.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/vars.h b/engines/cruise/vars.h
index dbace8bdf3..63a15f24e4 100644
--- a/engines/cruise/vars.h
+++ b/engines/cruise/vars.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/vars.h $
+ * $Id:vars.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/volume.cpp b/engines/cruise/volume.cpp
index b32ffb0ccd..901ac4a7a5 100644
--- a/engines/cruise/volume.cpp
+++ b/engines/cruise/volume.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/volume.cpp $
+ * $Id:volume.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/cruise/volume.h b/engines/cruise/volume.h
index 0f9e489236..7881f6c872 100644
--- a/engines/cruise/volume.h
+++ b/engines/cruise/volume.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/cruise/volume.h $
+ * $Id:volume.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/gob/init_v3.cpp b/engines/gob/init_v3.cpp
index 61e7fb61d0..6f1af258ca 100644
--- a/engines/gob/init_v3.cpp
+++ b/engines/gob/init_v3.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/gob/init_v3.cpp $
+ * $Id:init_v3.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/kyra/detection.cpp b/engines/kyra/detection.cpp
index 46bcc1e85f..e1b5a2b7c3 100644
--- a/engines/kyra/detection.cpp
+++ b/engines/kyra/detection.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/kyra/detection.cpp $
+ * $Id:detection.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*/
#include "kyra/kyra.h"
diff --git a/engines/kyra/kyra_v1.cpp b/engines/kyra/kyra_v1.cpp
index 3246e0f426..7fc13a6c38 100644
--- a/engines/kyra/kyra_v1.cpp
+++ b/engines/kyra/kyra_v1.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/kyra/kyra_v1.cpp $
+ * $Id:kyra_v1.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/kyra/kyra_v1.h b/engines/kyra/kyra_v1.h
index 5afa248981..e103086dc4 100644
--- a/engines/kyra/kyra_v1.h
+++ b/engines/kyra/kyra_v1.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/kyra/kyra_v1.h $
+ * $Id:kyra_v1.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/kyra/kyra_v2.cpp b/engines/kyra/kyra_v2.cpp
index 03d1f8e27e..6857b3ac09 100644
--- a/engines/kyra/kyra_v2.cpp
+++ b/engines/kyra/kyra_v2.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/kyra/kyra_v2.cpp $
+ * $Id:kyra_v2.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/kyra/kyra_v2.h b/engines/kyra/kyra_v2.h
index e3dac3f0d5..a002baec19 100644
--- a/engines/kyra/kyra_v2.h
+++ b/engines/kyra/kyra_v2.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/kyra/kyra_v2.h $
+ * $Id:kyra_v2.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/kyra/kyra_v3.cpp b/engines/kyra/kyra_v3.cpp
index f035158892..eee901598e 100644
--- a/engines/kyra/kyra_v3.cpp
+++ b/engines/kyra/kyra_v3.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/kyra/kyra_v3.cpp $
+ * $Id:kyra_v3.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/kyra/kyra_v3.h b/engines/kyra/kyra_v3.h
index 5616fcbf0e..eda382d89a 100644
--- a/engines/kyra/kyra_v3.h
+++ b/engines/kyra/kyra_v3.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/kyra/kyra_v3.h $
+ * $Id:kyra_v3.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/kyra/resource.cpp b/engines/kyra/resource.cpp
index 7c15cee2f9..319845c22c 100644
--- a/engines/kyra/resource.cpp
+++ b/engines/kyra/resource.cpp
@@ -82,8 +82,8 @@ Resource::Resource(KyraEngine *vm) {
FSList fslist;
FilesystemNode dir(ConfMan.get("path"));
- if (!dir.listDir(fslist, FilesystemNode::kListFilesOnly))
- error("invalid game path '%s'", dir.path().c_str());
+ if (!dir.getChildren(fslist, FilesystemNode::kListFilesOnly))
+ error("invalid game path '%s'", dir.getPath().c_str());
if (_vm->game() == GI_KYRA1 && _vm->gameFlags().isTalkie) {
static const char *list[] = {
@@ -96,7 +96,7 @@ Resource::Resource(KyraEngine *vm) {
Common::for_each(_pakfiles.begin(), _pakfiles.end(), Common::bind2nd(Common::mem_fun(&ResourceFile::protect), true));
} else {
for (FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) {
- Common::String filename = file->name();
+ Common::String filename = file->getName();
filename.toUppercase();
// No real PAK file!
@@ -104,8 +104,8 @@ Resource::Resource(KyraEngine *vm) {
continue;
if (filename.hasSuffix("PAK") || filename.hasSuffix("APK")) {
- if (!loadPakFile(file->name()))
- error("couldn't open pakfile '%s'", file->name().c_str());
+ if (!loadPakFile(file->getName()))
+ error("couldn't open pakfile '%s'", file->getName().c_str());
}
}
diff --git a/engines/lure/detection.cpp b/engines/lure/detection.cpp
index b4a69bfd43..d072a009d5 100644
--- a/engines/lure/detection.cpp
+++ b/engines/lure/detection.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/lure/detection.cpp $
+ * $Id:detection.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/lure/fights.cpp b/engines/lure/fights.cpp
deleted file mode 100644
index 4c478bbc17..0000000000
--- a/engines/lure/fights.cpp
+++ /dev/null
@@ -1,583 +0,0 @@
-/* ScummVM - Scumm Interpreter
- * Copyright (C) 2005-2006 The ScummVM project
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * $URL$
- * $Id$
- *
- */
-
-#include "lure/fights.h"
-#include "lure/luredefs.h"
-#include "lure/game.h"
-#include "lure/res.h"
-#include "lure/room.h"
-#include "lure/sound.h"
-
-namespace Lure {
-
-// Three records containing initial states for player, pig, and Skorl
-FighterRecord fighterList[3] = {
- {0x23C, 0x440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
- {0, 0x441, 0x1092, 0, 3, 0, 0, 0, 0xB94, 8, 0xA34, 0x8D4, 0xD06, 0,
- 0, 0, 0, 0, 0xDDC, PLAYER_ID},
- {0, 0x446, 0x1092, 0, 3, 0, 0, 0, 0xB94, 8, 0xA34, 0x8D4, 0xD06, 0,
- 0, 0, 0, 0, 0xDDC, PLAYER_ID}
-};
-
-FightsManager *int_fights = NULL;
-
-FightsManager::FightsManager() {
- int_fights = this;
- _fightData = NULL;
- _mouseFlags = 0;
-}
-
-FightsManager::~FightsManager() {
- if (_fightData != NULL)
- // Release the fight data
- delete _fightData;
-}
-
-FightsManager &FightsManager::getReference() {
- return *int_fights;
-}
-
-FighterRecord &FightsManager::getDetails(uint16 hotspotId) {
- if (hotspotId == PLAYER_ID) return fighterList[0];
- else if (hotspotId == PIG_ID) return fighterList[1];
- else if (hotspotId == SKORL_FIGHTER_ID) return fighterList[2];
- error("Unknown NPC %d attempted to fight", hotspotId);
-}
-
-// Sets up the data for the pig fight in the cave
-
-void FightsManager::setupPigFight() {
- Resources &res = Resources::getReference();
- Hotspot *player = res.getActiveHotspot(PLAYER_ID);
- player->setSkipFlag(false);
- player->resource()->colourOffset = 16;
- player->setTickProc(PLAYER_FIGHT_TICK_PROC_ID);
- player->setSize(48, 53);
- player->setAnimation(PLAYER_FIGHT_ANIM_ID);
- player->resource()->width = 48;
- player->resource()->height = 53;
-
- player->setOccupied(false);
- player->setPosition(262, 94);
- FighterRecord &rec = getDetails(PLAYER_ID);
- rec.fwhits = 0;
- rec.fwtrue_x = 262;
- rec.fwtrue_y = 53;
- rec.fwseq_ad = FIGHT_PLAYER_INIT;
- rec.fwenemy_ad = PIG_ID;
-}
-
-void FightsManager::setupSkorlFight() {
- Resources &res = Resources::getReference();
- Hotspot *player = res.getActiveHotspot(PLAYER_ID);
- FighterRecord &rec = getDetails(PLAYER_ID);
-
- setupPigFight();
-
- rec.fwenemy_ad = SKORL_FIGHTER_ID;
- rec.fwweapon = 0x445;
- rec.fwtrue_x = 282;
- rec.fwtrue_y = 136;
- player->setPosition(282, 136);
- player->resource()->colourOffset = 96;
-}
-
-bool FightsManager::isFighting() {
- FighterRecord &rec = getDetails(PLAYER_ID);
- return rec.fwhits == 0;
-}
-
-void FightsManager::fightLoop() {
- Resources &res = Resources::getReference();
- Events &events = Events::getReference();
- FighterRecord &playerFight = getDetails(PLAYER_ID);
-
- // Loop for the duration of the battle
- while (!events.quitFlag && (playerFight.fwhits != GENERAL_MAGIC_ID)) {
- checkEvents();
-
- Game::getReference().tick();
- Room::getReference().update();
- res.delayList().tick();
- Screen::getReference().update();
-
- g_system->delayMillis(20);
- }
-}
-
-void FightsManager::saveToStream(Common::WriteStream *stream) {
- for (int fighterCtr = 0; fighterCtr < 3; ++fighterCtr) {
- FighterRecord &rec = fighterList[fighterCtr];
-
- stream->writeUint16LE(rec.fwseq_no);
- stream->writeUint16LE(rec.fwseq_ad);
- stream->writeUint16LE(rec.fwdist);
- stream->writeUint16LE(rec.fwwalk_roll);
- stream->writeUint16LE(rec.fwmove_number);
- stream->writeUint16LE(rec.fwhits);
- }
-}
-
-void FightsManager::loadFromStream(Common::ReadStream *stream) {
- for (int fighterCtr = 0; fighterCtr < 3; ++fighterCtr) {
- FighterRecord &rec = fighterList[fighterCtr];
-
- rec.fwseq_no = stream->readUint16LE();
- rec.fwseq_ad = stream->readUint16LE();
- rec.fwdist = stream->readUint16LE();
- rec.fwwalk_roll = stream->readUint16LE();
- rec.fwmove_number = stream->readUint16LE();
- rec.fwhits = stream->readUint16LE();
- }
-}
-
-const CursorType moveList[] = {CURSOR_LEFT_ARROW, CURSOR_FIGHT_UPPER,
- CURSOR_FIGHT_MIDDLE, CURSOR_FIGHT_LOWER, CURSOR_RIGHT_ARROW};
-
-struct KeyMapping {
- Common::KeyCode keycode;
- uint8 moveNumber;
-};
-
-const KeyMapping keyList[] = {
- {Common::KEYCODE_LEFT, 10}, {Common::KEYCODE_RIGHT, 14}, {Common::KEYCODE_7, 11}, {Common::KEYCODE_4, 12},
- {Common::KEYCODE_1, 13}, {Common::KEYCODE_9, 6}, {Common::KEYCODE_6, 7}, {Common::KEYCODE_3, 8}, {Common::KEYCODE_INVALID, 0}};
-
-void FightsManager::checkEvents() {
- Events &events = Events::getReference();
- if (!events.pollEvent()) return;
- FighterRecord &rec = getDetails(PLAYER_ID);
- Hotspot *player = Resources::getReference().getActiveHotspot(PLAYER_ID);
- Mouse &mouse = Mouse::getReference();
-
- int moveNumber = 0;
-
- if (events.type() == Common::EVENT_KEYDOWN) {
- switch (events.event().kbd.keycode) {
- case Common::KEYCODE_ESCAPE:
- events.quitFlag = true;
- break;
-
- default:
- // Scan through the mapping list for a move for the keypress
- const KeyMapping *keyPtr = &keyList[0];
- while ((keyPtr->keycode != Common::KEYCODE_INVALID) &&
- (keyPtr->keycode != events.event().kbd.keycode))
- ++keyPtr;
- if (keyPtr->keycode != Common::KEYCODE_INVALID)
- moveNumber = keyPtr->moveNumber;
- }
- }
-
- if (events.type() == Common::EVENT_MOUSEMOVE) {
- Point mPos = events.event().mouse;
- if (mPos.x < rec.fwtrue_x - 12)
- mouse.setCursorNum(CURSOR_LEFT_ARROW);
- else if (mPos.x > rec.fwtrue_x + player->width())
- mouse.setCursorNum(CURSOR_RIGHT_ARROW);
- else if (mPos.y < player->y() + 4)
- mouse.setCursorNum(CURSOR_FIGHT_UPPER);
- else if (mPos.y < player->y() + 38)
- mouse.setCursorNum(CURSOR_FIGHT_MIDDLE);
- else
- mouse.setCursorNum(CURSOR_FIGHT_LOWER);
- }
-
- if ((events.type() == Common::EVENT_LBUTTONDOWN) ||
- (events.type() == Common::EVENT_RBUTTONDOWN) ||
- (events.type() == Common::EVENT_LBUTTONUP) ||
- (events.type() == Common::EVENT_RBUTTONUP)) {
- _mouseFlags = 0;
- if (events.type() == Common::EVENT_LBUTTONDOWN) ++_mouseFlags;
- if (events.type() == Common::EVENT_RBUTTONDOWN) _mouseFlags += 2;
- }
-
- // Get the correct base index for the move
- while ((moveNumber < 5) && (moveList[moveNumber] != mouse.getCursorNum()))
- ++moveNumber;
- if (moveNumber < 5) {
- if (_mouseFlags == 1)
- // Left mouse
- moveNumber += 10;
- else if (_mouseFlags == 2)
- // Right mouse
- moveNumber += 5;
- }
-
- rec.fwmove_number = moveNumber;
-
- if (rec.fwmove_number >= 5)
- debugC(ERROR_INTERMEDIATE, kLureDebugFights,
- "Player fight move number=%d", rec.fwmove_number);
-}
-
-void FightsManager::fighterAnimHandler(Hotspot &h) {
- FighterRecord &fighter = getDetails(h.hotspotId());
- FighterRecord &opponent = getDetails(fighter.fwenemy_ad);
- FighterRecord &player = getDetails(PLAYER_ID);
-
- fetchFighterDistance(fighter, opponent);
-
- if (fighter.fwseq_ad) {
- fightHandler(h, fighter.fwseq_ad);
- return;
- }
-
- uint16 seqNum = 0;
- if (fighter.fwdist != FIGHT_DISTANCE) {
- seqNum = getFighterMove(fighter, fighter.fwnot_near);
- } else {
- uint16 offset = (fighter.fwhits * fighter.fwdef_len) + fighter.fwdefend_adds + 4;
-
- // Scan for the given sequence
- uint16 v = getWord(offset);
- while ((v != 0) && (v != player.fwseq_no)) {
- offset += 4;
- v = getWord(offset);
- }
-
- if (v == 0) {
- // No sequence match found
- seqNum = getFighterMove(fighter, fighter.fwattack_table);
- } else {
- v = getWord(offset + 2);
- seqNum = getFighterMove(fighter, fighter.fwdefend_table);
-
- if (seqNum == 0)
- seqNum = getFighterMove(fighter, fighter.fwattack_table);
- else if (seqNum == 0xff)
- seqNum = v;
- }
- }
-
- // Set the sequence and pass onto the fight handler
- fighter.fwseq_no = seqNum;
- fighter.fwseq_ad = getWord(FIGHT_TBL_1 + (seqNum << 1));
-}
-
-void FightsManager::playerAnimHandler(Hotspot &h) {
- FighterRecord &fighter = getDetails(h.hotspotId());
- fightHandler(h, fighter.fwseq_ad);
-}
-
-void FightsManager::fightHandler(Hotspot &h, uint16 moveOffset) {
- Resources &res = Resources::getReference();
- FighterRecord &fighter = getDetails(h.hotspotId());
- FighterRecord &opponent = getDetails(fighter.fwenemy_ad);
-
- uint16 v1, v2;
- bool breakFlag = false;
-
- while (!breakFlag) {
- if (moveOffset == 0) {
- // Player is doing nothing, so check the move number
- moveOffset = getWord(FIGHT_PLAYER_MOVE_TABLE + (fighter.fwmove_number << 1));
-
- debugC(ERROR_DETAILED, kLureDebugFights,
- "Hotspot %xh fight move=%d, new offset=%xh",
- h.hotspotId(), fighter.fwmove_number, moveOffset);
-
- if (moveOffset == 0)
- return;
-
- fighter.fwseq_no = fighter.fwmove_number;
- fighter.fwseq_ad = moveOffset;
- }
-
- uint16 moveValue = getWord(moveOffset);
- debugC(ERROR_DETAILED, kLureDebugFights,
- "Hotspot %xh script offset=%xh value=%xh",
- h.hotspotId(), moveOffset, moveValue);
- moveOffset += sizeof(uint16);
-
- if ((moveValue & 0x8000) == 0) {
- // Set frame to specified number
- h.setFrameNumber(moveValue);
-
- // Set the new fighter position
- int16 newX, newY;
- newX = h.x() + (int16)getWord(moveOffset);
- if (newX < 32) newX = 32;
- if (newX > 240) newX = 240;
- newY = h.y() + (int16)getWord(moveOffset + 2);
- h.setPosition(newX, newY);
-
- if (fighter.fwweapon != 0) {
- Hotspot *weaponHotspot = res.getActiveHotspot(fighter.fwweapon);
- assert(weaponHotspot);
- weaponHotspot->setFrameNumber(getWord(moveOffset + 4));
- weaponHotspot->setPosition(weaponHotspot->x() +
- (int16)getWord(moveOffset + 6),
- weaponHotspot->y() + getWord(moveOffset + 8));
- }
-
- moveOffset += 5 * sizeof(uint16);
- fighter.fwseq_ad = moveOffset;
- return;
- }
-
- switch (moveValue)
- {
- case 0xFFFA:
- // Walk left
- if ((fighter.fwmove_number == 5) || (fighter.fwmove_number == 10)) {
- if (h.x() < 32) {
- breakFlag = true;
- } else {
- h.setPosition(h.x() - 4, h.y());
- fighter.fwtrue_x = h.x();
- if (fetchFighterDistance(fighter, opponent) < FIGHT_DISTANCE) {
- h.setPosition(h.x() + 4, h.y());
- fighter.fwtrue_x += 4;
- breakFlag = true;
- } else {
- removeWeapon(fighter.fwweapon);
- fighter.fwtrue_x = h.x();
- fighter.fwtrue_y = h.y();
-
- uint16 frameNum = (fighter.fwwalk_roll == 7) ? 0 :
- fighter.fwwalk_roll + 1;
- fighter.fwwalk_roll = frameNum;
- fighter.fwseq_ad = moveOffset;
- h.setFrameNumber(frameNum);
- return;
- }
- }
- } else {
- // Signal to start a new action
- moveOffset = 0;
- }
- break;
-
- case 0xFFF9:
- // Walk right
- if ((fighter.fwmove_number == 9) || (fighter.fwmove_number == 14)) {
- if (h.x() >= 240) {
- breakFlag = true;
- } else {
- removeWeapon(fighter.fwweapon);
- h.setPosition(h.x() + 4, h.y());
- fighter.fwtrue_x = h.x();
- fighter.fwtrue_y = h.y();
-
- fighter.fwwalk_roll = (fighter.fwwalk_roll == 0) ? 7 :
- fighter.fwwalk_roll - 1;
- fighter.fwseq_ad = moveOffset;
- h.setFrameNumber(fighter.fwwalk_roll);
- return;
- }
-
- } else {
- // Signal to start a new action
- moveOffset = 0;
- }
- break;
-
- case 0xFFEB:
- // Enemy right
- removeWeapon(fighter.fwweapon);
- h.setPosition(h.x() + 4, h.y());
- fighter.fwtrue_x = h.x();
-
- if (fetchFighterDistance(fighter, opponent) < FIGHT_DISTANCE) {
- h.setPosition(h.x() - 4, h.y());
- fighter.fwtrue_x -= 4;
- fighter.fwseq_ad = 0;
- h.setFrameNumber(8);
- } else {
- h.setFrameNumber(getWord(moveOffset));
- moveOffset += sizeof(uint16);
- fighter.fwseq_ad = moveOffset;
- }
- return;
-
- case 0xFFFB:
- // End of sequence
- breakFlag = true;
- break;
-
- case 0xFFF8:
- // Set fight address
- moveOffset = getWord(moveOffset);
- break;
-
- case 0xFFFF:
- case 0xFFFE:
- if (moveValue == 0xffff)
- // Set the animation record
- h.setAnimation(getWord(moveOffset));
- else
- // New set animation record
- h.setAnimation(getWord(fighter.fwheader_list + (getWord(moveOffset) << 1)));
- h.setFrameNumber(0);
- moveOffset += sizeof(uint16);
- break;
-
- case 0xFFF7:
- // On hold
- if (getWord(moveOffset) == fighter.fwmove_number)
- moveOffset = getWord(moveOffset + 2);
- else
- moveOffset += 2 * sizeof(uint16);
- break;
-
- case 0xFFF6:
- // Not hold
- if (getWord(moveOffset) == fighter.fwmove_number)
- moveOffset += 2 * sizeof(uint16);
- else
- moveOffset = getWord(moveOffset + 2);
- break;
-
- case 0xFFF4:
- // End sequence
- fighter.fwseq_no = 0;
- break;
-
- case 0xFFF2:
- // Set defend
- fighter.fwblocking = getWord(moveOffset);
- moveOffset += sizeof(uint16);
- break;
-
- case 0xFFF1:
- // If blocking
- v1 = getWord(moveOffset);
- v2 = getWord(moveOffset + 2);
- moveOffset += 2 * sizeof(uint16);
-
- if (v1 == opponent.fwblocking) {
- Sound.playSound(42);
- moveOffset = v2;
- }
- break;
-
- case 0xFFF0:
- // Check hit
- v1 = getWord(moveOffset);
- moveOffset += sizeof(uint16);
- if (fighter.fwdist <= FIGHT_DISTANCE) {
- if (h.hotspotId() == PLAYER_ID) {
- // Player hits opponent
- Sound.playSound(52);
-
- if (opponent.fwhits != 5) {
- opponent.fwseq_ad = v1;
- if (++opponent.fwhit_value != opponent.fwhit_rate) {
- opponent.fwhit_value = 0;
- if (++opponent.fwhits == 5)
- opponent.fwseq_ad = opponent.fwdie_seq;
- }
- }
- } else {
- // Opponent hit player
- Sound.playSound(37);
- opponent.fwseq_ad = v1;
- if (++opponent.fwhits == 10) {
- // Player has been killed
- fighter.fwhits = 10;
- opponent.fwseq_ad = FIGHT_PLAYER_DIES;
- Sound.playSound(36);
- }
- }
- }
- break;
-
- case 0xFFEF:
- // Save co-ordinates
- fighter.fwtrue_x = h.x();
- fighter.fwtrue_y = h.y();
- break;
-
- case 0xFFEE:
- // Restore co-ordinates
- h.setPosition(fighter.fwtrue_x, fighter.fwtrue_y);
- break;
-
- case 0xFFED:
- // End of game
- getDetails(PLAYER_ID).fwhits = GENERAL_MAGIC_ID;
- Game::getReference().setState(GS_RESTORE_RESTART);
- return;
-
- case 0xFFEC:
- // Enemy has been killed
- enemyKilled();
- break;
-
- case 0xFFEA:
- // Fight sound
- Sound.playSound(getWord(moveOffset));
- moveOffset += sizeof(uint16);
- break;
-
- default:
- error("Unknown fight command %xh", moveValue);
- }
- }
-
- fighter.fwseq_no = 0;
- fighter.fwseq_ad = 0;
- if (h.hotspotId() == PLAYER_ID)
- _mouseFlags = 0;
-}
-
-uint16 FightsManager::fetchFighterDistance(FighterRecord &f1, FighterRecord &f2) {
- f1.fwdist = ABS(f1.fwtrue_x - f2.fwtrue_x) & 0xFFF8;
- return f1.fwdist;
-}
-
-void FightsManager::enemyKilled() {
- Resources &res = Resources::getReference();
- Hotspot *playerHotspot = res.getActiveHotspot(PLAYER_ID);
- FighterRecord &playerRec = getDetails(PLAYER_ID);
-
- playerHotspot->setTickProc(PLAYER_TICK_PROC_ID);
- playerRec.fwhits = GENERAL_MAGIC_ID;
- playerHotspot->resource()->colourOffset = 128;
- playerHotspot->setSize(32, 48);
- playerHotspot->resource()->width = 32;
- playerHotspot->resource()->height = 48;
- playerHotspot->setAnimation(PLAYER_ANIM_ID);
- playerHotspot->setPosition(playerHotspot->x(), playerHotspot->y() + 5);
- playerHotspot->setDirection(LEFT);
-
- if (playerHotspot->roomNumber() == 6) {
- Dialog::show(0xc9f);
- HotspotData *axeHotspot = res.getHotspot(0x2738);
- axeHotspot->roomNumber = PLAYER_ID;
- axeHotspot->flags |= HOTSPOTFLAG_FOUND;
- }
-}
-
-// Makes sure the given weapon is off-screen
-void FightsManager::removeWeapon(uint16 weaponId) {
- Hotspot *weaponHotspot = Resources::getReference().getActiveHotspot(weaponId);
- weaponHotspot->setPosition(-32, -32);
-}
-
-uint16 FightsManager::getFighterMove(FighterRecord &rec, uint16 baseOffset) {
- int actionIndex = _rnd.getRandomNumber(31);
- return getByte(baseOffset + (rec.fwhits << 5) + actionIndex);
-}
-
-} // end of namespace Lure
diff --git a/engines/lure/fights.h b/engines/lure/fights.h
deleted file mode 100644
index 048949f2b6..0000000000
--- a/engines/lure/fights.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/* ScummVM - Scumm Interpreter
- * Copyright (C) 2005-2006 The ScummVM project
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * $URL$
- * $Id$
- *
- */
-
-#ifndef LURE_FIGHT_H
-#define LURE_FIGHT_H
-
-#include "lure/luredefs.h"
-#include "lure/hotspots.h"
-#include "lure/palette.h"
-#include "common/singleton.h"
-#include "common/endian.h"
-
-namespace Lure {
-
-struct FighterRecord {
- uint16 fwheader_list;
- uint16 fwweapon;
- uint16 fwdie_seq;
- uint16 fwhit_value;
- uint16 fwhit_rate;
- int16 fwtrue_x;
- int16 fwtrue_y;
- uint16 fwblocking;
- uint16 fwattack_table;
- uint16 fwdef_len;
- uint16 fwdefend_table;
- uint16 fwnot_near;
- uint16 fwdefend_adds;
- uint16 fwseq_no;
- uint16 fwdist;
- uint16 fwwalk_roll;
- uint16 fwmove_number;
- uint16 fwhits;
- uint16 fwseq_ad;
- uint16 fwenemy_ad;
-};
-
-// Constant references into the fight data
-#define FIGHT_TBL_1 0x8b8
-#define FIGHT_PLAYER_MOVE_TABLE 0xDAA
-#define FIGHT_PLAYER_INIT 0xDC8
-#define FIGHT_PLAYER_DIES 0xF46
-
-#define FIGHT_DISTANCE 32
-
-class FightsManager {
-private:
- MemoryBlock *_fightData;
- Common::RandomSource _rnd;
- uint8 _mouseFlags;
-
- FighterRecord &getDetails(uint16 hotspotId);
- uint16 fetchFighterDistance(FighterRecord &f1, FighterRecord &f2);
- void removeWeapon(uint16 weaponId);
- void enemyKilled();
- uint16 getFighterMove(FighterRecord &rec, uint16 baseOffset);
- void checkEvents();
- void fightHandler(Hotspot &h, uint16 moveOffset);
-
- inline uint16 getWord(uint16 offset) {
- if (!_fightData)
- _fightData = Disk::getReference().getEntry(FIGHT_DATA_RESOURCE_ID);
- if (offset >= _fightData->size() - 1) error("Invalid fight data index");
- return READ_LE_UINT16(_fightData->data() + offset);
- }
- inline uint8 getByte(uint16 offset) {
- if (!_fightData)
- _fightData = Disk::getReference().getEntry(FIGHT_DATA_RESOURCE_ID);
- if (offset >= _fightData->size()) error("Invalid fight data index");
- return _fightData->data()[offset];
- }
-public:
- FightsManager();
- ~FightsManager();
- static FightsManager &getReference();
-
- void setupPigFight();
- void setupSkorlFight();
- bool isFighting();
- void fightLoop();
- void saveToStream(Common::WriteStream *stream);
- void loadFromStream(Common::ReadStream *stream);
-
- void fighterAnimHandler(Hotspot &h);
- void playerAnimHandler(Hotspot &h);
-};
-
-#define Fights FightsManager::getReference()
-
-} // End of namespace Lure
-
-#endif
diff --git a/engines/lure/sound.cpp b/engines/lure/sound.cpp
deleted file mode 100644
index 6961e4c7cc..0000000000
--- a/engines/lure/sound.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-/* ScummVM - Scumm Interpreter
- * Copyright (C) 2005-2006 The ScummVM project
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * $URL$
- * $Id$
- *
- */
-
-#include "lure/sound.h"
-
-DECLARE_SINGLETON(Lure::SoundManager);
-
-namespace Lure {
-
-void SoundManager::killSounds() {
-
-}
-
-void SoundManager::playSound(uint16 soundId) {
-
-}
-
-} // end of namespace Lure
diff --git a/engines/lure/sound.h b/engines/lure/sound.h
deleted file mode 100644
index 4a7422d77f..0000000000
--- a/engines/lure/sound.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ScummVM - Scumm Interpreter
- * Copyright (C) 2005-2006 The ScummVM project
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * $URL$
- * $Id$
- *
- */
-
-#ifndef LURE_SOUND_H
-#define LURE_SOUND_H
-
-#include "lure/luredefs.h"
-#include "common/singleton.h"
-
-namespace Lure {
-
-class SoundManager: public Common::Singleton<SoundManager> {
-public:
- static void killSounds();
- static void playSound(uint16 soundId);
-};
-
-} // End of namespace Lure
-
-#define Sound (::Lure::SoundManager::instance())
-
-#endif
diff --git a/engines/parallaction/font.cpp b/engines/parallaction/font.cpp
index 3bc7835888..56c26b7b4f 100644
--- a/engines/parallaction/font.cpp
+++ b/engines/parallaction/font.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/parallaction/font.cpp $
+ * $Id:font.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/parallaction/sound.cpp b/engines/parallaction/sound.cpp
index 9976ec13a8..13b989e202 100644
--- a/engines/parallaction/sound.cpp
+++ b/engines/parallaction/sound.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/parallaction/sound.cpp $
+ * $Id:sound.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/parallaction/sound.h b/engines/parallaction/sound.h
index 920a804226..f244bd4070 100644
--- a/engines/parallaction/sound.h
+++ b/engines/parallaction/sound.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/parallaction/sound.h $
+ * $Id:sound.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/queen/queen.cpp b/engines/queen/queen.cpp
index bbb186d0ae..c1e909ffdb 100644
--- a/engines/queen/queen.cpp
+++ b/engines/queen/queen.cpp
@@ -73,7 +73,7 @@ GameList Engine_QUEEN_detectGames(const FSList &fslist) {
if (file->isDirectory()) {
continue;
}
- if (file->name().equalsIgnoreCase("queen.1") || file->name().equalsIgnoreCase("queen.1c")) {
+ if (file->getName().equalsIgnoreCase("queen.1") || file->getName().equalsIgnoreCase("queen.1c")) {
Common::File dataFile;
if (!dataFile.open(*file)) {
continue;
diff --git a/engines/saga/detection.cpp b/engines/saga/detection.cpp
index 2096ca9af1..9b9a0ca872 100644
--- a/engines/saga/detection.cpp
+++ b/engines/saga/detection.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/saga/detection.cpp $
+ * $Id:detection.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/saga/detection_tables.h b/engines/saga/detection_tables.h
index 8cef19d37f..631a1a4e83 100644
--- a/engines/saga/detection_tables.h
+++ b/engines/saga/detection_tables.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/saga/detection_tables.h $
+ * $Id:detection_tables.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/saga/displayinfo.h b/engines/saga/displayinfo.h
index 3e1845abba..83bc536959 100644
--- a/engines/saga/displayinfo.h
+++ b/engines/saga/displayinfo.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/saga/displayinfo.h $
+ * $Id:displayinfo.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/scumm/detection.cpp b/engines/scumm/detection.cpp
index 2d260a9908..8624f80fe7 100644
--- a/engines/scumm/detection.cpp
+++ b/engines/scumm/detection.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/scumm/detection.cpp $
+ * $Id:detection.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
@@ -194,7 +194,7 @@ static bool testGame(const GameSettings *g, const DescMap &fileMD5Map, const Com
// the first match is used.
static bool searchFSNode(const FSList &fslist, const Common::String &name, FilesystemNode &result) {
for (FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) {
- if (!scumm_stricmp(file->name().c_str(), name.c_str())) {
+ if (!scumm_stricmp(file->getName().c_str(), name.c_str())) {
result = *file;
return true;
}
@@ -220,7 +220,7 @@ static Common::Language detectLanguage(const FSList &fslist, byte id) {
FSList tmpList;
if (searchFSNode(fslist, "RESOURCE", resDir)
&& resDir.isDirectory()
- && resDir.listDir(tmpList, FilesystemNode::kListFilesOnly)
+ && resDir.getChildren(tmpList, FilesystemNode::kListFilesOnly)
&& searchFSNode(tmpList, filename, langFile)) {
tmp.open(langFile);
}
@@ -317,7 +317,7 @@ static void detectGames(const FSList &fslist, Common::List<DetectorResult> &resu
DetectorDesc d;
d.node = *file;
d.md5Entry = 0;
- fileMD5Map[file->name()] = d;
+ fileMD5Map[file->getName()] = d;
}
}
@@ -444,7 +444,7 @@ static bool testGame(const GameSettings *g, const DescMap &fileMD5Map, const Com
Common::File tmp;
if (!tmp.open(d.node)) {
- warning("SCUMM detectGames: failed to open '%s' for read access", d.node.path().c_str());
+ warning("SCUMM detectGames: failed to open '%s' for read access", d.node.getPath().c_str());
return false;
}
@@ -748,7 +748,7 @@ PluginError Engine_SCUMM_create(OSystem *syst, Engine **engine) {
// Fetch the list of files in the current directory
FSList fslist;
FilesystemNode dir(ConfMan.get("path"));
- if (!dir.listDir(fslist, FilesystemNode::kListFilesOnly)) {
+ if (!dir.getChildren(fslist, FilesystemNode::kListFilesOnly)) {
return kInvalidPathError;
}
diff --git a/engines/scumm/detection.h b/engines/scumm/detection.h
index bc67aafb7e..d0fefe3a29 100644
--- a/engines/scumm/detection.h
+++ b/engines/scumm/detection.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/scumm/detection.h $
+ * $Id:detection.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/scumm/detection_tables.h b/engines/scumm/detection_tables.h
index 0c72951fb2..246126611e 100644
--- a/engines/scumm/detection_tables.h
+++ b/engines/scumm/detection_tables.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/scumm/detection_tables.h $
+ * $Id:detection_tables.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/engines/sky/sky.cpp b/engines/sky/sky.cpp
index 79c1f0cb7d..1ff23dbd07 100644
--- a/engines/sky/sky.cpp
+++ b/engines/sky/sky.cpp
@@ -124,11 +124,11 @@ GameList Engine_SKY_detectGames(const FSList &fslist) {
// Iterate over all files in the given directory
for (FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) {
if (!file->isDirectory()) {
- const char *fileName = file->name().c_str();
+ const char *fileName = file->getName().c_str();
if (0 == scumm_stricmp("sky.dsk", fileName)) {
Common::File dataDisk;
- if (dataDisk.open(file->path())) {
+ if (dataDisk.open(file->getPath())) {
hasSkyDsk = true;
dataDiskSize = dataDisk.size();
}
@@ -136,7 +136,7 @@ GameList Engine_SKY_detectGames(const FSList &fslist) {
if (0 == scumm_stricmp("sky.dnr", fileName)) {
Common::File dinner;
- if (dinner.open(file->path())) {
+ if (dinner.open(file->getPath())) {
hasSkyDnr = true;
dinnerTableEntries = dinner.readUint32LE();
}
diff --git a/engines/sword1/sword1.cpp b/engines/sword1/sword1.cpp
index 3c8abd0953..d899d25df5 100644
--- a/engines/sword1/sword1.cpp
+++ b/engines/sword1/sword1.cpp
@@ -107,15 +107,15 @@ GameDescriptor Engine_SWORD1_findGameID(const char *gameid) {
void Sword1CheckDirectory(const FSList &fslist, bool *filesFound) {
for (FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) {
if (!file->isDirectory()) {
- const char *fileName = file->name().c_str();
+ const char *fileName = file->getName().c_str();
for (int cnt = 0; cnt < NUM_FILES_TO_CHECK; cnt++)
if (scumm_stricmp(fileName, g_filesToCheck[cnt]) == 0)
filesFound[cnt] = true;
} else {
for (int cnt = 0; cnt < ARRAYSIZE(g_dirNames); cnt++)
- if (scumm_stricmp(file->name().c_str(), g_dirNames[cnt]) == 0) {
+ if (scumm_stricmp(file->getName().c_str(), g_dirNames[cnt]) == 0) {
FSList fslist2;
- if (file->listDir(fslist2, FilesystemNode::kListFilesOnly))
+ if (file->getChildren(fslist2, FilesystemNode::kListFilesOnly))
Sword1CheckDirectory(fslist2, filesFound);
}
}
diff --git a/engines/sword2/sword2.cpp b/engines/sword2/sword2.cpp
index 8bf3467b86..6bbd58ff3c 100644
--- a/engines/sword2/sword2.cpp
+++ b/engines/sword2/sword2.cpp
@@ -101,7 +101,7 @@ GameList Engine_SWORD2_detectGames(const FSList &fslist) {
// Iterate over all files in the given directory
for (file = fslist.begin(); file != fslist.end(); ++file) {
if (!file->isDirectory()) {
- const char *fileName = file->name().c_str();
+ const char *fileName = file->getName().c_str();
if (0 == scumm_stricmp(g->detectname, fileName)) {
// Match found, add to list of candidates, then abort inner loop.
@@ -118,11 +118,11 @@ GameList Engine_SWORD2_detectGames(const FSList &fslist) {
// present e.g. if the user copied the data straight from CD.
for (file = fslist.begin(); file != fslist.end(); ++file) {
if (file->isDirectory()) {
- const char *fileName = file->name().c_str();
+ const char *fileName = file->getName().c_str();
if (0 == scumm_stricmp("clusters", fileName)) {
FSList recList;
- if (file->listDir(recList, FilesystemNode::kListAll)) {
+ if (file->getChildren(recList, FilesystemNode::kListAll)) {
GameList recGames(Engine_SWORD2_detectGames(recList));
if (!recGames.empty()) {
detectedGames.push_back(recGames);
@@ -144,7 +144,7 @@ PluginError Engine_SWORD2_create(OSystem *syst, Engine **engine) {
FSList fslist;
FilesystemNode dir(ConfMan.get("path"));
- if (!dir.listDir(fslist, FilesystemNode::kListAll)) {
+ if (!dir.getChildren(fslist, FilesystemNode::kListAll)) {
return kInvalidPathError;
}
diff --git a/engines/touche/detection.cpp b/engines/touche/detection.cpp
index 8e8de71e9c..2860d832dd 100644
--- a/engines/touche/detection.cpp
+++ b/engines/touche/detection.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/engines/touche/detection.cpp $
+ * $Id:detection.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/graphics/iff.cpp b/graphics/iff.cpp
index ac51531eee..f9f324b1d5 100644
--- a/graphics/iff.cpp
+++ b/graphics/iff.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/graphics/iff.cpp $
+ * $Id:iff.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*/
#include "graphics/iff.h"
diff --git a/graphics/iff.h b/graphics/iff.h
index 148a145a1d..50877dbd6f 100644
--- a/graphics/iff.h
+++ b/graphics/iff.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/graphics/iff.h $
+ * $Id:iff.h 26949 2007-05-26 20:23:24Z david_corrales $
*/
diff --git a/gui/browser.cpp b/gui/browser.cpp
index b0367fa1dc..ebe4aef0c4 100644
--- a/gui/browser.cpp
+++ b/gui/browser.cpp
@@ -28,7 +28,6 @@
#include "gui/ListWidget.h"
#include "common/config-manager.h"
-#include "common/fs.h"
#include "common/system.h"
#include "common/algorithm.h"
@@ -223,15 +222,15 @@ void BrowserDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data
void BrowserDialog::updateListing() {
// Update the path display
- _currentPath->setLabel(_node.path());
+ _currentPath->setLabel(_node.getPath());
// We memorize the last visited path.
- ConfMan.set("browser_lastpath", _node.path());
+ ConfMan.set("browser_lastpath", _node.getPath());
// Read in the data from the file system
FilesystemNode::ListMode listMode = _isDirBrowser ? FilesystemNode::kListDirectoriesOnly
: FilesystemNode::kListAll;
- if (!_node.listDir(_nodeContent, listMode)) {
+ if (!_node.getChildren(_nodeContent, listMode)) {
_nodeContent.clear();
} else {
Common::sort(_nodeContent.begin(), _nodeContent.end());
@@ -241,9 +240,9 @@ void BrowserDialog::updateListing() {
Common::StringList list;
for (FSList::iterator i = _nodeContent.begin(); i != _nodeContent.end(); ++i) {
if (!_isDirBrowser && i->isDirectory())
- list.push_back(i->displayName() + "/");
+ list.push_back(i->getDisplayName() + "/");
else
- list.push_back(i->displayName());
+ list.push_back(i->getDisplayName());
}
_fileList->setList(list);
_fileList->scrollTo(0);
diff --git a/gui/launcher.cpp b/gui/launcher.cpp
index 705665dc2a..995a0cf78a 100644
--- a/gui/launcher.cpp
+++ b/gui/launcher.cpp
@@ -394,9 +394,9 @@ void EditGameDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 dat
if (browser.runModal() > 0) {
// User made this choice...
FilesystemNode file(browser.getResult());
- _soundFont->setLabel(file.path());
+ _soundFont->setLabel(file.getPath());
- if (!file.path().empty() && (file.path() != "None"))
+ if (!file.getPath().empty() && (file.getPath() != "None"))
_soundFontClearButton->setEnabled(true);
else
_soundFontClearButton->setEnabled(false);
@@ -417,7 +417,7 @@ void EditGameDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 dat
// done with optional specific gameid to pluginmgr detectgames?
// FSList files = dir.listDir(FilesystemNode::kListFilesOnly);
- _gamePathWidget->setLabel(dir.path());
+ _gamePathWidget->setLabel(dir.getPath());
draw();
}
draw();
@@ -430,7 +430,7 @@ void EditGameDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 dat
if (browser.runModal() > 0) {
// User made his choice...
FilesystemNode dir(browser.getResult());
- _extraPathWidget->setLabel(dir.path());
+ _extraPathWidget->setLabel(dir.getPath());
draw();
}
draw();
@@ -442,7 +442,7 @@ void EditGameDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 dat
if (browser.runModal() > 0) {
// User made his choice...
FilesystemNode dir(browser.getResult());
- _savePathWidget->setLabel(dir.path());
+ _savePathWidget->setLabel(dir.getPath());
draw();
}
draw();
@@ -645,9 +645,9 @@ void LauncherDialog::addGame() {
// User made his choice...
FilesystemNode dir(_browser->getResult());
FSList files;
- if (!dir.listDir(files, FilesystemNode::kListAll)) {
+ if (!dir.getChildren(files, FilesystemNode::kListAll)) {
error("browser returned a node that is not a directory: '%s'",
- dir.path().c_str());
+ dir.getPath().c_str());
}
// ...so let's determine a list of candidates, games that
@@ -677,7 +677,7 @@ void LauncherDialog::addGame() {
GameDescriptor result = candidates[idx];
// TODO: Change the detectors to set "path" !
- result["path"] = dir.path();
+ result["path"] = dir.getPath();
Common::String domain = addGameToConf(result);
diff --git a/gui/massadd.cpp b/gui/massadd.cpp
index 802f1cf084..987a92efb5 100644
--- a/gui/massadd.cpp
+++ b/gui/massadd.cpp
@@ -128,9 +128,9 @@ void MassAddDialog::handleTickle() {
FilesystemNode dir = _scanStack.pop();
FSList files;
- if (!dir.listDir(files, FilesystemNode::kListAll)) {
+ if (!dir.getChildren(files, FilesystemNode::kListAll)) {
error("browser returned a node that is not a directory: '%s'",
- dir.path().c_str());
+ dir.getPath().c_str());
}
// Run the detector on the dir
@@ -142,7 +142,7 @@ void MassAddDialog::handleTickle() {
// e.g. ask the user which one to pick (make sure to display the
// path, too).
GameDescriptor result = candidates[0];
- result["path"] = dir.path();
+ result["path"] = dir.getPath();
_games.push_back(result);
}
diff --git a/gui/options.cpp b/gui/options.cpp
index a29a5cb56e..6d588b6b44 100644
--- a/gui/options.cpp
+++ b/gui/options.cpp
@@ -27,12 +27,13 @@
#include "gui/themebrowser.h"
#include "gui/chooser.h"
#include "gui/eval.h"
+#include "gui/message.h"
#include "gui/newgui.h"
#include "gui/options.h"
#include "gui/PopUpWidget.h"
#include "gui/TabWidget.h"
-#include "common/fs.h"
+//#include "common/fs.h"
#include "common/config-manager.h"
#include "common/system.h"
@@ -813,9 +814,15 @@ void GlobalOptionsDialog::handleCommand(CommandSender *sender, uint32 cmd, uint3
if (browser.runModal() > 0) {
// User made his choice...
FilesystemNode dir(browser.getResult());
- _savePath->setLabel(dir.path());
+ if(dir.isWritable())
+ {
+ _savePath->setLabel(dir.getPath());
+ } else {
+ MessageDialog error("The chosen directory cannot be written to. Please select another one.");
+ error.runModal();
+ return;
+ }
draw();
- // TODO - we should check if the directory is writeable before accepting it
}
break;
}
@@ -824,7 +831,7 @@ void GlobalOptionsDialog::handleCommand(CommandSender *sender, uint32 cmd, uint3
if (browser.runModal() > 0) {
// User made his choice...
FilesystemNode dir(browser.getResult());
- _themePath->setLabel(dir.path());
+ _themePath->setLabel(dir.getPath());
draw();
}
break;
@@ -834,7 +841,7 @@ void GlobalOptionsDialog::handleCommand(CommandSender *sender, uint32 cmd, uint3
if (browser.runModal() > 0) {
// User made his choice...
FilesystemNode dir(browser.getResult());
- _extraPath->setLabel(dir.path());
+ _extraPath->setLabel(dir.getPath());
draw();
}
break;
@@ -844,9 +851,9 @@ void GlobalOptionsDialog::handleCommand(CommandSender *sender, uint32 cmd, uint3
if (browser.runModal() > 0) {
// User made his choice...
FilesystemNode file(browser.getResult());
- _soundFont->setLabel(file.path());
+ _soundFont->setLabel(file.getPath());
- if (!file.path().empty() && (file.path() != "None"))
+ if (!file.getPath().empty() && (file.getPath() != "None"))
_soundFontClearButton->setEnabled(true);
else
_soundFontClearButton->setEnabled(false);
diff --git a/gui/themebrowser.cpp b/gui/themebrowser.cpp
index 234e0ed2b9..75fe5404c4 100644
--- a/gui/themebrowser.cpp
+++ b/gui/themebrowser.cpp
@@ -27,7 +27,6 @@
#include "gui/ListWidget.h"
#include "gui/widget.h"
#include "gui/theme.h"
-#include "common/fs.h"
#ifdef MACOSX
#include "CoreFoundation/CoreFoundation.h"
@@ -145,16 +144,16 @@ void ThemeBrowser::addDir(ThList &list, const Common::String &dir, int level) {
FilesystemNode node(dir);
- if (!node.isValid())
+ if (!node.exists() || !node.isReadable())
return;
FSList fslist;
- if (!node.listDir(fslist, FilesystemNode::kListAll))
+ if (!node.getChildren(fslist, FilesystemNode::kListAll))
return;
for (FSList::const_iterator i = fslist.begin(); i != fslist.end(); ++i) {
if (i->isDirectory()) {
- addDir(list, i->path(), level-1);
+ addDir(list, i->getPath(), level-1);
} else {
Entry th;
if (isTheme(*i, th)) {
@@ -177,7 +176,7 @@ bool ThemeBrowser::isTheme(const FilesystemNode &node, Entry &out) {
Common::ConfigFile cfg;
Common::String type;
- out.file = node.name();
+ out.file = node.getName();
for (int i = out.file.size()-1; out.file[i] != '.' && i > 0; --i) {
out.file.deleteLastChar();
}
diff --git a/sound/iff.cpp b/sound/iff.cpp
index 7b6b38acb7..b7cab4e01a 100644
--- a/sound/iff.cpp
+++ b/sound/iff.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/sound/iff.cpp $
+ * $Id:iff.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/sound/iff.h b/sound/iff.h
index 44831fe863..f9b1f11ff7 100644
--- a/sound/iff.h
+++ b/sound/iff.h
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/sound/iff.h $
+ * $Id:iff.h 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/sound/mods/soundfx.cpp b/sound/mods/soundfx.cpp
index c9cb1f007c..06104f4838 100644
--- a/sound/mods/soundfx.cpp
+++ b/sound/mods/soundfx.cpp
@@ -18,8 +18,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
+ * $URL:https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/sound/mods/soundfx.cpp $
+ * $Id:soundfx.cpp 26949 2007-05-26 20:23:24Z david_corrales $
*
*/
diff --git a/sound/rate_arm.cpp b/sound/rate_arm.cpp
deleted file mode 100644
index 694e213dce..0000000000
--- a/sound/rate_arm.cpp
+++ /dev/null
@@ -1,431 +0,0 @@
-/* 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.
- *
- * $URL$
- * $Id$
- *
- */
-
-/*
- * The code in this file, together with the rate_arm_asm.s file offers
- * an ARM optimised version of the code in rate.cpp. The operation of this
- * code should be identical to that of rate.cpp, but faster. The heavy
- * lifting is done in the assembler file.
- *
- * To be as portable as possible we implement the core routines with C
- * linkage in assembly, and implement the C++ routines that call into
- * the C here. The C++ symbol mangling varies wildly between compilers,
- * so this is the simplest way to ensure that the C/C++ combination should
- * work on as many ARM based platforms as possible.
- *
- * Essentially the algorithm herein is the same as that in rate.cpp, so
- * anyone seeking to understand this should attempt to understand that
- * first. That code was based in turn on code with Copyright 1998 Fabrice
- * Bellard - part of SoX (http://sox.sourceforge.net).
- * Max Horn adapted that code to the needs of ScummVM and partially rewrote
- * it, in the process removing any use of floating point arithmetic. Various
- * other improvments over the original code were made.
- */
-
-#include "common/stdafx.h"
-#include "sound/audiostream.h"
-#include "sound/rate.h"
-#include "sound/mixer.h"
-#include "common/util.h"
-
-namespace Audio {
-
-/**
- * The precision of the fractional computations used by the rate converter.
- * Normally you should never have to modify this value.
- */
-#define FRAC_BITS 16
-
-/**
- * The size of the intermediate input cache. Bigger values may increase
- * performance, but only until some point (depends largely on cache size,
- * target processor and various other factors), at which it will decrease
- * again.
- */
-#define INTERMEDIATE_BUFFER_SIZE 512
-
-
-/**
- * Audio rate converter based on simple resampling. Used when no
- * interpolation is required.
- *
- * Limited to sampling frequency <= 65535 Hz.
- */
-typedef struct {
- const st_sample_t *inPtr;
- int inLen;
-
- /** position of how far output is ahead of input */
- /** Holds what would have been opos-ipos */
- long opos;
-
- /** fractional position increment in the output stream */
- long opos_inc;
-
- st_sample_t inBuf[INTERMEDIATE_BUFFER_SIZE];
-} SimpleRateDetails;
-
-template<bool stereo, bool reverseStereo>
-class SimpleRateConverter : public RateConverter {
-protected:
- SimpleRateDetails sr;
-public:
- SimpleRateConverter(st_rate_t inrate, st_rate_t outrate);
- int flow(AudioStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol_l, st_volume_t vol_r);
- int drain(st_sample_t *obuf, st_size_t osamp, st_volume_t vol) {
- return (ST_SUCCESS);
- }
-};
-
-
-/*
- * Prepare processing.
- */
-template<bool stereo, bool reverseStereo>
-SimpleRateConverter<stereo, reverseStereo>::SimpleRateConverter(st_rate_t inrate, st_rate_t outrate) {
- if (inrate == outrate) {
- error("Input and Output rates must be different to use rate effect");
- }
-
- if ((inrate % outrate) != 0) {
- error("Input rate must be a multiple of Output rate to use rate effect");
- }
-
- if (inrate >= 65536 || outrate >= 65536) {
- error("rate effect can only handle rates < 65536");
- }
-
- sr.opos = 1;
-
- /* increment */
- sr.opos_inc = inrate / outrate;
-
- sr.inLen = 0;
-}
-
-extern "C" void ARM_SimpleRate_M(AudioStream &input,
- int (*fn)(Audio::AudioStream&,int16*,int),
- SimpleRateDetails *sr,
- st_sample_t *obuf,
- st_size_t osamp,
- st_volume_t vol_l,
- st_volume_t vol_r);
-
-extern "C" void ARM_SimpleRate_S(AudioStream &input,
- int (*fn)(Audio::AudioStream&,int16*,int),
- SimpleRateDetails *sr,
- st_sample_t *obuf,
- st_size_t osamp,
- st_volume_t vol_l,
- st_volume_t vol_r);
-
-extern "C" void ARM_SimpleRate_R(AudioStream &input,
- int (*fn)(Audio::AudioStream&,int16*,int),
- SimpleRateDetails *sr,
- st_sample_t *obuf,
- st_size_t osamp,
- st_volume_t vol_l,
- st_volume_t vol_r);
-
-extern "C" int SimpleRate_readFudge(Audio::AudioStream &input,
- int16 *a, int b)
-{
- return input.readBuffer(a, b);
-}
-
-template<bool stereo, bool reverseStereo>
-int SimpleRateConverter<stereo, reverseStereo>::flow(AudioStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol_l, st_volume_t vol_r) {
-
-#ifdef DEBUG_RATECONV
-fprintf(stderr, "Simple st=%d rev=%d\n", stereo, reverseStereo);
-fflush(stderr);
-#endif
- if (!stereo) {
- ARM_SimpleRate_M(input,
- &SimpleRate_readFudge,
- &sr,
- obuf, osamp, vol_l, vol_r);
- } else if (reverseStereo) {
- ARM_SimpleRate_R(input,
- &SimpleRate_readFudge,
- &sr,
- obuf, osamp, vol_l, vol_r);
- } else {
- ARM_SimpleRate_S(input,
- &SimpleRate_readFudge,
- &sr,
- obuf, osamp, vol_l, vol_r);
- }
- return (ST_SUCCESS);
-}
-
-/**
- * Audio rate converter based on simple linear Interpolation.
- *
- * The use of fractional increment allows us to use no buffer. It
- * avoid the problems at the end of the buffer we had with the old
- * method which stored a possibly big buffer of size
- * lcm(in_rate,out_rate).
- *
- * Limited to sampling frequency <= 65535 Hz.
- */
-
-typedef struct {
- const st_sample_t *inPtr;
- int inLen;
-
- /** position of how far output is ahead of input */
- /** Holds what would have been opos-ipos */
- long opos;
-
- /** integer position increment in the output stream */
- long opos_inc;
-
- /** current sample(s) in the input stream (left/right channel) */
- st_sample_t icur[2];
- /** last sample(s) in the input stream (left/right channel) */
- st_sample_t ilast[2];
-
- /** fractional position in the output stream */
- long opos_frac;
-
- /** fractional position increment in the output stream */
- long opos_inc_frac;
-
- st_sample_t inBuf[INTERMEDIATE_BUFFER_SIZE];
-} LinearRateDetails;
-
-extern "C" void ARM_LinearRate_M(AudioStream &input,
- int (*fn)(Audio::AudioStream&,int16*,int),
- LinearRateDetails *lr,
- st_sample_t *obuf,
- st_size_t osamp,
- st_volume_t vol_l,
- st_volume_t vol_r);
-
-extern "C" void ARM_LinearRate_S(AudioStream &input,
- int (*fn)(Audio::AudioStream&,int16*,int),
- LinearRateDetails *lr,
- st_sample_t *obuf,
- st_size_t osamp,
- st_volume_t vol_l,
- st_volume_t vol_r);
-
-extern "C" void ARM_LinearRate_R(AudioStream &input,
- int (*fn)(Audio::AudioStream&,int16*,int),
- LinearRateDetails *lr,
- st_sample_t *obuf,
- st_size_t osamp,
- st_volume_t vol_l,
- st_volume_t vol_r);
-
-template<bool stereo, bool reverseStereo>
-class LinearRateConverter : public RateConverter {
-protected:
- LinearRateDetails lr;
-
-public:
- LinearRateConverter(st_rate_t inrate, st_rate_t outrate);
- int flow(AudioStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol_l, st_volume_t vol_r);
- int drain(st_sample_t *obuf, st_size_t osamp, st_volume_t vol) {
- return (ST_SUCCESS);
- }
-};
-
-
-/*
- * Prepare processing.
- */
-template<bool stereo, bool reverseStereo>
-LinearRateConverter<stereo, reverseStereo>::LinearRateConverter(st_rate_t inrate, st_rate_t outrate) {
- unsigned long incr;
-
- if (inrate == outrate) {
- error("Input and Output rates must be different to use rate effect");
- }
-
- if (inrate >= 65536 || outrate >= 65536) {
- error("rate effect can only handle rates < 65536");
- }
-
- lr.opos_frac = 0;
- lr.opos = 1;
-
- /* increment */
- incr = (inrate << FRAC_BITS) / outrate;
-
- lr.opos_inc_frac = incr & ((1UL << FRAC_BITS) - 1);
- lr.opos_inc = incr >> FRAC_BITS;
-
- lr.ilast[0] = lr.ilast[1] = 0;
- lr.icur[0] = lr.icur[1] = 0;
-
- lr.inLen = 0;
-}
-
-/*
- * Processed signed long samples from ibuf to obuf.
- * Return number of samples processed.
- */
-template<bool stereo, bool reverseStereo>
-int LinearRateConverter<stereo, reverseStereo>::flow(AudioStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol_l, st_volume_t vol_r) {
-
-#ifdef DEBUG_RATECONV
-fprintf(stderr, "Linear st=%d rev=%d\n", stereo, reverseStereo);
-fflush(stderr);
-#endif
- if (!stereo) {
- ARM_LinearRate_M(input,
- &SimpleRate_readFudge,
- &lr,
- obuf, osamp, vol_l, vol_r);
- } else if (reverseStereo) {
- ARM_LinearRate_R(input,
- &SimpleRate_readFudge,
- &lr,
- obuf, osamp, vol_l, vol_r);
- } else {
- ARM_LinearRate_S(input,
- &SimpleRate_readFudge,
- &lr,
- obuf, osamp, vol_l, vol_r);
- }
- return (ST_SUCCESS);
-}
-
-
-#pragma mark -
-
-
-/**
- * Simple audio rate converter for the case that the inrate equals the outrate.
- */
-extern "C" void ARM_CopyRate_M(st_size_t len,
- st_sample_t *obuf,
- st_volume_t vol_l,
- st_volume_t vol_r,
- st_sample_t *_buffer);
-
-extern "C" void ARM_CopyRate_S(st_size_t len,
- st_sample_t *obuf,
- st_volume_t vol_l,
- st_volume_t vol_r,
- st_sample_t *_buffer);
-
-extern "C" void ARM_CopyRate_R(st_size_t len,
- st_sample_t *obuf,
- st_volume_t vol_l,
- st_volume_t vol_r,
- st_sample_t *_buffer);
-
-
-template<bool stereo, bool reverseStereo>
-class CopyRateConverter : public RateConverter {
- st_sample_t *_buffer;
- st_size_t _bufferSize;
-public:
- CopyRateConverter() : _buffer(0), _bufferSize(0) {}
- ~CopyRateConverter() {
- free(_buffer);
- }
-
- virtual int flow(AudioStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol_l, st_volume_t vol_r) {
- assert(input.isStereo() == stereo);
-
-#ifdef DEBUG_RATECONV
-fprintf(stderr, "Copy st=%d rev=%d\n", stereo, reverseStereo);
-fflush(stderr);
-#endif
- st_sample_t *ptr;
- st_size_t len;
-
- if (stereo)
- osamp *= 2;
-
- // Reallocate temp buffer, if necessary
- if (osamp > _bufferSize) {
- free(_buffer);
- _buffer = (st_sample_t *)malloc(osamp * 2);
- _bufferSize = osamp;
- }
-
- // Read up to 'osamp' samples into our temporary buffer
- len = input.readBuffer(_buffer, osamp);
- if (len <= 0)
- return (ST_SUCCESS);
-
- // Mix the data into the output buffer
- if (stereo && reverseStereo)
- ARM_CopyRate_R(len, obuf, vol_l, vol_r, _buffer);
- else if (stereo)
- ARM_CopyRate_S(len, obuf, vol_l, vol_r, _buffer);
- else
- ARM_CopyRate_M(len, obuf, vol_l, vol_r, _buffer);
-
- return (ST_SUCCESS);
- }
- virtual int drain(st_sample_t *obuf, st_size_t osamp, st_volume_t vol) {
- return (ST_SUCCESS);
- }
-};
-
-
-#pragma mark -
-
-
-/**
- * Create and return a RateConverter object for the specified input and output rates.
- */
-RateConverter *makeRateConverter(st_rate_t inrate, st_rate_t outrate, bool stereo, bool reverseStereo) {
- if (inrate != outrate) {
- if ((inrate % outrate) == 0) {
- if (stereo) {
- if (reverseStereo)
- return new SimpleRateConverter<true, true>(inrate, outrate);
- else
- return new SimpleRateConverter<true, false>(inrate, outrate);
- } else
- return new SimpleRateConverter<false, false>(inrate, outrate);
- } else {
- if (stereo) {
- if (reverseStereo)
- return new LinearRateConverter<true, true>(inrate, outrate);
- else
- return new LinearRateConverter<true, false>(inrate, outrate);
- } else
- return new LinearRateConverter<false, false>(inrate, outrate);
- }
- } else {
- if (stereo) {
- if (reverseStereo)
- return new CopyRateConverter<true, true>();
- else
- return new CopyRateConverter<true, false>();
- } else
- return new CopyRateConverter<false, false>();
- }
-}
-
-} // End of namespace Audio
diff --git a/sound/rate_arm_asm.s b/sound/rate_arm_asm.s
deleted file mode 100644
index 709d343c6c..0000000000
--- a/sound/rate_arm_asm.s
+++ /dev/null
@@ -1,692 +0,0 @@
-@ 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.
-@
-@ $URL$
-@ $Id$
-@
-@ @author Robin Watts (robin@wss.co.uk)
-@
-@ This file, together with rate_arm.cpp, provides an ARM optimised version
-@ of rate.cpp. The algorithm is essentially the same as that within rate.cpp
-@ so to understand this file you should understand rate.cpp first.
-
- .text
-
- .global ARM_CopyRate_M
- .global ARM_CopyRate_S
- .global ARM_CopyRate_R
- .global ARM_SimpleRate_M
- .global ARM_SimpleRate_S
- .global ARM_SimpleRate_R
- .global ARM_LinearRate_M
- .global ARM_LinearRate_S
- .global ARM_LinearRate_R
-
-ARM_CopyRate_M:
- @ r0 = len
- @ r1 = obuf
- @ r2 = vol_l
- @ r3 = vol_r
- @ <> = ptr
- LDR r12,[r13]
- STMFD r13!,{r4-r7,r14}
-
- MOV r14,#0 @ r14= 0
- ORR r2, r2, r2, LSL #8 @ r2 = vol_l as 16 bits
- ORR r3, r3, r3, LSL #8 @ r3 = vol_r as 16 bits
-CopyRate_M_loop:
- LDRSH r5, [r12], #2 @ r5 = tmp0 = tmp1 = *ptr++
- LDRSH r6, [r1] @ r6 = obuf[0]
- LDRSH r7, [r1, #2] @ r7 = obuf[1]
- MUL r4, r2, r5 @ r4 = tmp0*vol_l
- MUL r5, r3, r5 @ r5 = tmp1*vol_r
-
- ADDS r6, r4, r6, LSL #16 @ r6 = obuf[0]<<16 + tmp0*vol_l
- RSCVS r6, r14,#1<<31 @ Clamp r6
- ADDS r7, r5, r7, LSL #16 @ r7 = obuf[1]<<16 + tmp1*vol_r
- RSCVS r7, r14,#1<<31 @ Clamp r7
-
- MOV r6, r6, LSR #16 @ Shift back to halfword
- MOV r7, r7, LSR #16 @ Shift back to halfword
-
- STRH r6, [r1], #2 @ Store output value
- STRH r7, [r1], #2 @ Store output value
-
- SUBS r0,r0,#1 @ len--
- BGT CopyRate_M_loop @ and loop
-
- LDMFD r13!,{r4-r7,PC}
-
-ARM_CopyRate_S:
- @ r0 = len
- @ r1 = obuf
- @ r2 = vol_l
- @ r3 = vol_r
- @ <> = ptr
- LDR r12,[r13]
- STMFD r13!,{r4-r7,r14}
-
- MOV r14,#0 @ r14= 0
- ORR r2, r2, r2, LSL #8 @ r2 = vol_l as 16 bits
- ORR r3, r3, r3, LSL #8 @ r3 = vol_r as 16 bits
-CopyRate_S_loop:
- LDRSH r4, [r12],#2 @ r4 = tmp0 = *ptr++
- LDRSH r5, [r12],#2 @ r5 = tmp1 = *ptr++
- LDRSH r6, [r1] @ r6 = obuf[0]
- LDRSH r7, [r1,#2] @ r7 = obuf[1]
- MUL r4, r2, r4 @ r5 = tmp0*vol_l
- MUL r5, r3, r5 @ r6 = tmp1*vol_r
-
- ADDS r6, r4, r6, LSL #16 @ r6 = obuf[0]<<16 + tmp0*vol_l
- RSCVS r6, r14,#1<<31 @ Clamp r6
- ADDS r7, r5, r7, LSL #16 @ r7 = obuf[1]<<16 + tmp1*vol_r
- RSCVS r7, r14,#1<<31 @ Clamp r7
-
- MOV r6, r6, LSR #16 @ Shift back to halfword
- MOV r7, r7, LSR #16 @ Shift back to halfword
-
- STRH r6, [r1],#2 @ Store output value
- STRH r7, [r1],#2 @ Store output value
-
- SUBS r0,r0,#2 @ len -= 2
- BGT CopyRate_S_loop @ and loop
-
- LDMFD r13!,{r4-r7,PC}
-
-ARM_CopyRate_R:
- @ r0 = len
- @ r1 = obuf
- @ r2 = vol_l
- @ r3 = vol_r
- @ <> = ptr
- LDR r12,[r13]
- STMFD r13!,{r4-r7,r14}
-
- MOV r14,#0 @ r14= 0
- ORR r2, r2, r2, LSL #8 @ r2 = vol_l as 16 bits
- ORR r3, r3, r3, LSL #8 @ r3 = vol_r as 16 bits
-CopyRate_R_loop:
- LDRSH r5, [r12],#2 @ r5 = tmp1 = *ptr++
- LDRSH r4, [r12],#2 @ r4 = tmp0 = *ptr++
- LDRSH r6, [r1] @ r6 = obuf[0]
- LDRSH r7, [r1,#2] @ r7 = obuf[1]
- MUL r4, r2, r4 @ r4 = tmp0*vol_l
- MUL r5, r3, r5 @ r5 = tmp1*vol_r
-
- ADDS r6, r4, r6, LSL #16 @ r6 = obuf[0]<<16 + tmp0*vol_l
- RSCVS r6, r14,#1<<31 @ Clamp r6
- ADDS r7, r5, r7, LSL #16 @ r7 = obuf[1]<<16 + tmp1*vol_r
- RSCVS r7, r14,#1<<31 @ Clamp r7
-
- MOV r6, r6, LSR #16 @ Shift back to halfword
- MOV r7, r7, LSR #16 @ Shift back to halfword
-
- STRH r6, [r1],#2 @ Store output value
- STRH r7, [r1],#2 @ Store output value
-
- SUBS r0,r0,#2 @ len -= 2
- BGT CopyRate_R_loop @ and loop
-
- LDMFD r13!,{r4-r7,PC}
-
-ARM_SimpleRate_M:
- @ r0 = AudioStream &input
- @ r1 = input.readBuffer
- @ r2 = input->sr
- @ r3 = obuf
- @ <> = osamp
- @ <> = vol_l
- @ <> = vol_r
- MOV r12,r13
- STMFD r13!,{r0-r2,r4-r8,r10-r11,r14}
- LDMFD r12,{r11,r12,r14} @ r11= osamp
- @ r12= vol_l
- @ r14= vol_r
- LDMIA r2,{r0,r1,r2,r8} @ r0 = inPtr
- @ r1 = inLen
- @ r2 = opos
- @ r8 = opos_inc
- CMP r11,#0 @ if (osamp <= 0)
- BLE SimpleRate_M_end @ bale
- MOV r10,#0
- ORR r12,r12,r12,LSL #8 @ r12= vol_l as 16 bits
- ORR r14,r14,r14,LSL #8 @ r14= vol_r as 16 bits
-SimpleRate_M_loop:
- SUBS r1, r1, #1 @ r1 = inLen -= 1
- BLT SimpleRate_M_read
- SUBS r2, r2, #1 @ r2 = opos--
- ADDGE r0, r0, #2 @ if (r2 >= 0) { sr.inPtr++
- BGE SimpleRate_M_loop @ and loop }
-SimpleRate_M_read_return:
- LDRSH r5, [r0],#2 @ r5 = tmp1 = *inPtr++
- LDRSH r6, [r3] @ r6 = obuf[0]
- LDRSH r7, [r3,#2] @ r7 = obuf[1]
- ADD r2, r2, r8 @ r2 = opos += opos_inc
- MUL r4, r12,r5 @ r4 = tmp0*vol_l
- MUL r5, r14,r5 @ r5 = tmp1*vol_r
-
- ADDS r6, r4, r6, LSL #16 @ r6 = obuf[0]<<16 + tmp0*vol_l
- RSCVS r6, r10,#1<<31 @ Clamp r6
- ADDS r7, r5, r7, LSL #16 @ r7 = obuf[1]<<16 + tmp1*vol_r
- RSCVS r7, r10,#1<<31 @ Clamp r7
-
- MOV r6, r6, LSR #16 @ Shift back to halfword
- MOV r7, r7, LSR #16 @ Shift back to halfword
-
- STRH r6, [r3],#2 @ Store output value
- STRH r7, [r3],#2 @ Store output value
-
- SUBS r11,r11,#1 @ len--
- BGT SimpleRate_M_loop @ and loop
-SimpleRate_M_end:
- LDR r14,[r13,#8] @ r14 = sr
- ADD r13,r13,#12 @ Skip over r0-r2 on stack
- STMIA r14,{r0,r1,r2} @ Store back updated values
- LDMFD r13!,{r4-r8,r10-r11,PC}
-SimpleRate_M_read:
- LDR r0, [r13,#4*2] @ r0 = sr
- ADD r0, r0, #16 @ r0 = inPtr = inBuf
- STMFD r13!,{r0,r2-r3,r12,r14}
-
- MOV r1, r0 @ r1 = inBuf
- LDR r0, [r13,#4*5] @ r0 = AudioStream & input
- MOV r2, #512 @ r2 = ARRAYSIZE(inBuf)
-
- @ Calling back into C++ here. WinCE is fairly easy about such things
- @ but other OS are more awkward. r9 is preserved for Symbian, and
- @ we have 3+8+5 = 16 things on the stack (an even number).
- MOV r14,PC
- LDR PC,[r13,#4*6] @ inLen = input.readBuffer(inBuf,512)
- SUBS r1, r0, #1 @ r1 = inLen-1
- LDMFD r13!,{r0,r2-r3,r12,r14}
- BLT SimpleRate_M_end
- SUBS r2, r2, #1 @ r2 = opos--
- ADDGE r0, r0, #2 @ if (r2 >= 0) { sr.inPtr++
- BGE SimpleRate_M_loop @ and loop }
- B SimpleRate_M_read_return
-
-
-ARM_SimpleRate_S:
- @ r0 = AudioStream &input
- @ r1 = input.readBuffer
- @ r2 = input->sr
- @ r3 = obuf
- @ <> = osamp
- @ <> = vol_l
- @ <> = vol_r
- MOV r12,r13
- STMFD r13!,{r0-r2,r4-r8,r10-r11,r14}
- LDMFD r12,{r11,r12,r14} @ r11= osamp
- @ r12= vol_l
- @ r14= vol_r
- LDMIA r2,{r0,r1,r2,r8} @ r0 = inPtr
- @ r1 = inLen
- @ r2 = opos
- @ r8 = opos_inc
- CMP r11,#0 @ if (osamp <= 0)
- BLE SimpleRate_S_end @ bale
- MOV r10,#0
- ORR r12,r12,r12,LSL #8 @ r12= vol_l as 16 bits
- ORR r14,r14,r14,LSL #8 @ r14= vol_r as 16 bits
-SimpleRate_S_loop:
- SUBS r1, r1, #2 @ r1 = inLen -= 2
- BLT SimpleRate_S_read
- SUBS r2, r2, #1 @ r2 = opos--
- ADDGE r0, r0, #4 @ if (r2 >= 0) { sr.inPtr += 2
- BGE SimpleRate_S_loop @ and loop }
-SimpleRate_S_read_return:
- LDRSH r4, [r0],#2 @ r4 = tmp0 = *inPtr++
- LDRSH r5, [r0],#2 @ r5 = tmp1 = *inPtr++
- LDRSH r6, [r3] @ r6 = obuf[0]
- LDRSH r7, [r3,#2] @ r7 = obuf[1]
- ADD r2, r2, r8 @ r2 = opos += opos_inc
- MUL r4, r12,r4 @ r5 = tmp0*vol_l
- MUL r5, r14,r5 @ r6 = tmp1*vol_r
-
- ADDS r6, r4, r6, LSL #16 @ r6 = obuf[0]<<16 + tmp0*vol_l
- RSCVS r6, r10,#1<<31 @ Clamp r6
- ADDS r7, r5, r7, LSL #16 @ r7 = obuf[1]<<16 + tmp1*vol_r
- RSCVS r7, r10,#1<<31 @ Clamp r7
-
- MOV r6, r6, LSR #16 @ Shift back to halfword
- MOV r7, r7, LSR #16 @ Shift back to halfword
-
- STRH r6, [r3],#2 @ Store output value
- STRH r7, [r3],#2 @ Store output value
-
- SUBS r11,r11,#1 @ osamp--
- BGT SimpleRate_S_loop @ and loop
-SimpleRate_S_end:
- LDR r14,[r13,#8] @ r14 = sr
- ADD r13,r13,#12 @ skip over r0-r2 on stack
- STMIA r14,{r0,r1,r2} @ store back updated values
- LDMFD r13!,{r4-r8,r10-r11,PC}
-SimpleRate_S_read:
- LDR r0, [r13,#4*2] @ r0 = sr
- ADD r0, r0, #16 @ r0 = inPtr = inBuf
- STMFD r13!,{r0,r2-r3,r12,r14}
-
- MOV r1, r0 @ r1 = inBuf
- LDR r0, [r13,#4*5] @ r0 = AudioStream & input
- MOV r2, #512 @ r2 = ARRAYSIZE(inBuf)
-
- @ Calling back into C++ here. WinCE is fairly easy about such things
- @ but other OS are more awkward. r9 is preserved for Symbian, and
- @ we have 3+8+5 = 16 things on the stack (an even number).
- MOV r14,PC
- LDR PC,[r13,#4*6] @ inLen = input.readBuffer(inBuf,512)
- SUBS r1, r0, #2 @ r1 = inLen-2
- LDMFD r13!,{r0,r2-r3,r12,r14}
- BLT SimpleRate_S_end
- SUBS r2, r2, #1 @ r2 = opos--
- ADDGE r0, r0, #4 @ if (r2 >= 0) { sr.inPtr += 2
- BGE SimpleRate_S_loop @ and loop }
- B SimpleRate_S_read_return
-
-
-
-ARM_SimpleRate_R:
- @ r0 = AudioStream &input
- @ r1 = input.readBuffer
- @ r2 = input->sr
- @ r3 = obuf
- @ <> = osamp
- @ <> = vol_l
- @ <> = vol_r
- MOV r12,r13
- STMFD r13!,{r0-r2,r4-r8,r10-r11,r14}
- LDMFD r12,{r11,r12,r14} @ r11= osamp
- @ r12= vol_l
- @ r14= vol_r
- LDMIA r2,{r0,r1,r2,r8} @ r0 = inPtr
- @ r1 = inLen
- @ r2 = opos
- @ r8 = opos_inc
- CMP r11,#0 @ if (osamp <= 0)
- BLE SimpleRate_R_end @ bale
- MOV r10,#0
- ORR r12,r12,r12,LSL #8 @ r12= vol_l as 16 bits
- ORR r14,r14,r14,LSL #8 @ r14= vol_r as 16 bits
-SimpleRate_R_loop:
- SUBS r1, r1, #2 @ r1 = inLen -= 2
- BLT SimpleRate_R_read
- SUBS r2, r2, #1 @ r2 = opos--
- ADDGE r0, r0, #4 @ if (r2 >= 0) { sr.inPtr += 2
- BGE SimpleRate_R_loop @ and loop }
-SimpleRate_R_read_return:
- LDRSH r5, [r0],#2 @ r5 = tmp0 = *inPtr++
- LDRSH r4, [r0],#2 @ r4 = tmp1 = *inPtr++
- LDRSH r6, [r3] @ r6 = obuf[0]
- LDRSH r7, [r3,#2] @ r7 = obuf[1]
- ADD r2, r2, r8 @ r2 = opos += opos_inc
- MUL r4, r12,r4 @ r5 = tmp0*vol_l
- MUL r5, r14,r5 @ r6 = tmp1*vol_r
-
- ADDS r6, r4, r6, LSL #16 @ r6 = obuf[0]<<16 + tmp0*vol_l
- RSCVS r6, r10,#1<<31 @ Clamp r6
- ADDS r7, r5, r7, LSL #16 @ r7 = obuf[1]<<16 + tmp1*vol_r
- RSCVS r7, r10,#1<<31 @ Clamp r7
-
- MOV r6, r6, LSR #16 @ Shift back to halfword
- MOV r7, r7, LSR #16 @ Shift back to halfword
-
- STRH r6, [r3],#2 @ Store output value
- STRH r7, [r3],#2 @ Store output value
-
- SUBS r11,r11,#1 @ osamp--
- BGT SimpleRate_R_loop @ and loop
-SimpleRate_R_end:
- LDR r14,[r13,#8] @ r14 = sr
- ADD r13,r13,#12 @ Skip over r0-r2 on stack
- STMIA r14,{r0,r1,r2} @ Store back updated values
- LDMFD r13!,{r4-r8,r10-r11,PC}
-SimpleRate_R_read:
- LDR r0, [r13,#4*2] @ r0 = sr
- ADD r0, r0, #16 @ r0 = inPtr = inBuf
- STMFD r13!,{r0,r2-r3,r12,r14}
-
- MOV r1, r0 @ r1 = inBuf
- LDR r0, [r13,#4*5] @ r0 = AudioStream & input
- MOV r2, #512 @ r2 = ARRAYSIZE(inBuf)
-
- @ Calling back into C++ here. WinCE is fairly easy about such things
- @ but other OS are more awkward. r9 is preserved for Symbian, and
- @ we have 3+8+5 = 16 things on the stack (an even number).
- MOV r14,PC
- LDR PC,[r13,#4*6] @ inLen = input.readBuffer(inBuf,512)
- SUBS r1, r0, #2 @ r1 = inLen-2
- LDMFD r13!,{r0,r2-r3,r12,r14}
- BLT SimpleRate_R_end
- SUBS r2, r2, #1 @ r2 = opos--
- ADDGE r0, r0, #4 @ if (r2 >= 0) { sr.inPtr += 2
- BGE SimpleRate_R_loop @ and loop }
- B SimpleRate_R_read_return
-
-
-ARM_LinearRate_M:
- @ r0 = AudioStream &input
- @ r1 = input.readBuffer
- @ r2 = input->sr
- @ r3 = obuf
- @ <> = osamp
- @ <> = vol_l
- @ <> = vol_r
- MOV r12,r13
- STMFD r13!,{r0-r1,r4-r11,r14}
- LDMFD r12,{r11,r12,r14} @ r11= osamp
- @ r12= vol_l
- @ r14= vol_r
- LDMIA r2,{r0,r1,r8} @ r0 = inPtr
- @ r1 = inLen
- @ r8 = opos
- CMP r11,#0 @ if (osamp <= 0)
- BLE LinearRate_M_end @ bale
- ORR r12,r12,r12,LSL #8 @ r12= vol_l as 16 bits
- ORR r14,r14,r14,LSL #8 @ r14= vol_r as 16 bits
- CMP r1,#0
- BGT LinearRate_M_part2
-
- @ part1 - read input samples
-LinearRate_M_loop:
- SUBS r1, r1, #1 @ r1 = inLen -= 1
- BLT LinearRate_M_read
-LinearRate_M_read_return:
- LDR r10,[r2, #16] @ r10= icur[0,1]
- LDRSH r5, [r0],#2 @ r5 = tmp1 = *inPtr++
- SUBS r8, r8, #1 @ r8 = opos--
- STR r10,[r2,#20] @ ilast[0,1] = icur[0,1]
- STRH r5, [r2,#16] @ icur[0] = tmp1
- BGE LinearRate_M_loop
-
- @ part2 - form output samples
-LinearRate_M_part2:
- @ We are guaranteed that opos < 0 here
- LDRSH r6, [r2,#20] @ r6 = ilast[0]
- LDRSH r5, [r2,#16] @ r5 = icur[0]
- LDRH r4, [r2,#24] @ r4 = opos_frac
- LDR r10,[r2,#28] @ r10= opos_frac_inc
- MOV r6, r6, LSL #16 @ r6 = ilast[0]<<16
- SUB r5, r5, r6, ASR #16 @ r5 = icur[0] - ilast[0]
- ADD r6, r6, #1<<15 @ r6 = ilast[0]+1<<(FRAC_BITS-1)
- MLA r6, r4, r5, r6 @ r6 = (icur[0]-ilast[0])*opos_frac+ilast[0]
-
- ADD r4, r4, r10 @ r4 = tmp = opos_frac+opos_inc_frac
- STRH r4,[r2,#24] @ opos_frac &= 65535
- ADD r8, r8, r4, LSR #16 @ opos += (tmp>>FRAC_BITS)
-
- LDRSH r4, [r3] @ r4 = obuf[0]
- LDRSH r5, [r3,#2] @ r5 = obuf[1]
- MOV r6, r6, ASR #16 @ r6 = tmp0 = tmp1 >>= 16
- MUL r7, r12,r6 @ r7 = tmp0*vol_l
- MUL r6, r14,r6 @ r6 = tmp1*vol_r
-
- ADDS r7, r7, r4, LSL #16 @ r7 = obuf[0]<<16 + tmp0*vol_l
- MOV r4, #0
- RSCVS r7, r4, #1<<31 @ Clamp r7
- ADDS r6, r6, r5, LSL #16 @ r6 = obuf[1]<<16 + tmp1*vol_r
- RSCVS r6, r4, #1<<31 @ Clamp r6
-
- MOV r7, r7, LSR #16 @ Shift back to halfword
- MOV r6, r6, LSR #16 @ Shift back to halfword
-
- LDR r5, [r2,#12] @ r5 = opos_inc
- STRH r7, [r3],#2 @ Store output value
- STRH r6, [r3],#2 @ Store output value
- SUBS r11, r11,#1 @ opos--
- BLE LinearRate_M_end @ end if needed
-
- ADDS r8, r8, r5 @ r8 = opos += opos_inc
- BLT LinearRate_M_part2
- B LinearRate_M_loop
-LinearRate_M_end:
- ADD r13,r13,#8
- STMIA r2,{r0,r1,r8}
- LDMFD r13!,{r4-r11,PC}
-LinearRate_M_read:
- ADD r0, r2, #32 @ r0 = inPtr = inBuf
- STMFD r13!,{r0,r2-r3,r12,r14}
-
- MOV r1, r0 @ r1 = inBuf
- LDR r0, [r13,#4*5] @ r0 = AudioStream & input
- MOV r2, #512 @ r2 = ARRAYSIZE(inBuf)
-
- @ Calling back into C++ here. WinCE is fairly easy about such things
- @ but other OS are more awkward. r9 is preserved for Symbian, and
- @ we have 2+9+5 = 16 things on the stack (an even number).
- MOV r14,PC
- LDR PC,[r13,#4*6] @ inLen = input.readBuffer(inBuf,512)
- SUBS r1, r0, #1 @ r1 = inLen-1
- LDMFD r13!,{r0,r2-r3,r12,r14}
- BLT LinearRate_M_end
- B LinearRate_M_read_return
-
-ARM_LinearRate_S:
- @ r0 = AudioStream &input
- @ r1 = input.readBuffer
- @ r2 = input->sr
- @ r3 = obuf
- @ <> = osamp
- @ <> = vol_l
- @ <> = vol_r
- MOV r12,r13
- STMFD r13!,{r0-r1,r4-r11,r14}
- LDMFD r12,{r11,r12,r14} @ r11= osamp
- @ r12= vol_l
- @ r14= vol_r
- LDMIA r2,{r0,r1,r8} @ r0 = inPtr
- @ r1 = inLen
- @ r8 = opos
- CMP r11,#0 @ if (osamp <= 0)
- BLE LinearRate_S_end @ bale
- ORR r12,r12,r12,LSL #8 @ r12= vol_l as 16 bits
- ORR r14,r14,r14,LSL #8 @ r14= vol_r as 16 bits
- CMP r1,#0
- BGT LinearRate_S_part2
-
- @ part1 - read input samples
-LinearRate_S_loop:
- SUBS r1, r1, #2 @ r1 = inLen -= 2
- BLT LinearRate_S_read
-LinearRate_S_read_return:
- LDR r10,[r2, #16] @ r10= icur[0,1]
- LDRSH r5, [r0],#2 @ r5 = tmp0 = *inPtr++
- LDRSH r6, [r0],#2 @ r5 = tmp1 = *inPtr++
- SUBS r8, r8, #1 @ r8 = opos--
- STR r10,[r2,#20] @ ilast[0,1] = icur[0,1]
- STRH r5, [r2,#16] @ icur[0] = tmp0
- STRH r6, [r2,#16] @ icur[1] = tmp1
- BGE LinearRate_S_loop
-
- @ part2 - form output samples
-LinearRate_S_part2:
- @ We are guaranteed that opos < 0 here
- LDRSH r6, [r2,#20] @ r6 = ilast[0]
- LDRSH r5, [r2,#16] @ r5 = icur[0]
- LDRH r4, [r2,#24] @ r4 = opos_frac
- MOV r6, r6, LSL #16 @ r6 = ilast[0]<<16
- SUB r5, r5, r6, ASR #16 @ r5 = icur[0] - ilast[0]
- ADD r6, r6, #1<<15 @ r6 = ilast[0]+1<<(FRAC_BITS-1)
- MLA r6, r4, r5, r6 @ r6 = (icur[0]-ilast[0])*opos_frac+ilast[0]
-
- LDRSH r7, [r2,#22] @ r6 = ilast[1]
- LDRSH r5, [r2,#18] @ r5 = icur[1]
- LDR r10,[r2,#28] @ r10= opos_frac_inc
- MOV r7, r7, LSL #16 @ r7 = ilast[1]<<16
- SUB r5, r5, r7, ASR #16 @ r5 = icur[1] - ilast[1]
- ADD r7, r7, #1<<15 @ r6 = ilast[1]+1<<(FRAC_BITS-1)
- MLA r7, r4, r5, r7 @ r6 = (icur[1]-ilast[1])*opos_frac+ilast[1]
-
- ADD r4, r4, r10 @ r4 = tmp = opos_frac+opos_inc_frac
- STRH r4,[r2,#24] @ opos_frac &= 65535
- ADD r8, r8, r4, LSR #16 @ opos += (tmp>>FRAC_BITS)
-
- LDRSH r4, [r3] @ r4 = obuf[0]
- LDRSH r5, [r3,#2] @ r5 = obuf[1]
- MOV r7, r7, ASR #16 @ r7 = tmp0 >>= 16
- MOV r6, r6, ASR #16 @ r6 = tmp1 >>= 16
- MUL r7, r12,r7 @ r7 = tmp0*vol_l
- MUL r6, r14,r6 @ r6 = tmp1*vol_r
-
- ADDS r7, r7, r4, LSL #16 @ r7 = obuf[0]<<16 + tmp0*vol_l
- MOV r4, #0
- RSCVS r7, r4, #1<<31 @ Clamp r7
- ADDS r6, r6, r5, LSL #16 @ r6 = obuf[1]<<16 + tmp1*vol_r
- RSCVS r6, r4, #1<<31 @ Clamp r6
-
- MOV r7, r7, LSR #16 @ Shift back to halfword
- MOV r6, r6, LSR #16 @ Shift back to halfword
-
- LDR r5, [r2,#12] @ r5 = opos_inc
- STRH r7, [r3],#2 @ Store output value
- STRH r6, [r3],#2 @ Store output value
- SUBS r11, r11,#1 @ opos--
- BLE LinearRate_S_end @ and loop
-
- ADDS r8, r8, r5 @ r8 = opos += opos_inc
- BLT LinearRate_S_part2
- B LinearRate_S_loop
-LinearRate_S_end:
- ADD r13,r13,#8
- STMIA r2,{r0,r1,r8}
- LDMFD r13!,{r4-r11,PC}
-LinearRate_S_read:
- ADD r0, r2, #32 @ r0 = inPtr = inBuf
- STMFD r13!,{r0,r2-r3,r12,r14}
-
- MOV r1, r0 @ r1 = inBuf
- LDR r0, [r13,#4*5] @ r0 = AudioStream & input
- MOV r2, #512 @ r2 = ARRAYSIZE(inBuf)
-
- @ Calling back into C++ here. WinCE is fairly easy about such things
- @ but other OS are more awkward. r9 is preserved for Symbian, and
- @ we have 2+9+5 = 16 things on the stack (an even number).
- MOV r14,PC
- LDR PC,[r13,#4*6] @ inLen = input.readBuffer(inBuf,512)
- SUBS r1, r0, #2 @ r1 = inLen-2
- LDMFD r13!,{r0,r2-r3,r12,r14}
- BLT LinearRate_S_end
- B LinearRate_S_read_return
-
-ARM_LinearRate_R:
- @ r0 = AudioStream &input
- @ r1 = input.readBuffer
- @ r2 = input->sr
- @ r3 = obuf
- @ <> = osamp
- @ <> = vol_l
- @ <> = vol_r
- MOV r12,r13
- STMFD r13!,{r0-r1,r4-r11,r14}
- LDMFD r12,{r11,r12,r14} @ r11= osamp
- @ r12= vol_l
- @ r14= vol_r
- LDMIA r2,{r0,r1,r8} @ r0 = inPtr
- @ r1 = inLen
- @ r8 = opos
- CMP r11,#0 @ if (osamp <= 0)
- BLE LinearRate_R_end @ bale
- ORR r12,r12,r12,LSL #8 @ r12= vol_l as 16 bits
- ORR r14,r14,r14,LSL #8 @ r14= vol_r as 16 bits
- CMP r1,#0
- BGT LinearRate_R_part2
-
- @ part1 - read input samples
-LinearRate_R_loop:
- SUBS r1, r1, #2 @ r1 = inLen -= 2
- BLT LinearRate_R_read
-LinearRate_R_read_return:
- LDR r10,[r2, #16] @ r10= icur[0,1]
- LDRSH r5, [r0],#2 @ r5 = tmp0 = *inPtr++
- LDRSH r6, [r0],#2 @ r5 = tmp1 = *inPtr++
- SUBS r8, r8, #1 @ r8 = opos--
- STR r10,[r2,#20] @ ilast[0,1] = icur[0,1]
- STRH r5, [r2,#16] @ icur[0] = tmp0
- STRH r6, [r2,#16] @ icur[1] = tmp1
- BGE LinearRate_R_loop
-
- @ part2 - form output samples
-LinearRate_R_part2:
- @ We are guaranteed that opos < 0 here
- LDRSH r6, [r2,#20] @ r6 = ilast[0]
- LDRSH r5, [r2,#16] @ r5 = icur[0]
- LDRH r4, [r2,#24] @ r4 = opos_frac
- MOV r6, r6, LSL #16 @ r6 = ilast[0]<<16
- SUB r5, r5, r6, ASR #16 @ r5 = icur[0] - ilast[0]
- ADD r6, r6, #1<<15 @ r6 = ilast[0]+1<<(FRAC_BITS-1)
- MLA r6, r4, r5, r6 @ r6 = (icur[0]-ilast[0])*opos_frac+ilast[0]
-
- LDRSH r7, [r2,#22] @ r6 = ilast[1]
- LDRSH r5, [r2,#18] @ r5 = icur[1]
- LDR r10,[r2,#28] @ r10= opos_frac_inc
- MOV r7, r7, LSL #16 @ r7 = ilast[1]<<16
- SUB r5, r5, r7, ASR #16 @ r5 = icur[1] - ilast[1]
- ADD r7, r7, #1<<15 @ r6 = ilast[1]+1<<(FRAC_BITS-1)
- MLA r7, r4, r5, r7 @ r6 = (icur[1]-ilast[1])*opos_frac+ilast[1]
-
- ADD r4, r4, r10 @ r4 = tmp = opos_frac+opos_inc_frac
- STRH r4,[r2,#24] @ opos_frac &= 65535
- ADD r8, r8, r4, LSR #16 @ opos += (tmp>>FRAC_BITS)
-
- LDRSH r4, [r3] @ r4 = obuf[0]
- LDRSH r5, [r3,#2] @ r5 = obuf[1]
- MOV r7, r7, ASR #16 @ r7 = tmp0 >>= 16
- MOV r6, r6, ASR #16 @ r6 = tmp1 >>= 16
- MUL r7, r12,r7 @ r7 = tmp0*vol_l
- MUL r6, r14,r6 @ r6 = tmp1*vol_r
-
- ADDS r7, r7, r4, LSL #16 @ r7 = obuf[0]<<16 + tmp0*vol_l
- MOV r4, #0
- RSCVS r7, r4, #1<<31 @ Clamp r7
- ADDS r6, r6, r5, LSL #16 @ r6 = obuf[1]<<16 + tmp1*vol_r
- RSCVS r6, r4, #1<<31 @ Clamp r6
-
- MOV r7, r7, LSR #16 @ Shift back to halfword
- MOV r6, r6, LSR #16 @ Shift back to halfword
-
- LDR r5, [r2,#12] @ r5 = opos_inc
- STRH r6, [r3],#2 @ Store output value
- STRH r7, [r3],#2 @ Store output value
- SUBS r11, r11,#1 @ opos--
- BLE LinearRate_R_end @ and loop
-
- ADDS r8, r8, r5 @ r8 = opos += opos_inc
- BLT LinearRate_R_part2
- B LinearRate_R_loop
-LinearRate_R_end:
- ADD r13,r13,#8
- STMIA r2,{r0,r1,r8}
- LDMFD r13!,{r4-r11,PC}
-LinearRate_R_read:
- ADD r0, r2, #32 @ r0 = inPtr = inBuf
- STMFD r13!,{r0,r2-r3,r12,r14}
-
- MOV r1, r0 @ r1 = inBuf
- LDR r0, [r13,#4*5] @ r0 = AudioStream & input
- MOV r2, #512 @ r2 = ARRAYSIZE(inBuf)
-
- @ Calling back into C++ here. WinCE is fairly easy about such things
- @ but other OS are more awkward. r9 is preserved for Symbian, and
- @ we have 2+9+5 = 16 things on the stack (an even number).
- MOV r14,PC
- LDR PC,[r13,#4*6] @ inLen = input.readBuffer(inBuf,512)
- SUBS r1, r0, #2 @ r1 = inLen-2
- LDMFD r13!,{r0,r2-r3,r12,r14}
- BLT LinearRate_R_end
- B LinearRate_R_read_return