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

kirben at users.sourceforge.net kirben at users.sourceforge.net
Mon May 1 20:24:02 CEST 2006


Revision: 22273
Author:   kirben
Date:     2006-05-01 20:23:03 -0700 (Mon, 01 May 2006)
ViewCVS:  http://svn.sourceforge.net/scummvm/?rev=22273&view=rev

Log Message:
-----------
Add support for reading/writing config files through saveGameManager and use for config files in HE games

Modified Paths:
--------------
    scummvm/trunk/common/config-file.cpp
    scummvm/trunk/common/config-file.h
    scummvm/trunk/engines/scumm/he/intern_he.h
    scummvm/trunk/engines/scumm/he/script_v60he.cpp
    scummvm/trunk/engines/scumm/he/script_v80he.cpp
Modified: scummvm/trunk/common/config-file.cpp
===================================================================
--- scummvm/trunk/common/config-file.cpp	2006-05-01 22:27:56 UTC (rev 22272)
+++ scummvm/trunk/common/config-file.cpp	2006-05-02 03:23:03 UTC (rev 22273)
@@ -24,6 +24,8 @@
 
 #include "common/config-file.h"
 #include "common/file.h"
+#include "common/savefile.h"
+#include "common/system.h"
 #include "common/util.h"
 
 #define MAXLINELEN 256
@@ -74,6 +76,18 @@
 		return false;
 }
 
+bool ConfigFile::loadFromSaveFile(const char *filename) {
+	SaveFileManager *saveFileMan = g_system->getSavefileManager();
+	SeekableReadStream *loadFile;
+
+	if (!(loadFile = saveFileMan->openForLoading(filename)))
+		return false;
+
+	bool status = loadFromStream(*loadFile);
+	delete loadFile;
+	return status;
+}
+
 bool ConfigFile::loadFromStream(SeekableReadStream &stream) {
 	char buf[MAXLINELEN];
 	Section section;
@@ -176,6 +190,18 @@
 		return false;
 }
 
+bool ConfigFile::saveToSaveFile(const char *filename) {
+	SaveFileManager *saveFileMan = g_system->getSavefileManager();
+	WriteStream *saveFile;
+
+	if (!(saveFile = saveFileMan->openForSaving(filename)))
+		return false;
+
+	bool status = saveToStream(*saveFile);
+	delete saveFile;
+	return status;
+}
+
 bool ConfigFile::saveToStream(WriteStream &stream) {
 	for (List<Section>::iterator i = _sections.begin(); i != _sections.end(); ++i) {
 		// Write out the section comment, if any
@@ -203,6 +229,7 @@
 		}
 	}
 
+	stream.flush();
 	return !stream.ioFailed();
 }
 

Modified: scummvm/trunk/common/config-file.h
===================================================================
--- scummvm/trunk/common/config-file.h	2006-05-01 22:27:56 UTC (rev 22272)
+++ scummvm/trunk/common/config-file.h	2006-05-02 03:23:03 UTC (rev 22273)
@@ -99,8 +99,10 @@
 	void	clear();
 
 	bool	loadFromFile(const String &filename);
+	bool	loadFromSaveFile(const char *filename);
 	bool	loadFromStream(SeekableReadStream &stream);
 	bool	saveToFile(const String &filename);
+	bool	saveToSaveFile(const char *filename);
 	bool	saveToStream(WriteStream &stream);
 
 	bool	hasSection(const String &section) const;

Modified: scummvm/trunk/engines/scumm/he/intern_he.h
===================================================================
--- scummvm/trunk/engines/scumm/he/intern_he.h	2006-05-01 22:27:56 UTC (rev 22272)
+++ scummvm/trunk/engines/scumm/he/intern_he.h	2006-05-02 03:23:03 UTC (rev 22273)
@@ -83,7 +83,7 @@
 	int virtScreenSave(byte *dst, int x1, int y1, int x2, int y2);
 	void virtScreenLoad(int resIdx, int x1, int y1, int x2, int y2);
 
-	int convertFilePath(byte *dst, bool setFilePath = false);
+	int convertFilePath(byte *dst);
 	virtual void decodeParseString(int a, int b);
 	void swapObjects(int object1, int object2);
 

