diff options
| author | Marcus Comstedt | 2006-05-02 22:26:26 +0000 |
|---|---|---|
| committer | Marcus Comstedt | 2006-05-02 22:26:26 +0000 |
| commit | aa7513d0d5867115274980d1f2b7f2d988734d81 (patch) | |
| tree | f224c2b65e1337a941f86c12a6146e2b6f676833 /backends | |
| parent | 9714ea9055dae1b7f193c65316a7da0f92fa91a1 (diff) | |
| download | scummvm-rg350-aa7513d0d5867115274980d1f2b7f2d988734d81.tar.gz scummvm-rg350-aa7513d0d5867115274980d1f2b7f2d988734d81.tar.bz2 scummvm-rg350-aa7513d0d5867115274980d1f2b7f2d988734d81.zip | |
Implemented new InSaveFile methods.
svn-id: r22281
Diffstat (limited to 'backends')
| -rw-r--r-- | backends/dc/vmsave.cpp | 50 |
1 files changed, 36 insertions, 14 deletions
diff --git a/backends/dc/vmsave.cpp b/backends/dc/vmsave.cpp index c2da2e3d1d..604d9230a7 100644 --- a/backends/dc/vmsave.cpp +++ b/backends/dc/vmsave.cpp @@ -220,14 +220,15 @@ bool readSaveGame(char *&buffer, int &size, const char *filename) class InVMSave : public Common::InSaveFile { private: char *buffer; - int pos, size; + int _pos, _size; uint32 read(void *buf, uint32 cnt); void skip(uint32 offset); + void seek(int32 offs, int whence); public: InVMSave() - : pos(0), buffer(NULL) + : _pos(0), buffer(NULL) { } ~InVMSave() @@ -236,21 +237,23 @@ public: delete[] buffer; } - bool eos() const { return pos >= size; } + bool eos() const { return _pos >= _size; } + uint32 pos() const { return _pos; } + uint32 size() const { return _size; } bool readSaveGame(const char *filename) - { return ::readSaveGame(buffer, size, filename); } + { return ::readSaveGame(buffer, _size, filename); } void tryUncompress() { - if(size > 0 && buffer[0] != 'S') { + if(_size > 0 && buffer[0] != 'S') { // Data does not start with "SCVM". Maybe compressed? char *expbuf = new char[MAX_SAVE_SIZE]; unsigned long destlen = MAX_SAVE_SIZE; - if(!uncompress((Bytef*)expbuf, &destlen, (Bytef*)buffer, size)) { + if(!uncompress((Bytef*)expbuf, &destlen, (Bytef*)buffer, _size)) { delete[] buffer; buffer = expbuf; - size = destlen; + _size = destlen; } else delete[] expbuf; } } @@ -339,22 +342,41 @@ OutVMSave::~OutVMSave() uint32 InVMSave::read(void *buf, uint32 cnt) { int nbyt = cnt; - if (pos + nbyt > size) { - cnt = (size - pos); + if (_pos + nbyt > _size) { + cnt = (_size - _pos); nbyt = cnt; } if (nbyt) - memcpy(buf, buffer + pos, nbyt); - pos += nbyt; + memcpy(buf, buffer + _pos, nbyt); + _pos += nbyt; return cnt; } void InVMSave::skip(uint32 offset) { int nbyt = offset; - if (pos + nbyt > size) - nbyt = (size - pos); - pos += nbyt; + if (_pos + nbyt > _size) + nbyt = (_size - _pos); + _pos += nbyt; +} + +void InVMSave::seek(int32 offs, int whence) +{ + switch(whence) { + case SEEK_SET: + _pos = offs; + break; + case SEEK_CUR: + _pos += offs; + break; + case SEEK_END: + _pos = _size + offs; + break; + } + if(_pos < 0) + _pos = 0; + else if(_pos > _size) + _pos = _size; } uint32 OutVMSave::write(const void *buf, uint32 cnt) |
