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

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Tue Sep 15 00:34:53 CEST 2009


Revision: 44093
          http://scummvm.svn.sourceforge.net/scummvm/?rev=44093&view=rev
Author:   fingolfin
Date:     2009-09-14 22:34:53 +0000 (Mon, 14 Sep 2009)

Log Message:
-----------
SCI: Misc cleanup

Modified Paths:
--------------
    scummvm/trunk/engines/sci/console.cpp
    scummvm/trunk/engines/sci/engine/kmisc.cpp
    scummvm/trunk/engines/sci/engine/kstring.cpp
    scummvm/trunk/engines/sci/engine/memobj.h
    scummvm/trunk/engines/sci/engine/savegame.cpp
    scummvm/trunk/engines/sci/engine/seg_manager.cpp
    scummvm/trunk/engines/sci/engine/seg_manager.h

Modified: scummvm/trunk/engines/sci/console.cpp
===================================================================
--- scummvm/trunk/engines/sci/console.cpp	2009-09-14 22:24:30 UTC (rev 44092)
+++ scummvm/trunk/engines/sci/console.cpp	2009-09-14 22:34:53 UTC (rev 44093)
@@ -1488,7 +1488,7 @@
 
 	case MEM_OBJ_DYNMEM: {
 		DebugPrintf("dynmem (%s): %d bytes\n",
-		          (*(DynMem *)mobj)._description ? (*(DynMem *)mobj)._description : "no description", (*(DynMem *)mobj)._size);
+		          (*(DynMem *)mobj)._description.c_str(), (*(DynMem *)mobj)._size);
 
 		Common::hexdump((*(DynMem *)mobj)._buf, (*(DynMem *)mobj)._size, 16, 0);
 	}

Modified: scummvm/trunk/engines/sci/engine/kmisc.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kmisc.cpp	2009-09-14 22:24:30 UTC (rev 44092)
+++ scummvm/trunk/engines/sci/engine/kmisc.cpp	2009-09-14 22:34:53 UTC (rev 44093)
@@ -175,7 +175,6 @@
 		if (!s->segMan->allocDynmem(argv[1].toUint16(), "kMemory() critical", &s->r_acc)) {
 			error("Critical heap allocation failed");
 		}
-		return s->r_acc;
 		break;
 	case K_MEMORY_ALLOCATE_NONCRITICAL :
 		s->segMan->allocDynmem(argv[1].toUint16(), "kMemory() non-critical", &s->r_acc);
@@ -234,7 +233,6 @@
 				WRITE_LE_UINT16(ref, argv[2].offset); // ?
 			}
 		}
-		return s->r_acc;
 		break;
 	}
 	}

Modified: scummvm/trunk/engines/sci/engine/kstring.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kstring.cpp	2009-09-14 22:24:30 UTC (rev 44092)
+++ scummvm/trunk/engines/sci/engine/kstring.cpp	2009-09-14 22:34:53 UTC (rev 44093)
@@ -367,12 +367,10 @@
 	if (s->_gameName.equalsIgnoreCase("lsl5") && s->currentRoomNumber() == 155)
 		lsl5PasswordWorkaround = true;
 