Modified: scummvm/trunk/engines/scumm/he/script_v60he.cpp
===================================================================
--- scummvm/trunk/engines/scumm/he/script_v60he.cpp	2006-05-01 22:27:56 UTC (rev 22272)
+++ scummvm/trunk/engines/scumm/he/script_v60he.cpp	2006-05-02 03:23:03 UTC (rev 22273)
@@ -399,10 +399,10 @@
 	return _opcodesv60he[i].desc;
 }
 
-int ScummEngine_v60he::convertFilePath(byte *dst, bool setFilePath) {
+int ScummEngine_v60he::convertFilePath(byte *dst) {
 	debug(1, "convertFilePath: original filePath is %s", dst);
 
-	int len = resStrLen(dst) + 1;
+	int len = resStrLen(dst);
 	if (dst[0] == ':') {
 		// Switch all : to / for portablity
 		int j = 0;
@@ -431,19 +431,7 @@
 		}
 	}
 
-	if (setFilePath) {
-		char filePath[256];
-		strncpy(filePath, (char *)dst + r, sizeof(filePath));
-		if (!Common::File::exists(filePath)) {
-			// FIXME: Using getSavePath() to generate filepaths used with
-			// File::open is not portable!
-			strncpy(filePath, _saveFileMan->getSavePath(), sizeof(filePath));
-			strncat(filePath, (char *)dst + r, sizeof(filePath));
-		}
-		strcpy((char *)dst, filePath);
-		debug(1, "convertFilePath: filePath is %s", dst);
-	}
-
+	debug(1, "convertFilePath: converted filePath is %s", dst + r);
 	return r;
 }
 

Modified: scummvm/trunk/engines/scumm/he/script_v80he.cpp
===================================================================
--- scummvm/trunk/engines/scumm/he/script_v80he.cpp	2006-05-01 22:27:56 UTC (rev 22272)
+++ scummvm/trunk/engines/scumm/he/script_v80he.cpp	2006-05-02 03:23:03 UTC (rev 22273)
@@ -449,15 +449,18 @@
 	byte option[128], section[128], filename[256];
 	ArrayHeader *ah;
 	Common::String entry;
-	int len;
+	int len, r;
 
 	copyScriptString(option, sizeof(option));
 	copyScriptString(section, sizeof(section));
 	copyScriptString(filename, sizeof(filename));
-	convertFilePath(filename, true);
+	r = convertFilePath(filename);
 
 	Common::ConfigFile ConfFile;
-	ConfFile.loadFromFile((const char *)filename);
+	if (!strcmp((char *)filename + r, "map.ini"))
+		ConfFile.loadFromFile((const char *)filename + r);
+	else
+		ConfFile.loadFromSaveFile((const char *)filename + r);
 
 	byte subOp = fetchScriptByte();
 
@@ -487,7 +490,7 @@
 
 void ScummEngine_v80he::o80_writeConfigFile() {
 	byte filename[256], section[256], option[256], string[1024];
-	int value;
+	int r, value;
 
 	byte subOp = fetchScriptByte();
 
@@ -499,7 +502,6 @@
 		copyScriptString(option, sizeof(option));
 		copyScriptString(section, sizeof(section));
 		copyScriptString(filename, sizeof(filename));
-		convertFilePath(filename, true);
 		break;
 	case 77: // HE 100
 	case 7: // string
@@ -507,16 +509,18 @@
 		copyScriptString(option, sizeof(option));
 		copyScriptString(section, sizeof(section));
 		copyScriptString(filename, sizeof(filename));
-		convertFilePath(filename, true);
 		break;
 	default:
 		error("o80_writeConfigFile: default type %d", subOp);
 	}
 
+	r = convertFilePath(filename);
+
 	Common::ConfigFile ConfFile;
-	ConfFile.loadFromFile((const char *)filename);
+	ConfFile.loadFromSaveFile((const char *)filename + r);
 	ConfFile.setKey((char *)option, (char *)section, (char *)string);
-	ConfFile.saveToFile((const char *)filename);
+	ConfFile.saveToSaveFile((const char *)filename + r);
+
 	debug(1,"o80_writeConfigFile: Filename %s Section %s Option %s String %s", filename, section, option, string);
 }
 


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