aboutsummaryrefslogtreecommitdiff
path: root/backends
diff options
context:
space:
mode:
authorMarcus Comstedt2005-05-04 23:24:03 +0000
committerMarcus Comstedt2005-05-04 23:24:03 +0000
commit5b56b5ac016d92822554d4c4c26a79df68cc28cb (patch)
tree45c0fa1b7f8432975d321ff83fddf48e3ee45aed /backends
parentd1234bfdee8ded9ca4cac88c738b9ec0c2d1e074 (diff)
downloadscummvm-rg350-5b56b5ac016d92822554d4c4c26a79df68cc28cb.tar.gz
scummvm-rg350-5b56b5ac016d92822554d4c4c26a79df68cc28cb.tar.bz2
scummvm-rg350-5b56b5ac016d92822554d4c4c26a79df68cc28cb.zip
Split VMSave into InVMSave and OutVMSave.
svn-id: r17909
Diffstat (limited to 'backends')
-rw-r--r--backends/dc/vmsave.cpp97
1 files changed, 50 insertions, 47 deletions
diff --git a/backends/dc/vmsave.cpp b/backends/dc/vmsave.cpp
index 17e8a0532c..5d97f74952 100644
--- a/backends/dc/vmsave.cpp
+++ b/backends/dc/vmsave.cpp
@@ -215,30 +215,24 @@ bool readSaveGame(char *&buffer, int &size, const char *filename)
}
-class VMSave : public SaveFile {
+class InVMSave : public InSaveFile {
private:
- bool issave;
char *buffer;
int pos, size;
char filename[16];
uint32 read(void *buf, uint32 cnt);
- uint32 write(const void *buf, uint32 cnt);
public:
- VMSave(const char *_filename, bool _saveOrLoad)
- : issave(_saveOrLoad), pos(0), buffer(NULL)
+ InVMSave(const char *_filename)
+ : pos(0), buffer(NULL)
{
strncpy(filename, _filename, 16);
- if(issave)
- buffer = new char[size = MAX_SAVE_SIZE];
}
- ~VMSave();
-
- bool isOpen() const { return true; }
+ ~InVMSave();
- bool eos() const { return !issave && pos >= size; }
+ bool eos() const { return pos >= size; }
bool readSaveGame()
{ return ::readSaveGame(buffer, size, filename); }
@@ -258,61 +252,73 @@ public:
}
};
+class OutVMSave : public OutSaveFile {
+private:
+ char *buffer;
+ int pos, size;
+ char filename[16];
+
+ uint32 write(const void *buf, uint32 cnt);
+
+public:
+ OutVMSave(const char *_filename)
+ : pos(0)
+ {
+ strncpy(filename, _filename, 16);
+ buffer = new char[size = MAX_SAVE_SIZE];
+ }
+
+ ~OutVMSave();
+};
+
class VMSaveManager : public SaveFileManager {
public:
virtual OutSaveFile *openForSaving(const char *filename) {
- return openSavefile(filename, true);
+ return new OutVMSave(filename);
}
+
virtual InSaveFile *openForLoading(const char *filename) {
- return openSavefile(filename, false);
+ InVMSave *s = new InVMSave(filename);
+ if(s->readSaveGame()) {
+ s->tryUncompress();
+ return s;
+ } else {
+ delete s;
+ return NULL;
+ }
}
- SaveFile *openSavefile(const char *filename, bool saveOrLoad);
virtual void listSavefiles(const char *prefix, bool *marks, int num);
};
-SaveFile *VMSaveManager::openSavefile(const char *filename, bool saveOrLoad)
+InVMSave::~InVMSave()
{
- VMSave *s = new VMSave(filename, saveOrLoad);
- if(saveOrLoad)
- return s;
- else if(s->readSaveGame()) {
- s->tryUncompress();
- return s;
- } else {
- delete s;
- return NULL;
- }
+ delete buffer;
}
-VMSave::~VMSave()
+OutVMSave::~OutVMSave()
{
extern const char *gGameName;
extern Icon icon;
- if(issave) {
- if(pos) {
- // Try compression
- char *compbuf = new char[pos];
- unsigned long destlen = pos;
- if(!compress((Bytef*)compbuf, &destlen, (Bytef*)buffer, pos)) {
- delete buffer;
- buffer = compbuf;
- pos = destlen;
- } else delete compbuf;
- }
- displaySaveResult(writeSaveGame(gGameName, buffer,
- pos, filename, icon));
+ if(pos) {
+ // Try compression
+ char *compbuf = new char[pos];
+ unsigned long destlen = pos;
+ if(!compress((Bytef*)compbuf, &destlen, (Bytef*)buffer, pos)) {
+ delete buffer;
+ buffer = compbuf;
+ pos = destlen;
+ } else delete compbuf;
}
+ displaySaveResult(writeSaveGame(gGameName, buffer,
+ pos, filename, icon));
delete buffer;
}
-uint32 VMSave::read(void *buf, uint32 cnt)
+uint32 InVMSave::read(void *buf, uint32 cnt)
{
- if (issave)
- return 0;
-
int nbyt = cnt;
if (pos + nbyt > size) {
cnt = (size - pos);
@@ -324,11 +330,8 @@ uint32 VMSave::read(void *buf, uint32 cnt)
return cnt;
}
-uint32 VMSave::write(const void *buf, uint32 cnt)
+uint32 OutVMSave::write(const void *buf, uint32 cnt)
{
- if (!issave)
- return 0;
-
int nbyt = cnt;
if (pos + nbyt > size) {
cnt = (size - pos);