[Scummvm-cvs-logs] SF.net SVN: scummvm:[44081] scummvm/trunk/engines/sci/engine

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Mon Sep 14 14:59:43 CEST 2009


Revision: 44081
          http://scummvm.svn.sourceforge.net/scummvm/?rev=44081&view=rev
Author:   fingolfin
Date:     2009-09-14 12:59:42 +0000 (Mon, 14 Sep 2009)

Log Message:
-----------
SCI: Merge kernelDerefCharPtr and kernelDerefString and change it from a macro to a function

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/kernel.cpp
    scummvm/trunk/engines/sci/engine/kernel.h
    scummvm/trunk/engines/sci/engine/kfile.cpp
    scummvm/trunk/engines/sci/engine/kgraphics.cpp
    scummvm/trunk/engines/sci/engine/kstring.cpp

Modified: scummvm/trunk/engines/sci/engine/kernel.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kernel.cpp	2009-09-14 12:51:03 UTC (rev 44080)
+++ scummvm/trunk/engines/sci/engine/kernel.cpp	2009-09-14 12:59:42 UTC (rev 44081)
@@ -742,13 +742,17 @@
 }
 
 byte *kernelDerefBulkPtr(SegManager *segMan, reg_t pointer, int entries) {
-	return (byte*)_kernel_dereference_pointer(segMan, pointer, entries, 1);
+	return (byte *)_kernel_dereference_pointer(segMan, pointer, entries, 1);
 }
 
 reg_t *kernelDerefRegPtr(SegManager *segMan, reg_t pointer, int entries) {
-	return (reg_t*)_kernel_dereference_pointer(segMan, pointer, entries, sizeof(reg_t));
+	return (reg_t *)_kernel_dereference_pointer(segMan, pointer, entries, sizeof(reg_t));
 }
 
