[Scummvm-cvs-logs] CVS: scummvm/common savefile.cpp,NONE,1.1 module.mk,1.2,1.3 savefile.h,1.7,1.8
Marcus Comstedt
marcus_c at users.sourceforge.net
Sun Aug 10 13:50:03 CEST 2003
Update of /cvsroot/scummvm/scummvm/common
In directory sc8-pr-cvs1:/tmp/cvs-serv7711/common
Modified Files:
module.mk savefile.h
Added Files:
savefile.cpp
Log Message:
Harmonized SaveFile API with File API a bit.
--- NEW FILE: savefile.cpp ---
/* ScummVM - Scumm Interpreter
* Copyright (C) 2002-2003 The ScummVM project
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* $Header: /cvsroot/scummvm/scummvm/common/savefile.cpp,v 1.1 2003/08/10 20:49:13 marcus_c Exp $
*
*/
#include "common/savefile.h"
#include "common/util.h"
#include "common/engine.h" // For debug/warning/error
uint32 SaveFile::read(void *ptr, uint32 size)
{
return fread(ptr, 1, size);
}
byte SaveFile::readByte()
{
byte b;
if (fread(&b, 1, 1) != 1)
return 0;
return b;
}
uint16 SaveFile::readUint16LE() {
uint16 a = readByte();
uint16 b = readByte();
return a | (b << 8);
}
uint32 SaveFile::readUint32LE() {
uint32 a = readUint16LE();
uint32 b = readUint16LE();
return (b << 16) | a;
}
uint16 SaveFile::readUint16BE() {
uint16 b = readByte();
uint16 a = readByte();
return a | (b << 8);
}
uint32 SaveFile::readUint32BE() {
uint32 b = readUint16BE();
uint32 a = readUint16BE();
return (b << 16) | a;
}
uint32 SaveFile::write(const void *ptr, uint32 size)
{
return fwrite(ptr, 1, size);
}
void SaveFile::writeByte(byte value)
{
fwrite(&value, 1, 1);
}
void SaveFile::writeUint16LE(uint16 value) {
writeByte((byte)(value & 0xff));
writeByte((byte)(value >> 8));
}
void SaveFile::writeUint32LE(uint32 value) {
writeUint16LE((uint16)(value & 0xffff));
writeUint16LE((uint16)(value >> 16));
}
void SaveFile::writeUint16BE(uint16 value) {
writeByte((byte)(value >> 8));
writeByte((byte)(value & 0xff));
}
void SaveFile::writeUint32BE(uint32 value) {
writeUint16BE((uint16)(value >> 16));
writeUint16BE((uint16)(value & 0xffff));
}
SaveFile *SaveFileManager::open_savefile(const char *filename, const char *directory, bool saveOrLoad)
{
char buf[256];
join_paths(filename, directory, buf, sizeof(buf));
StdioSaveFile *sf = new StdioSaveFile(buf,
(saveOrLoad? "wb":"rb"));
if (!sf->is_open()) {
delete sf;
sf = NULL;
}
return sf;
}
void SaveFileManager::join_paths(const char *filename, const char *directory,
char *buf, int bufsize)
{
buf[bufsize-1] = '\0';
strncpy(buf, directory, bufsize-1);
#ifdef WIN32
// Fix for Win98 issue related with game directory pointing to root drive ex. "c:\"
if ((buf[0] != 0) && (buf[1] == ':') && (buf[2] == '\\') && (buf[3] == 0)) {
buf[2] = 0;
}
#endif
const int dirLen = strlen(buf);
if (dirLen > 0) {
#ifdef __MORPHOS__
if (buf[dirLen-1] != ':' && buf[dirLen-1] != '/')
#endif
#if !defined(__GP32__) && !defined(__PALM_OS__)
strncat(buf, "/", bufsize-1); // prevent double /
#endif
}
strncat(buf, filename, bufsize-1);
}
Index: module.mk
===================================================================
RCS file: /cvsroot/scummvm/scummvm/common/module.mk,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- module.mk 7 Mar 2003 16:21:28 -0000 1.2
+++ module.mk 10 Aug 2003 20:49:13 -0000 1.3
@@ -8,7 +8,8 @@
common/scaler.o \
common/str.o \
common/timer.o \
- common/util.o
+ common/util.o \
+ common/savefile.o
# Include common rules
include common.rules
Index: savefile.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/common/savefile.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- savefile.h 10 Aug 2003 14:24:30 -0000 1.7
+++ savefile.h 10 Aug 2003 20:49:13 -0000 1.8
@@ -23,14 +23,34 @@
#ifndef COMMON_SAVEFILE_H
#define COMMON_SAVEFILE_H
+#include "stdafx.h"
+#include "common/scummsys.h"
+
#include <stdio.h>
#include <string.h>
class SaveFile {
public:
virtual ~SaveFile() {}
+
+ /* Compatible with File API */
+ uint32 read(void *ptr, uint32 size);
+ byte readByte();
+ uint16 readUint16LE();
+ uint32 readUint32LE();
+ uint16 readUint16BE();
+ uint32 readUint32BE();
+ uint32 write(const void *ptr, uint32 size);
+ void writeByte(byte value);
+ void writeUint16LE(uint16 value);
+ void writeUint32LE(uint32 value);
+ void writeUint16BE(uint16 value);
+ void writeUint32BE(uint32 value);
+
+protected:
+ /* Only for internal use, use File compatible API above instead */
virtual int fread(void *buf, int size, int cnt) = 0;
- virtual int fwrite(void *buf, int size, int cnt) = 0;
+ virtual int fwrite(const void *buf, int size, int cnt) = 0;
};
class StdioSaveFile : public SaveFile {
@@ -45,10 +65,10 @@
bool is_open() { return fh != NULL; }
-
+protected:
int fread(void *buf, int size, int cnt)
{ return ::fread(buf, size, cnt, fh); }
- int fwrite(void *buf, int size, int cnt)
+ int fwrite(const void *buf, int size, int cnt)
{ return ::fwrite(buf, size, cnt, fh); }
};
@@ -57,19 +77,15 @@
public:
virtual ~SaveFileManager() {}
- virtual SaveFile *open_savefile(const char *filename, bool saveOrLoad) {
- StdioSaveFile *sf = new StdioSaveFile(filename,
- (saveOrLoad? "wb":"rb"));
- if (!sf->is_open()) {
- delete sf;
- sf = NULL;
- }
- return sf;
- }
+ virtual SaveFile *open_savefile(const char *filename, const char *directory, bool saveOrLoad);
- virtual void list_savefiles(const char * /* prefix */, bool *marks, int num) {
+ virtual void list_savefiles(const char * /* prefix */, const char *directory, bool *marks, int num) {
memset(marks, true, num * sizeof(bool));
}
+
+protected:
+ void join_paths(const char *filename, const char *directory,
+ char *buf, int bufsize);
};
More information about the Scummvm-git-logs
mailing list