[Scummvm-cvs-logs] SF.net SVN: scummvm: [31021] scummvm/trunk

marcus_c at users.sourceforge.net marcus_c at users.sourceforge.net
Sat Mar 1 16:45:55 CET 2008


Revision: 31021
          http://scummvm.svn.sourceforge.net/scummvm/?rev=31021&view=rev
Author:   marcus_c
Date:     2008-03-01 07:45:54 -0800 (Sat, 01 Mar 2008)

Log Message:
-----------
Moved Dreamcast filesystem factory to platform directory.

Modified Paths:
--------------
    scummvm/trunk/backends/module.mk
    scummvm/trunk/backends/platform/dc/Makefile
    scummvm/trunk/backends/platform/dc/dc.h
    scummvm/trunk/common/system.cpp

Added Paths:
-----------
    scummvm/trunk/backends/platform/dc/dc-fs.cpp
    scummvm/trunk/backends/platform/dc/ronincd-fs-factory.cpp
    scummvm/trunk/backends/platform/dc/ronincd-fs-factory.h

Removed Paths:
-------------
    scummvm/trunk/backends/fs/dc/

Modified: scummvm/trunk/backends/module.mk
===================================================================
--- scummvm/trunk/backends/module.mk	2008-03-01 15:13:06 UTC (rev 31020)
+++ scummvm/trunk/backends/module.mk	2008-03-01 15:45:54 UTC (rev 31021)
@@ -2,7 +2,6 @@
 
 MODULE_OBJS := \
 	fs/amigaos4/amigaos4-fs-factory.o \
-	fs/dc/ronincd-fs-factory.o \
 	fs/ds/ds-fs-factory.o \
 	fs/gp32/gp32-fs-factory.o \
 	fs/morphos/abox-fs-factory.o \

Modified: scummvm/trunk/backends/platform/dc/Makefile
===================================================================
--- scummvm/trunk/backends/platform/dc/Makefile	2008-03-01 15:13:06 UTC (rev 31020)
+++ scummvm/trunk/backends/platform/dc/Makefile	2008-03-01 15:45:54 UTC (rev 31021)
@@ -35,7 +35,7 @@
 endif
 
 OBJS :=	dcmain.o time.o display.o audio.o input.o selector.o icon.o \
-	label.o vmsave.o softkbd.o dcloader.o cache.o
+	label.o vmsave.o softkbd.o dcloader.o cache.o ronincd-fs-factory.o
 
 MODULE_DIRS += .
 

Copied: scummvm/trunk/backends/platform/dc/dc-fs.cpp (from rev 31019, scummvm/trunk/backends/fs/dc/dc-fs.cpp)
===================================================================
--- scummvm/trunk/backends/platform/dc/dc-fs.cpp	                        (rev 0)
+++ scummvm/trunk/backends/platform/dc/dc-fs.cpp	2008-03-01 15:45:54 UTC (rev 31021)
@@ -0,0 +1,193 @@
+/* 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$
+ */
+
+#if defined(__DC__)
+
+#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.
+ *
+ * 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;
+
+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 bool exists() 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 bool isReadable() const { return true; }
+	virtual bool isWritable() const { return false; }
+
+	virtual AbstractFilesystemNode *getChild(const String &n) const;
+	virtual bool getChildren(AbstractFSList &list, ListMode mode, bool hidden) 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.
+ */
+const char *lastPathComponent(const Common::String &str) {
+	if(str.empty())
+		return "";
+
+	const char *start = str.c_str();
+	const char *cur = start + str.size() - 2;
+
+	while (cur >= start && *cur != '/') {
+		--cur;
+	}
+
+	return cur + 1;
+}
+
+RoninCDFilesystemNode::RoninCDFilesystemNode() {
+	// The root dir.
+	_path = "/";
+	_displayName = _path;
+	_isValid = true;
+	_isDirectory = true;
+}
+
+RoninCDFilesystemNode::RoninCDFilesystemNode(const String &p, bool verify) {
+	assert(p.size() > 0);
+
+	_path = p;
+	_displayName = lastPathComponent(_path);
+	_isValid = true;
+	_isDirectory = true;
+
+	if (verify) {
+		int fd;
+
+		if ((fd = open(_path.c_str(), O_RDONLY)) >= 0) {
+			close(fd);
+			_isDirectory = false;
+		}
+		else if ((fd = open(_path.c_str(), O_DIR|O_RDONLY)) >= 0) {
+			close(fd);
+		}
+		else {
+			_isValid = false;
+		}
+	}
+}
+
+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);
+
+	String newPath(_path);
+	if (_path.lastChar() != '/')
+		newPath += '/';
+	newPath += n;
+
+	return new RoninCDFilesystemNode(newPath, true);
+}
+
+bool RoninCDFilesystemNode::getChildren(AbstractFSList &myList, ListMode mode, bool hidden) const {
+	assert(_isDirectory);
+
+	//TODO: honor the hidden flag
+
+	DIR *dirp = opendir(_path.c_str());
+	struct dirent *dp;
+
+	if (dirp == NULL)
+		return false;
+
+	// ... loop over dir entries using readdir
+	while ((dp = readdir(dirp)) != NULL) {
+		String newPath(_path);
+		if (newPath.lastChar() != '/')
+			newPath += '/';
+		newPath += dp->d_name;
+
+		RoninCDFilesystemNode entry(newPath, false);
+
+		entry._isDirectory = dp->d_size < 0;
+
+		// Skip files that are invalid for some reason (e.g. because we couldn't
+		// properly stat them).
+		if (!entry._isValid)
+			continue;
+
+		// Honor the chosen mode
+		if ((mode == FilesystemNode::kListFilesOnly && entry._isDirectory) ||
+			(mode == FilesystemNode::kListDirectoriesOnly && !entry._isDirectory))
+			continue;
+
+		if (entry._isDirectory)
+			entry._path += "/";
+
+		myList.push_back(new RoninCDFilesystemNode(entry));
+	}
+	closedir(dirp);
+
+	return true;
+}
+
+AbstractFilesystemNode *RoninCDFilesystemNode::getParent() const {
+	if (_path == "/")
+		return 0;
+
+	const char *start = _path.c_str();
+	const char *end = lastPathComponent(_path);
+
+	return new RoninCDFilesystemNode(String(start, end - start), false);
+}
+
+#endif // defined(__DC__)