+char *kernelDerefString(SegManager *segMan, reg_t pointer, int entries) {
+	return (char *)_kernel_dereference_pointer(segMan, pointer, entries, 1);
+}
+
 void Kernel::setDefaultKernelNames() {
 	_kernelNames = Common::StringList(sci_default_knames, SCI_KNAMES_DEFAULT_ENTRIES_NR);
 

Modified: scummvm/trunk/engines/sci/engine/kernel.h
===================================================================
--- scummvm/trunk/engines/sci/engine/kernel.h	2009-09-14 12:51:03 UTC (rev 44080)
+++ scummvm/trunk/engines/sci/engine/kernel.h	2009-09-14 12:59:42 UTC (rev 44081)
@@ -238,8 +238,7 @@
  */
 reg_t *kernelDerefRegPtr(SegManager *segMan, reg_t pointer, int entries);
 byte *kernelDerefBulkPtr(SegManager *segMan, reg_t pointer, int entries);
-#define kernelDerefCharPtr(state, pointer, entries) ((char*)kernelDerefBulkPtr(state, pointer, entries))
-#define kernelDerefString(state, pointer) ((char*)kernelDerefBulkPtr(state, pointer, 0))
+char *kernelDerefString(SegManager *segMan, reg_t pointer, int entries = 0);
 
 /******************** Priority macros/functions ********************/
 /**

Modified: scummvm/trunk/engines/sci/engine/kfile.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kfile.cpp	2009-09-14 12:51:03 UTC (rev 44080)
+++ scummvm/trunk/engines/sci/engine/kfile.cpp	2009-09-14 12:59:42 UTC (rev 44081)
@@ -811,7 +811,7 @@
 	case K_FILEIO_WRITE_STRING : {
 		int handle = argv[1].toUint16();
 		int size = argv[3].toUint16();
-		char *buf = kernelDerefCharPtr(s->segMan, argv[2], size);
+		char *buf = kernelDerefString(s->segMan, argv[2], size);
 		debug(3, "K_FILEIO_WRITE_STRING(%d,%d)", handle, size);
 
 		// FIXME: What is the difference between K_FILEIO_WRITE_STRING and

Modified: scummvm/trunk/engines/sci/engine/kgraphics.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kgraphics.cpp	2009-09-14 12:51:03 UTC (rev 44080)
+++ scummvm/trunk/engines/sci/engine/kgraphics.cpp	2009-09-14 12:59:42 UTC (rev 44081)
@@ -602,14 +602,14 @@
 
 reg_t kTextSize(EngineState *s, int, int argc, reg_t *argv) {
 	int width, height;
-	char *text = argv[1].segment ? (char *) kernelDerefBulkPtr(s->segMan, argv[1], 0) : NULL;
+	char *text = argv[1].segment ? kernelDerefString(s->segMan, argv[1]) : NULL;
 	const char *sep = NULL; 
 	reg_t *dest = kernelDerefRegPtr(s->segMan, argv[0], 4);
 	int maxwidth = (argc > 3) ? argv[3].toUint16() : 0;
 	int font_nr = argv[2].toUint16();
 
 	if ((argc > 4) && (argv[4].segment))
-		sep = (const char *)kernelDerefBulkPtr(s->segMan, argv[4], 0);
+		sep = kernelDerefString(s->segMan, argv[4]);
 
 	if (maxwidth < 0)
 		maxwidth = 0;
@@ -3135,7 +3135,7 @@
 
 	if (textp.segment) {
 		argpt = 1;
-		text = (char *)kernelDerefBulkPtr(s->segMan, textp, 0);
+		text = kernelDerefString(s->segMan, textp);
 	} else {
 		argpt = 2;
 		text = kernel_lookup_text(s, textp, index);

Modified: scummvm/trunk/engines/sci/engine/kstring.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kstring.cpp	2009-09-14 12:51:03 UTC (rev 44080)
+++ scummvm/trunk/engines/sci/engine/kstring.cpp	2009-09-14 12:59:42 UTC (rev 44081)
@@ -44,7 +44,7 @@
 	Resource *textres;
 
 	if (address.segment)
-		return (char *)kernelDerefBulkPtr(s->segMan, address, 0);
+		return kernelDerefString(s->segMan, address);
 	else {
 		int textlen;
 		int _index = index;
@@ -87,7 +87,7 @@
 	if (!heap_said_block.segment)
 		return NULL_REG;
 
-	said_block = (byte *) kernelDerefBulkPtr(s->segMan, heap_said_block, 0);
+	said_block = (byte *)kernelDerefBulkPtr(s->segMan, heap_said_block, 0);
 
 	if (!said_block) {
 		warning("Said on non-string, pointer %04x:%04x", PRINT_REG(heap_said_block));
@@ -287,8 +287,8 @@
 
 
 reg_t kStrCpy(EngineState *s, int, int argc, reg_t *argv) {
-	char *dest = (char *) kernelDerefBulkPtr(s->segMan, argv[0], 0);
-	char *src = (char *) kernelDerefBulkPtr(s->segMan, argv[1], 0);
+	char *dest = kernelDerefString(s->segMan, argv[0]);
+	char *src = kernelDerefString(s->segMan, argv[1]);
 
 	if (!dest) {
 		warning("Attempt to strcpy TO invalid pointer %04x:%04x",
@@ -352,7 +352,7 @@
 
 
 reg_t kStrAt(EngineState *s, int, int argc, reg_t *argv) {
-	byte *dest = (byte *)kernelDerefBulkPtr(s->segMan, argv[0], 0);
+	char *dest = kernelDerefString(s->segMan, argv[0]);
 	reg_t *dest2;
 
 	if (!dest) {
@@ -380,7 +380,7 @@
 		int odd = !(argv[1].toUint16() & 1);
 #endif
 		dest2 = ((reg_t *) dest) + (argv[1].toUint16() / 2);
-		dest = ((byte *)(&dest2->offset)) + odd;
+		dest = ((char *)(&dest2->offset)) + odd;
 	} else
 		dest += argv[1].toUint16();
 
@@ -420,7 +420,7 @@
 reg_t kFormat(EngineState *s, int, int argc, reg_t *argv) {
 	int *arguments;
 	reg_t dest = argv[0];
-	char *target = (char *) kernelDerefBulkPtr(s->segMan, dest, 0);
+	char *target = kernelDerefString(s->segMan, dest);
 	reg_t position = argv[1]; /* source */
 	int index = argv[2].toUint16();
 	char *source;
@@ -740,7 +740,7 @@
 
 		if (!bufferReg.isNull()) {
 			int len = str.size() + 1;
-			buffer = kernelDerefCharPtr(s->segMan, bufferReg, len);
+			buffer = kernelDerefString(s->segMan, bufferReg, len);
 
 			if (buffer) {
 				strcpy(buffer, str.c_str());
@@ -748,7 +748,7 @@
 				warning("Message: buffer %04x:%04x invalid or too small to hold the following text of %i bytes: '%s'", PRINT_REG(bufferReg), len, str.c_str());
 
 				// Set buffer to empty string if possible
-				buffer = kernelDerefCharPtr(s->segMan, bufferReg, 1);
+				buffer = kernelDerefString(s->segMan, bufferReg, 1);
 				if (buffer)
 					*buffer = 0;
 			}
@@ -821,7 +821,7 @@
 	Common::String str = s->strSplit(format, sep);
 
 	// Make sure target buffer is large enough
-	char *buf = kernelDerefCharPtr(s->segMan, argv[0], str.size() + 1);
+	char *buf = kernelDerefString(s->segMan, argv[0], str.size() + 1);
 
 	if (buf) {
 		strcpy(buf, str.c_str());


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