diff options
author | Max Horn | 2004-06-25 22:11:48 +0000 |
---|---|---|
committer | Max Horn | 2004-06-25 22:11:48 +0000 |
commit | e5f90509a606819dec58b7642c9845373ae364d5 (patch) | |
tree | b892289fd90878d306be42c236c18f6ea6bbf269 /common | |
parent | de7c36f063eb4ee33b01bfb7be4186c7cb9fd704 (diff) | |
download | scummvm-rg350-e5f90509a606819dec58b7642c9845373ae364d5.tar.gz scummvm-rg350-e5f90509a606819dec58b7642c9845373ae364d5.tar.bz2 scummvm-rg350-e5f90509a606819dec58b7642c9845373ae364d5.zip |
Cleaned up SaveFileManager stuff a little bit
svn-id: r14056
Diffstat (limited to 'common')
-rw-r--r-- | common/savefile.cpp | 57 | ||||
-rw-r--r-- | common/savefile.h | 28 | ||||
-rw-r--r-- | common/system.cpp | 3 | ||||
-rw-r--r-- | common/system.h | 7 |
4 files changed, 44 insertions, 51 deletions
diff --git a/common/savefile.cpp b/common/savefile.cpp index 3aba3fdc36..a25dae3dc5 100644 --- a/common/savefile.cpp +++ b/common/savefile.cpp @@ -30,15 +30,6 @@ #include <zlib.h> #endif -uint32 SaveFile::read(void *ptr, uint32 size) { - return fread(ptr, 1, size); -} - -uint32 SaveFile::write(const void *ptr, uint32 size) { - return fwrite(ptr, 1, size); -} - - class StdioSaveFile : public SaveFile { private: FILE *fh; @@ -50,11 +41,10 @@ public: bool isOpen() const { return fh != 0; } -protected: - int fread(void *buf, int size, int cnt) - { return ::fread(buf, size, cnt, fh); } - int fwrite(const void *buf, int size, int cnt) - { return ::fwrite(buf, size, cnt, fh); } + uint32 read(void *buf, uint32 cnt) + { return ::fread(buf, 1, cnt, fh); } + uint32 write(const void *buf, uint32 cnt) + { return ::fwrite(buf, 1, cnt, fh); } }; @@ -70,11 +60,10 @@ public: bool isOpen() const { return fh != 0; } -protected: - int fread(void *buf, int size, int cnt) { - return ::gzread(fh, buf, size * cnt); + uint32 read(void *buf, uint32 cnt) { + return ::gzread(fh, buf, cnt); } - int fwrite(const void *buf, int size, int cnt) { + uint32 write(const void *buf, uint32 cnt) { // Due to a "bug" in the zlib headers (or maybe I should say, // a bug in the C++ spec? Whatever <g>) we have to be a bit // hackish here and remove the const qualifier. @@ -82,24 +71,13 @@ protected: // which you might think is the same as "const void *" but it // is not - rather it is equal to "void const *" which is the // same as "void *". Hrmpf - return ::gzwrite(fh, const_cast<void *>(buf), size * cnt); + return ::gzwrite(fh, const_cast<void *>(buf), cnt); } }; #endif -SaveFile *SaveFileManager::open_savefile(const char *filename, const char *directory, bool saveOrLoad) { - char buf[256]; - join_paths(filename, directory, buf, sizeof(buf)); - SaveFile *sf = makeSaveFile(buf, saveOrLoad); - if (!sf->isOpen()) { - delete sf; - sf = 0; - } - return sf; -} - -void SaveFileManager::join_paths(const char *filename, const char *directory, +static void join_paths(const char *filename, const char *directory, char *buf, int bufsize) { buf[bufsize-1] = '\0'; strncpy(buf, directory, bufsize-1); @@ -125,7 +103,22 @@ void SaveFileManager::join_paths(const char *filename, const char *directory, strncat(buf, filename, bufsize-1); } -SaveFile *SaveFileManager::makeSaveFile(const char *filename, bool saveOrLoad) { +SaveFile *DefaultSaveFileManager::open_savefile(const char *filename, const char *directory, bool saveOrLoad) { + char buf[256]; + join_paths(filename, directory, buf, sizeof(buf)); + SaveFile *sf = makeSaveFile(buf, saveOrLoad); + if (!sf->isOpen()) { + delete sf; + sf = 0; + } + return sf; +} + +void DefaultSaveFileManager::list_savefiles(const char * /* prefix */, const char *directory, bool *marks, int num) { + memset(marks, true, num * sizeof(bool)); +} + +SaveFile *DefaultSaveFileManager::makeSaveFile(const char *filename, bool saveOrLoad) { #ifdef USE_ZLIB return new GzipSaveFile(filename, saveOrLoad); #else diff --git a/common/savefile.h b/common/savefile.h index 83e09ad9c1..4e2c21eaa5 100644 --- a/common/savefile.h +++ b/common/savefile.h @@ -32,30 +32,30 @@ class SaveFile : public Common::ReadStream, public Common::WriteStream { public: virtual ~SaveFile() {} - /* Compatible with File API */ - uint32 read(void *ptr, uint32 size); - uint32 write(const void *ptr, uint32 size); - virtual bool isOpen() const = 0; - -protected: - /* Only for internal use, use File compatible API above instead */ - virtual int fread(void *buf, int size, int cnt) = 0; - virtual int fwrite(const void *buf, int size, int cnt) = 0; }; class SaveFileManager { - public: virtual ~SaveFileManager() {} + /** + * Open the file with name filename in the given directory for saving or loading. + * @param filename the filename + * @param directory the directory + * @param saveOrLoad true for saving, false for loading + * @return pointer to a SaveFile object + */ + virtual SaveFile *open_savefile(const char *filename, const char *directory, bool saveOrLoad) = 0; + virtual void list_savefiles(const char * /* prefix */, const char *directory, bool *marks, int num) = 0; +}; + +class DefaultSaveFileManager : public SaveFileManager { +public: virtual SaveFile *open_savefile(const char *filename, const char *directory, bool saveOrLoad); - virtual void list_savefiles(const char * /* prefix */, const char *directory, bool *marks, int num) { - memset(marks, true, num * sizeof(bool)); - } + virtual void list_savefiles(const char * /* prefix */, const char *directory, bool *marks, int num); protected: - void join_paths(const char *filename, const char *directory, char *buf, int bufsize); virtual SaveFile *makeSaveFile(const char *filename, bool saveOrLoad); }; diff --git a/common/system.cpp b/common/system.cpp index 75998e3795..bc65a5f21e 100644 --- a/common/system.cpp +++ b/common/system.cpp @@ -92,6 +92,9 @@ void OSystem::displayMessageOnOSD(const char *msg) { dialog.runModal(); } +SaveFileManager *OSystem::get_savefile_manager() { + return new DefaultSaveFileManager(); +} #pragma mark - diff --git a/common/system.h b/common/system.h index ec057dde63..794271f8bb 100644 --- a/common/system.h +++ b/common/system.h @@ -24,10 +24,9 @@ #define COMMON_SYSTEM_H #include "common/scummsys.h" -#include "common/savefile.h" #include "common/util.h" #include "common/rect.h" - +#include "common/savefile.h" /** * Interface for ScummVM backends. If you want to port ScummVM to a system @@ -623,9 +622,7 @@ public: virtual void displayMessageOnOSD(const char *msg); /** Savefile management. */ - virtual SaveFileManager *get_savefile_manager() { - return new SaveFileManager(); - } + virtual SaveFileManager *get_savefile_manager(); //@} }; |