Modified: scummvm/trunk/backends/platform/dc/dc.h
===================================================================
--- scummvm/trunk/backends/platform/dc/dc.h	2008-03-01 15:13:06 UTC (rev 31020)
+++ scummvm/trunk/backends/platform/dc/dc.h	2008-03-01 15:45:54 UTC (rev 31021)
@@ -27,6 +27,7 @@
 #include <graphics/surface.h>
 #include <ronin/soundcommon.h>
 #include "backends/timer/default/default-timer.h"
+#include "ronincd-fs-factory.h"
 
 #define NUM_BUFFERS 4
 #define SOUND_BUFFER_SHIFT 3
@@ -182,6 +183,8 @@
   // Extra SoftKbd support
   void mouseToSoftKbd(int x, int y, int &rx, int &ry) const;
 
+  // Filesystem
+  FilesystemFactory *getFilesystemFactory() { return &_fileSystemFactory; }
 
  private:
 
@@ -189,6 +192,7 @@
   Audio::Mixer *_mixer;
   DefaultTimerManager *_timer;
   SoftKeyboard _softkbd;
+  RoninCDFilesystemFactory _fileSystemFactory;
 
   int _ms_cur_x, _ms_cur_y, _ms_cur_w, _ms_cur_h, _ms_old_x, _ms_old_y;
   int _ms_hotspot_x, _ms_hotspot_y, _ms_visible, _devpoll;

Copied: scummvm/trunk/backends/platform/dc/ronincd-fs-factory.cpp (from rev 31019, scummvm/trunk/backends/fs/dc/ronincd-fs-factory.cpp)
===================================================================
--- scummvm/trunk/backends/platform/dc/ronincd-fs-factory.cpp	                        (rev 0)
+++ scummvm/trunk/backends/platform/dc/ronincd-fs-factory.cpp	2008-03-01 15:45:54 UTC (rev 31021)
@@ -0,0 +1,40 @@
+/* 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$
+ */
+
+#if defined(__DC__)
+#include "ronincd-fs-factory.h"
+#include "dc-fs.cpp"
+
+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);
+}
+#endif

Copied: scummvm/trunk/backends/platform/dc/ronincd-fs-factory.h (from rev 31019, scummvm/trunk/backends/fs/dc/ronincd-fs-factory.h)
===================================================================
--- scummvm/trunk/backends/platform/dc/ronincd-fs-factory.h	                        (rev 0)
+++ scummvm/trunk/backends/platform/dc/ronincd-fs-factory.h	2008-03-01 15:45:54 UTC (rev 31021)
@@ -0,0 +1,44 @@
+/* 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 RONINCD_FILESYSTEM_FACTORY_H
+#define RONINCD_FILESYSTEM_FACTORY_H
+
+#include "backends/fs/fs-factory.h"
+
+/**
+ * Creates RoninCDFilesystemNode objects.
+ *
+ * Parts of this class are documented in the base interface class, FilesystemFactory.
+ */
+class RoninCDFilesystemFactory : public FilesystemFactory {
+public:
+	typedef Common::String String;
+
+	virtual AbstractFilesystemNode *makeRootFileNode() const;
+	virtual AbstractFilesystemNode *makeCurrentDirectoryFileNode() const;
+	virtual AbstractFilesystemNode *makeFileNodePath(const String &path) const;
+};
+
+#endif /*RONINCD_FILESYSTEM_FACTORY_H*/

Modified: scummvm/trunk/common/system.cpp
===================================================================
--- scummvm/trunk/common/system.cpp	2008-03-01 15:13:06 UTC (rev 31020)
+++ scummvm/trunk/common/system.cpp	2008-03-01 15:45:54 UTC (rev 31021)
@@ -138,8 +138,6 @@
  */
 #if defined(__amigaos4__)
 	#include "backends/fs/amigaos4/amigaos4-fs-factory.h"
-#elif defined(__DC__)
-	#include "backends/fs/dc/ronincd-fs-factory.h"
 #elif defined(__DS__)
 	#include "backends/fs/ds/ds-fs-factory.h"
 #elif defined(__GP32__)
@@ -164,7 +162,8 @@
 	#if defined(__amigaos4__)
 		return &AmigaOSFilesystemFactory::instance();
 	#elif defined(__DC__)
-		return &RoninCDFilesystemFactory::instance();
+		// The DC port overrides this function...
+		abort();
 	#elif defined(__DS__)
 		return &DSFilesystemFactory::instance();
 	#elif defined(__GP32__)


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list