[Scummvm-cvs-logs] CVS: scummvm/scumm/smush chunk.cpp,1.6,1.7 chunk.h,1.4,1.5 player.cpp,1.12,1.13 player.h,1.6,1.7

Pawe? Ko?odziejski aquadran at users.sourceforge.net
Sun Sep 15 12:29:02 CEST 2002


Update of /cvsroot/scummvm/scummvm/scumm/smush
In directory usw-pr-cvs1:/tmp/cvs-serv26315/scumm/smush

Modified Files:
	chunk.cpp chunk.h player.cpp player.h 
Log Message:
improved open function in File class

Index: chunk.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/smush/chunk.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- chunk.cpp	13 Sep 2002 18:04:17 -0000	1.6
+++ chunk.cpp	15 Sep 2002 19:28:34 -0000	1.7
@@ -34,33 +34,33 @@
 */
 class FilePtr {
 	char * _filename;
-	FILE * _ifs;
+	File _ifs;
 	int32 _refcount;
 	int32 _curPos;
 public:
-	FilePtr(const char * fname) : _refcount(1), _curPos(0) {
+	FilePtr(const char * fname, const char * directory) : _refcount(1), _curPos(0) {
 		debug(9, "FilePtr created for %s", fname);
 		_filename = strdup(fname);
-		_ifs  = fopen_nocase(fname, "rb");
-		if(_ifs == NULL) error("FilePtr unable to read file \"%s\"", fname);
+		_ifs.open(fname, directory);
+		if(_ifs.isOpen() == false) error("FilePtr unable to read file %s", fname);
 	}
 	~FilePtr() {
 		debug(9, "FilePtr destroyed for %s", _filename);
 		free(_filename);
-		fclose(_ifs);
+		_ifs.close();
 	}
 	int32 tell() {
 		return _curPos;
 	}
 	bool seek(int32 pos) {
 		if(pos != _curPos) {
-			fseek(_ifs, pos, SEEK_SET);
+			_ifs.seek(pos, SEEK_SET);
 			_curPos = pos;
 		}
 		return true;
 	}
 	bool read(void * ptr, int32 size) {
-		fread(ptr, size, 1, _ifs);
+		_ifs.read(ptr, size);
 		_curPos += size;
 		return true;
 	}
@@ -90,8 +90,8 @@
 	if(_data) _data->decRef();
 }
 
-FileChunk::FileChunk(const char * fname) {
-	_data = new FilePtr(fname);
+FileChunk::FileChunk(const char * fname, const char * directory) {
+	_data = new FilePtr(fname, directory);
 	_data->read(&_type, 4);
 	_type = TO_BE_32(_type);
 	_data->read(&_size, 4);

Index: chunk.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/smush/chunk.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- chunk.h	30 Aug 2002 07:24:45 -0000	1.4
+++ chunk.h	15 Sep 2002 19:28:34 -0000	1.5
@@ -76,7 +76,7 @@
 protected:
 	FileChunk();
 public:
-	FileChunk(const char * fname);
+	FileChunk(const char * fname, const char * directory);
 	virtual ~FileChunk();
 	type getType() const;
 	uint32 getSize() const;

Index: player.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/smush/player.cpp,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- player.cpp	13 Sep 2002 18:04:17 -0000	1.12
+++ player.cpp	15 Sep 2002 19:28:34 -0000	1.13
@@ -616,10 +616,10 @@
 }
 
 #define NEW_FILE	1
-static StringResource * getStrings(const char * file, bool is_encoded) {
+static StringResource * getStrings(const char * file, const char * directory, bool is_encoded) {
 	debug(7, "trying to read text ressources from %s", file);
 	File theFile;
-	theFile.open(file);
+	theFile.open(file, directory);
 	if (!theFile.isOpen())
 		return 0;
 	int32 length = theFile.size();
@@ -633,7 +633,7 @@
 		Chunk::type type = READ_BE_UINT32(filebuffer);
 		if(type != TYPE_ETRS) {
 			delete [] filebuffer;
-			return getStrings(file, false);
+			return getStrings(file, directory, false);
 		}
 		char * old = filebuffer;
 		filebuffer = new char[length - ETRS_HEADER_LENGTH];
@@ -649,102 +649,58 @@
 	return sr;
 }
 
-bool SmushPlayer::readString(const char * file, bool & ft) {
+bool SmushPlayer::readString(const char * file, const char * directory, bool & ft) {
 	const char * i = strrchr(file, '.');
 	if(i == NULL) error("invalid filename : %s", file);
 	char fname[260];
 	memcpy(fname, file, i - file);
 	strcpy(fname + (i - file), ".trs");
-	if((_strings = getStrings(fname, false)) != 0) {
+	if((_strings = getStrings(fname, directory, false)) != 0) {
 		ft = true;
 		return true;
 	}
-	i = strrchr(file, '\\');
-	if(i == NULL) i = strrchr(file, '/');
-	else {
-		char * j = strrchr(file, '/');
-		if(j > i) i = j;
-	}
-	if(i == NULL) error("invalid filename : %s", file);
 
-	memcpy(fname, file, i - file + 1);
-	strcpy(fname + (i - file + 1), "digtxt.trs");
-	if((_strings = getStrings(fname, true)) != 0) {
+	if((_strings = getStrings("digtxt.trs", directory, true)) != 0) {
 		ft = false;
 		return true;
 	}
 	return false;
 }
 
-static FontRenderer * loadFont(const char * file, bool original = false) {
+static FontRenderer * loadFont(const char * file, const char * directory, bool original = false) {
 #ifdef DEBUG
 	debug(5, "loading font from \"%s\"", file);
 #endif
 	FontRenderer * fr = new FontRenderer(original);
 	SmushPlayer p(fr, false, false);
-	p.play(file);
+	p.play(file, directory);
 	return fr;
 }
 
-bool SmushPlayer::play(const char * file) {
+bool SmushPlayer::play(const char * file, const char * directory) {
 #ifdef DEBUG
 	debug(5, "start of animation : %s", file);
 #endif	
-	char * i = strrchr(file, '\\');
-	if(i == NULL)
-	{
-		i = strrchr(file, '/');
-	} else {
-		char * j = strrchr(i, '/');
-		if(j != NULL)
-			i = j;
-	}
-	char directory[260];
-	if(i != NULL) {
-		strcpy(directory, file);
-		directory[i-file] = 0;
-		//! @todo remove this...
-		_fname = strdup(i);
-	} else {
-		directory[0] = 0;
-		_fname = strdup(file);
-	}
 	clean();
 	
 	if(_wait) {
 		bool isFullthrottle;
-		if(!readString(file, isFullthrottle))
+		if(!readString(file, directory, isFullthrottle))
 			warning("unable to read text information for \"%s\"", file);
 		if(_strings) {
 			if(isFullthrottle) {
-				if(strcmp(directory, "") == 0) {
-					strcpy(directory, "../data/");
-				} else {
-					char * i = strrchr(directory, '\\');
-					char * j = strrchr(directory, '/');
-					if(j > i) i = j;
-					if(i == NULL) {
-						strcpy(directory, "data/");
-					} else {
-						*i = 0;
-						strcat(directory, "/data/");
-					}
-				}
-				char file[260];
-				strcpy(file, directory); strcat(file, "scummfnt.nut");
-				_fr[0] = loadFont(file, true);
-				strcpy(file, directory); strcat(file, "titlfnt.nut");
-				_fr[2] = loadFont(file, true);
+				_fr[0] = loadFont("scummfnt.nut", directory, true);
+				_fr[2] = loadFont("titlfnt.nut", directory, true);
 			} else {
 				for(int32 i = 0; i < 4; i++) {
-					char file[260];
-					sprintf(file, "%s/font%d.nut",directory, i);
-					_fr[i] = loadFont(file, i != 0);
+					char file_font[20];
+					sprintf((char*)&file_font, "font%d.nut", i);
+					_fr[i] = loadFont(file_font, directory, i != 0);
 				}
 			}
 		}
 	}
-	FileChunk base = FileChunk(file);
+	FileChunk base = FileChunk(file, directory);
 
 	checkBlock(base, TYPE_ANIM); 
 

Index: player.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/smush/player.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- player.h	31 Aug 2002 13:29:10 -0000	1.6
+++ player.h	15 Sep 2002 19:28:34 -0000	1.7
@@ -73,12 +73,12 @@
 public:
 	SmushPlayer(Renderer *, bool wait = true, bool output_sound = true);
 	virtual ~SmushPlayer();
-	bool play(const char *);
+	bool play(const char *, const char * directory);
 	void updatePalette(void);
 	void show(const char *);
 	void hide(const char *);
 protected:
-	bool readString(const char * file, bool &);
+	bool readString(const char * file, const char * directory, bool &);
 	void clean();
 	void checkBlock(const Chunk &, Chunk::type, uint32 = 0);
 	void handleAnimHeader(Chunk &);





More information about the Scummvm-git-logs mailing list