[Scummvm-cvs-logs] SF.net SVN: scummvm: [26087] scummvm/trunk

anotherguest at users.sourceforge.net anotherguest at users.sourceforge.net
Sun Mar 11 15:28:04 CET 2007


Revision: 26087
          http://scummvm.svn.sourceforge.net/scummvm/?rev=26087&view=rev
Author:   anotherguest
Date:     2007-03-11 07:28:03 -0700 (Sun, 11 Mar 2007)

Log Message:
-----------
Added shared filed support using native file APIs.

Modified Paths:
--------------
    scummvm/trunk/backends/platform/symbian/src/SymbianOS.cpp
    scummvm/trunk/common/file.cpp

Modified: scummvm/trunk/backends/platform/symbian/src/SymbianOS.cpp
===================================================================
--- scummvm/trunk/backends/platform/symbian/src/SymbianOS.cpp	2007-03-11 14:16:43 UTC (rev 26086)
+++ scummvm/trunk/backends/platform/symbian/src/SymbianOS.cpp	2007-03-11 14:28:03 UTC (rev 26087)
@@ -196,7 +196,7 @@
 	_channels = obtained.channels;
 
 	// Need to create mixbuffer for stereo mix to downmix
-	if(_channels != 2) {
+	if (_channels != 2) {
 		_stereo_mix_buffer = new byte [obtained.size*2];//*2 for stereo values
 	}
 
@@ -261,7 +261,7 @@
 				return true;			
 
 			case GUI::ACTION_DOWN:
-				if(ev.type == SDL_KEYDOWN) {
+				if (ev.type == SDL_KEYDOWN) {
 					_km.y_vel = 1;
 					_km.y_down_count = 1;
 				} else {
@@ -274,7 +274,7 @@
 				return true;	
 
 			case GUI::ACTION_LEFT:
-				if(ev.type == SDL_KEYDOWN) {
+				if (ev.type == SDL_KEYDOWN) {
 					_km.x_vel = -1;
 					_km.x_down_count = 1;
 				} else {
@@ -287,7 +287,7 @@
 				return true;
 
 			case GUI::ACTION_RIGHT:
-				if(ev.type == SDL_KEYDOWN) {
+				if (ev.type == SDL_KEYDOWN) {
 					_km.x_vel = 1;
 					_km.x_down_count = 1;
 				} else {
@@ -312,7 +312,7 @@
 				return true;
 
 			case GUI::ACTION_ZONE:
-				if(ev.type == SDL_KEYDOWN) {
+				if (ev.type == SDL_KEYDOWN) {
 					int i;				
 					
 					for (i=0; i < TOTAL_ZONES; i++)
@@ -385,7 +385,140 @@
 	}
 }
 
+// Symbian libc file functionality in order to provide shared file handles
+struct TSymbianFileEntry {
+	RFile iFileHandle;
+};
 
+#define FILE void
+
+FILE* 	symbian_fopen(const char* name, const char* mode) {
+	TSymbianFileEntry* fileEntry = new TSymbianFileEntry;
+	
+	if (fileEntry != NULL) {
+		TInt modeLen = strlen(mode);
+
+		TPtrC8 namePtr((unsigned char*) name, strlen(name));
+		TFileName tempFileName;		
+		tempFileName.Copy(namePtr);
+		
+		TInt fileMode = EFileRead;
+		
+		if (mode[0] == 'a')
+			fileMode = EFileWrite;
+		
+		if (!((modeLen > 1 && mode[1] == 'b') || (modeLen > 2 && mode[2] == 'b'))) {
+			fileMode |= EFileStreamText;
+		}
+		
+		if (modeLen > 1) {
+			if (mode[1] == '+')
+				fileMode = fileMode| EFileWrite;	
+		}
+		
+		if (modeLen > 2) {
+			if (mode[1] == '+')
+				fileMode = fileMode| EFileWrite;	
+		}
+		
+		switch(mode[0]) {
+		case 'a':
+			if (fileEntry->iFileHandle.Open(CEikonEnv::Static()->FsSession(), tempFileName, fileMode) != KErrNone)
+			{
+				if (fileEntry->iFileHandle.Create(CEikonEnv::Static()->FsSession(), tempFileName, fileMode) != KErrNone) {
+					delete fileEntry;
+					fileEntry = NULL;
+				}
+			}
+			break;
+		case 'r': 
+			if (fileEntry->iFileHandle.Open(CEikonEnv::Static()->FsSession(), tempFileName, fileMode) != KErrNone) {
+				delete fileEntry;
+				fileEntry = NULL;
+			}
+			break;
+			
+		case 'w':
+			if (fileEntry->iFileHandle.Replace(CEikonEnv::Static()->FsSession(), tempFileName, fileMode) != KErrNone) {
+				delete fileEntry;
+				fileEntry = NULL;
+			}
+			break;
+		}
+	}
+	
+	return (FILE*) fileEntry;
+}
+
+void symbian_fclose(FILE* handle) {
+	((TSymbianFileEntry*)(handle))->iFileHandle.Close();
+
+	delete (TSymbianFileEntry*)(handle);
+}
+
+size_t symbian_fread(const void* ptr, size_t size, size_t numItems, FILE* handle) {
+	TPtr8 pointer( (unsigned char*) ptr, size*numItems);
+
+	((TSymbianFileEntry*)(handle))->iFileHandle.Read(pointer);
+	
+	return pointer.Length()/size;
+}
+
+size_t symbian_fwrite(const void* ptr, size_t size, size_t numItems, FILE* handle) {
+	TPtrC8 pointer( (unsigned char*) ptr, size*numItems);
+
+	if (((TSymbianFileEntry*)(handle))->iFileHandle.Write(pointer) == KErrNone) {
+		return numItems;
+	}
+
+	return 0;
+}
+
+bool symbian_feof(FILE* handle) {
+	TInt pos = 0;
+	if (((TSymbianFileEntry*)(handle))->iFileHandle.Seek(ESeekCurrent, pos) == KErrNone) {
+
+		TInt size = 0;
+		if (((TSymbianFileEntry*)(handle))->iFileHandle.Size(size) == KErrNone) {
+			if (pos == size)
+				return true;
+			return false;
+		}
+	}
+	return true;
+}
+
+long int symbian_ftell(FILE* handle) {
+	TInt pos = 0;
+
+	((TSymbianFileEntry*)(handle))->iFileHandle.Seek(ESeekCurrent, pos);
+
+	return pos;
+}
+
+int symbian_fseek(FILE* handle, long int offset, int whence) {
+	TSeek seekMode = ESeekStart;
+	TInt pos = offset;
+
+	switch(whence) {
+	case SEEK_SET:
+		seekMode = ESeekStart;
+		break;
+	case SEEK_CUR:
+		seekMode = ESeekCurrent;
+		break;
+	case SEEK_END:
+		seekMode = ESeekEnd;
+		break;
+		
+	}
+
+	return ((TSymbianFileEntry*)(handle))->iFileHandle.Seek(seekMode, pos);
+}
+
+void symbian_clearerr(FILE* /*handle*/) {
+}
+
 /** Vibration support */
 #ifdef  USE_VIBRA_SE_PXXX
 void OSystem_SDL_Symbian::initializeVibration() {
@@ -402,5 +535,6 @@
 void OSystem_SDL_Symbian::vibrationOff() {
 	_vibrationApi->VibrationOff();
 }
+
 #endif //  USE_SE_PXX_VIBRA
 

Modified: scummvm/trunk/common/file.cpp
===================================================================
--- scummvm/trunk/common/file.cpp	2007-03-11 14:16:43 UTC (rev 26086)
+++ scummvm/trunk/common/file.cpp	2007-03-11 14:28:03 UTC (rev 26087)
@@ -112,7 +112,32 @@
 
 #endif
 
+#ifdef __SYMBIAN32__
+	#undef feof
+	#undef clearerr
+	
+	#define FILE void
+	
+	FILE* 	symbian_fopen(const char* name, const char* mode);
+	void 	symbian_fclose(FILE* handle);
+	size_t 	symbian_fread(const void* ptr, size_t size, size_t numItems, FILE* handle);
+	size_t 	symbian_fwrite(const void* ptr, size_t size, size_t numItems, FILE* handle);
+	bool 	symbian_feof(FILE* handle);
+	long int symbian_ftell(FILE* handle);
+	int 	symbian_fseek(FILE* handle, long int offset, int whence);
+	void 	symbian_clearerr(FILE* handle);
 
+	// Only functions used in the ScummVM source have been defined here!
+	#define fopen(name, mode) 					symbian_fopen(name, mode)
+	#define fclose(handle) 						symbian_fclose(handle)
+	#define fread(ptr, size, items, file)		symbian_fread(ptr, size, items, file)
+	#define fwrite(ptr, size, items, file)		symbian_fwrite(ptr, size, items, file)
+	#define feof(handle)						symbian_feof(handle)
+	#define ftell(handle)						symbian_ftell(handle)
+	#define fseek(handle, offset, whence)		symbian_fseek(handle, offset, whence)
+	#define clearerr(handle)					symbian_clearerr(handle)
+#endif
+
 namespace Common {
 
 typedef HashMap<String, int, CaseSensitiveString_Hash, CaseSensitiveString_EqualTo> StringIntMap;


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