[Scummvm-cvs-logs] CVS: scummvm/scumm dialogs.cpp,1.31,1.32 saveload.cpp,1.33,1.34 saveload.h,1.5,1.6 scumm.h,1.85,1.86

Marcus Comstedt marcus_c at users.sourceforge.net
Mon Dec 16 17:16:05 CET 2002


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1:/tmp/cvs-serv32726/scumm

Modified Files:
	dialogs.cpp saveload.cpp saveload.h scumm.h 
Log Message:
New savefile backend system (bye bye NONSTANDARD_SAVE...)

Index: dialogs.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/dialogs.cpp,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -d -r1.31 -r1.32
--- dialogs.cpp	14 Dec 2002 14:31:44 -0000	1.31
+++ dialogs.cpp	17 Dec 2002 01:15:13 -0000	1.32
@@ -406,11 +406,19 @@
 	ScummVM::StringList l;
 	char name[32];
 	int i = _saveMode ? 1 : 0;
+	bool avail_saves[81];
+	SaveFileManager *mgr = _scumm->_system->get_savefile_manager();
 
+	_scumm->listSavegames(avail_saves, 81, mgr);
 	for (; i <= 80; i++) {		// 80 - got this value from the old GUI
-		_scumm->getSavegameName(i, name);
+		if(avail_saves[i])
+			_scumm->getSavegameName(i, name, mgr);
+		else
+			name[0] = 0;
 		l.push_back(name);
 	}
+
+	delete mgr;
 
 	_savegameList->setList(l);
 	_savegameList->setNumberingMode(_saveMode ? kListNumberingOne : kListNumberingZero);

Index: saveload.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/saveload.cpp,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -d -r1.33 -r1.34
--- saveload.cpp	16 Dec 2002 12:09:52 -0000	1.33
+++ saveload.cpp	17 Dec 2002 01:15:13 -0000	1.34
@@ -39,15 +39,15 @@
 };
 
 
-bool Scumm::saveState(int slot, bool compat)
+bool Scumm::saveState(int slot, bool compat, SaveFileManager *mgr)
 {
 	char filename[256];
-	SerializerStream out;
+	SaveFile *out;
 	SaveGameHeader hdr;
 
 	makeSavegameName(filename, slot, compat);
 
-	if (!out.fopen(filename, "wb"))
+	if (!(out = mgr->open_savefile(filename, true)))
 		return false;
 
 	memcpy(hdr.name, _saveLoadName, sizeof(hdr.name));
@@ -56,32 +56,32 @@
 	hdr.size = 0;
 	hdr.ver = TO_LE_32(CURRENT_VER);
 
-	out.fwrite(&hdr, sizeof(hdr), 1);
+	out->fwrite(&hdr, sizeof(hdr), 1);
 
 	Serializer ser(out, true, CURRENT_VER);
 	saveOrLoad(&ser, CURRENT_VER);
 
-	out.fclose();
+	delete out;
 	debug(1, "State saved as '%s'", filename);
 	return true;
 }
 
-bool Scumm::loadState(int slot, bool compat)
+bool Scumm::loadState(int slot, bool compat, SaveFileManager *mgr)
 {
 	char filename[256];
-	SerializerStream out;
+	SaveFile *out;
 	int i, j;
 	SaveGameHeader hdr;
 	int sb, sh;
 
 	makeSavegameName(filename, slot, compat);
-	if (!out.fopen(filename, "rb"))
+	if (!(out = mgr->open_savefile(filename, false)))
 		return false;
 
-	out.fread(&hdr, sizeof(hdr), 1);
+	out->fread(&hdr, sizeof(hdr), 1);
 	if (hdr.type != MKID('SCVM')) {
 		warning("Invalid savegame '%s'", filename);
-		out.fclose();
+		delete out;
 		return false;
 	}
 
@@ -92,7 +92,7 @@
 	if (hdr.ver < VER_V7 || hdr.ver > CURRENT_VER)
 	{
 		warning("Invalid version of '%s'", filename);
-		out.fclose();
+		delete out;
 		return false;
 	}
 	
@@ -126,7 +126,7 @@
 
 	Serializer ser(out, false, hdr.ver);
 	saveOrLoad(&ser, hdr.ver);
-	out.fclose();
+	delete out;
 
 	sb = _screenB;
 	sh = _screenH;
@@ -174,20 +174,28 @@
 	sprintf(out, "%s%s.%c%.2d", dir, _game_name, compatible ? 'c' : 's', slot);
 }
 
