[Scummvm-cvs-logs] SF.net SVN: scummvm: [22281] scummvm/trunk/backends/dc/vmsave.cpp

marcus_c at users.sourceforge.net marcus_c at users.sourceforge.net
Tue May 2 15:27:12 CEST 2006


Revision: 22281
Author:   marcus_c
Date:     2006-05-02 15:26:26 -0700 (Tue, 02 May 2006)
ViewCVS:  http://svn.sourceforge.net/scummvm/?rev=22281&view=rev

Log Message:
-----------
Implemented new InSaveFile methods.

Modified Paths:
--------------
    scummvm/trunk/backends/dc/vmsave.cpp
Modified: scummvm/trunk/backends/dc/vmsave.cpp
===================================================================
--- scummvm/trunk/backends/dc/vmsave.cpp	2006-05-02 18:15:00 UTC (rev 22280)
+++ scummvm/trunk/backends/dc/vmsave.cpp	2006-05-02 22:26:26 UTC (rev 22281)
@@ -220,14 +220,15 @@
 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 @@
       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,24 +342,43 @@
 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)
 {
   int nbyt = cnt;


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