-	const char* dst = (const char *)dest; // used just for code beautification purposes
-
 	if ((argc == 2) &&
 	        /* Our pathfinder already works around the issue we're trying to fix */
 	        (strcmp(s->segMan->getDescription(argv[0]), AVOIDPATH_DYNMEM_STRING) != 0) &&
-	        ((strlen(dst) < 2) || (!lsl5PasswordWorkaround && !is_print_str(dst)))) {
+	        ((strlen(dest) < 2) || (!lsl5PasswordWorkaround && !is_print_str(dest)))) {
 		// SQ4 array handling detected
 #ifndef SCUMM_BIG_ENDIAN
 		int odd = argv[1].toUint16() & 1;

Modified: scummvm/trunk/engines/sci/engine/memobj.h
===================================================================
--- scummvm/trunk/engines/sci/engine/memobj.h	2009-09-14 22:24:30 UTC (rev 44092)
+++ scummvm/trunk/engines/sci/engine/memobj.h	2009-09-14 22:34:53 UTC (rev 44093)
@@ -557,14 +557,12 @@
 // Free-style memory
 struct DynMem : public MemObject {
 	int _size;
-	char *_description;
+	Common::String _description;
 	byte *_buf;
 
 public:
-	DynMem() : _size(0), _description(0), _buf(0) {}
+	DynMem() : _size(0), _buf(0) {}
 	~DynMem() {
-		free(_description);
-		_description = NULL;
 		free(_buf);
 		_buf = NULL;
 	}

Modified: scummvm/trunk/engines/sci/engine/savegame.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/savegame.cpp	2009-09-14 22:24:30 UTC (rev 44092)
+++ scummvm/trunk/engines/sci/engine/savegame.cpp	2009-09-14 22:34:53 UTC (rev 44093)
@@ -420,7 +420,7 @@
 
 void DynMem::saveLoadWithSerializer(Common::Serializer &s) {
 	s.syncAsSint32LE(_size);
-	syncCStr(s, &_description);
+	s.syncString(_description);
 	if (!_buf && _size) {
 		_buf = (byte *)calloc(_size, 1);
 	}

Modified: scummvm/trunk/engines/sci/engine/seg_manager.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/seg_manager.cpp	2009-09-14 22:24:30 UTC (rev 44092)
+++ scummvm/trunk/engines/sci/engine/seg_manager.cpp	2009-09-14 22:34:53 UTC (rev 44093)
@@ -302,7 +302,7 @@
 	if (nameReg.isNull())
 		return "<no name>";
 
-	const char *name = (const char*)dereference(obj->_variables[SCRIPT_NAME_SELECTOR], NULL);
+	const char *name = derefString(obj->_variables[SCRIPT_NAME_SELECTOR]);
 	if (!name)
 		return "<invalid name>";
 
@@ -930,18 +930,13 @@
 	return mobj->dereference(pointer, size);
 }
 
-static void *_kernel_dereference_pointer(SegManager *segMan, reg_t pointer, int entries, int align) {
+static void *_kernel_dereference_pointer(SegManager *segMan, reg_t pointer, int entries) {
 	int maxsize;
 	void *retval = segMan->dereference(pointer, &maxsize);
 
 	if (!retval)
 		return NULL;
 
-	if (pointer.offset & (align - 1)) {
-		warning("Unaligned pointer read: %04x:%04x expected with %d alignment", PRINT_REG(pointer), align);
-		return NULL;
-	}
-
 	if (entries > maxsize) {
 		warning("Trying to dereference pointer %04x:%04x beyond end of segment", PRINT_REG(pointer));
 		return NULL;
@@ -951,15 +946,21 @@
 }
 
 byte *SegManager::derefBulkPtr(reg_t pointer, int entries) {
-	return (byte *)_kernel_dereference_pointer(this, pointer, entries, 1);
+	return (byte *)_kernel_dereference_pointer(this, pointer, entries);
 }
 
 reg_t *SegManager::derefRegPtr(reg_t pointer, int entries) {
-	return (reg_t *)_kernel_dereference_pointer(this, pointer, entries, sizeof(reg_t));
+	const int align = sizeof(reg_t);
+	if (pointer.offset & (align - 1)) {
+		warning("Unaligned pointer read: %04x:%04x expected with %d alignment", PRINT_REG(pointer), align);
+		return NULL;
+	}
+
+	return (reg_t *)_kernel_dereference_pointer(this, pointer, entries);
 }
 
 char *SegManager::derefString(reg_t pointer, int entries) {
-	return (char *)_kernel_dereference_pointer(this, pointer, entries, 1);
+	return (char *)_kernel_dereference_pointer(this, pointer, entries);
 }
 
 
@@ -977,7 +978,7 @@
 	else
 		d._buf = (byte *)malloc(size);
 
-	d._description = strdup(descr);
+	d._description = descr;
 
 	return (byte *)(d._buf);
 }
@@ -990,7 +991,7 @@
 
 	switch (mobj->getType()) {
 	case MEM_OBJ_DYNMEM:
-		return (*(DynMem *)mobj)._description;
+		return (*(DynMem *)mobj)._description.c_str();
 	default:
 		return "";
 	}

Modified: scummvm/trunk/engines/sci/engine/seg_manager.h
===================================================================
--- scummvm/trunk/engines/sci/engine/seg_manager.h	2009-09-14 22:24:30 UTC (rev 44092)
+++ scummvm/trunk/engines/sci/engine/seg_manager.h	2009-09-14 22:34:53 UTC (rev 44093)
@@ -312,16 +312,6 @@
 	const char *getDescription(reg_t addr);
 
 
-	// 10. Reserved segments
-
-	// Reserves a special-purpose segment
-	// Parameters: (char *) name: A string name identifying the segment (the string is cloned and retained)
-	// Returns   : A fresh segment ID for the segment in question
-	// Reserved segments are never used by the segment manager.  They can be used to tag special-purpose addresses.
-	// Segment 0 is implicitly reserved for numbers.
-	//SegmentId sm_allocate_reserved_segment(char *name);
-
-
 	// Generic Operations on Segments and Addresses
 
 	/**


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