-bool Scumm::getSavegameName(int slot, char *desc)
+void Scumm::listSavegames(bool *marks, int num, SaveFileManager *mgr)
+{
+	char prefix[256];
+	makeSavegameName(prefix, 99, false);
+	prefix[strlen(prefix)-2] = 0;
+	mgr->list_savefiles(prefix, marks, num);
+}
+
+bool Scumm::getSavegameName(int slot, char *desc, SaveFileManager *mgr)
 {
 	char filename[256];
-	SerializerStream out;
+	SaveFile *out;
 	SaveGameHeader hdr;
 	int len;
 
 	makeSavegameName(filename, slot, false);
-	if (!out.fopen(filename, "rb")) {
+	if (!(out = mgr->open_savefile(filename, false))) {
 		strcpy(desc, "");
 		return false;
 	}
-	len = out.fread(&hdr, sizeof(hdr), 1);
-	out.fclose();
+	len = out->fread(&hdr, sizeof(hdr), 1);
+	delete out;
 
 	if (len != 1 || hdr.type != MKID('SCVM')) {
 		strcpy(desc, "Invalid savegame");
@@ -652,12 +660,12 @@
 
 void Serializer::saveBytes(void *b, int len)
 {
-	_saveLoadStream.fwrite(b, 1, len);
+	_saveLoadStream->fwrite(b, 1, len);
 }
 
 void Serializer::loadBytes(void *b, int len)
 {
-	_saveLoadStream.fread(b, 1, len);
+	_saveLoadStream->fread(b, 1, len);
 }
 
 #ifdef _WIN32_WCE
@@ -666,11 +674,11 @@
 
 bool Serializer::checkEOFLoadStream()
 {
-	if (!fseek(_saveLoadStream.out, 1, SEEK_CUR))
+	if (!_saveLoadStream->fseek(1, SEEK_CUR))
 		return true;
-	if (feof(_saveLoadStream.out))
+	if (_saveLoadStream->feof())
 		return true;
-	fseek(_saveLoadStream.out, -1, SEEK_CUR);
+	_saveLoadStream->fseek(-1, SEEK_CUR);
 	return false;
 }
 

Index: saveload.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/saveload.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- saveload.h	8 Dec 2002 16:14:29 -0000	1.5
+++ saveload.h	17 Dec 2002 01:15:13 -0000	1.6
@@ -85,38 +85,12 @@
 	uint8 maxVersion;
 };
 
-struct SerializerStream {
-#ifdef NONSTANDARD_SAVE
-	void *context;
-
-	bool fopen(const char *filename, const char *mode);
-	void fclose();
-	int fread(void *buf, int size, int cnt);
-	int fwrite(void *buf, int size, int cnt);
-#else
-	FILE *out;
-
-	FILE *fopen(const char *filename, const char *mode) {
-		return out = ::fopen(filename, mode);
-	}
-	void fclose() {
-		::fclose(out);
-	}
-	int fread(void *buf, int size, int cnt) {
-		return ::fread(buf, size, cnt, out);
-	}
-	int fwrite(void *buf, int size, int cnt) {
-		return ::fwrite(buf, size, cnt, out);
-	}
-#endif
-};
-
 typedef int SerializerSaveReference(void *me, byte type, void *ref);
 typedef void *SerializerLoadReference(void *me, byte type, int ref);
 
 class Serializer {
 public:
-	Serializer(SerializerStream stream, bool saveOrLoad, uint32 savegameVersion)
+	Serializer(SaveFile *stream, bool saveOrLoad, uint32 savegameVersion)
 		: _save_ref(0), _load_ref(0), _ref_me(0),
 		  _saveLoadStream(stream), _saveOrLoad(saveOrLoad),
 		  _savegameVersion(savegameVersion)
@@ -146,7 +120,7 @@
 	void loadBytes(void *b, int len);
 	
 protected:
-	SerializerStream _saveLoadStream;
+	SaveFile *_saveLoadStream;
 	bool _saveOrLoad;
 	uint32 _savegameVersion;
 

Index: scumm.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.h,v
retrieving revision 1.85
retrieving revision 1.86
diff -u -d -r1.85 -r1.86
--- scumm.h	16 Dec 2002 22:43:37 -0000	1.85
+++ scumm.h	17 Dec 2002 01:15:13 -0000	1.86
@@ -439,13 +439,28 @@
 	bool _saveLoadCompatible;
 	char _saveLoadName[32];
 
-	bool saveState(int slot, bool compat);
-	bool loadState(int slot, bool compat);
+	bool saveState(int slot, bool compat, SaveFileManager *mgr);
+	bool loadState(int slot, bool compat, SaveFileManager *mgr);
+	bool saveState(int slot, bool compat)
+	{
+		SaveFileManager *mgr = _system->get_savefile_manager();
+		bool result = saveState(slot, compat, mgr);
+		delete mgr;
+		return result;
+	}
+	bool loadState(int slot, bool compat)
+	{
+		SaveFileManager *mgr = _system->get_savefile_manager();
+		bool result = loadState(slot, compat, mgr);
+		delete mgr;
+		return result;
+	}
 	void saveOrLoad(Serializer *s, uint32 savegameVersion);
 
-	bool getSavegameName(int slot, char *desc);
+	bool getSavegameName(int slot, char *desc, SaveFileManager *mgr);
 	void makeSavegameName(char *out, int slot, bool compatible);
 	void saveLoadResource(Serializer *ser, int type, int index);
+	void listSavegames(bool *marks, int num, SaveFileManager *mgr);
 
 	/* Heap and memory management */
 	uint32 _maxHeapThreshold, _minHeapThreshold;





More information about the Scummvm-git-logs mailing list