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

waltervn at users.sourceforge.net waltervn at users.sourceforge.net
Thu Oct 15 13:57:37 CEST 2009


Revision: 45113
          http://scummvm.svn.sourceforge.net/scummvm/?rev=45113&view=rev
Author:   waltervn
Date:     2009-10-15 11:57:36 +0000 (Thu, 15 Oct 2009)

Log Message:
-----------
SCI: Add support for reg_t based segments to Message()

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/kstring.cpp

Modified: scummvm/trunk/engines/sci/engine/kstring.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kstring.cpp	2009-10-15 11:47:05 UTC (rev 45112)
+++ scummvm/trunk/engines/sci/engine/kstring.cpp	2009-10-15 11:57:36 UTC (rev 45113)
@@ -670,20 +670,35 @@
 
 		s->_msgState->lastQuery(module, msg);
 
-		byte *buffer = s->_segMan->derefBulkPtr(argv[1], 10);
+		bool ok = false;
 
-		if (buffer) {
-			assert(s->_segMan->dereference(argv[1]).isRaw);
+		if (s->_segMan->dereference(argv[1]).isRaw) {
+			byte *buffer = s->_segMan->derefBulkPtr(argv[1], 10);
 
-			WRITE_LE_UINT16(buffer, module);
-			WRITE_LE_UINT16(buffer + 2, msg.noun);
-			WRITE_LE_UINT16(buffer + 4, msg.verb);
-			WRITE_LE_UINT16(buffer + 6, msg.cond);
-			WRITE_LE_UINT16(buffer + 8, msg.seq);
+			if (buffer) {
+				ok = true;
+				WRITE_LE_UINT16(buffer, module);
+				WRITE_LE_UINT16(buffer + 2, msg.noun);
+				WRITE_LE_UINT16(buffer + 4, msg.verb);
+				WRITE_LE_UINT16(buffer + 6, msg.cond);
+				WRITE_LE_UINT16(buffer + 8, msg.seq);
+			}
 		} else {
-			warning("Message: buffer %04x:%04x invalid or too small to hold the tuple", PRINT_REG(argv[1]));
+			reg_t *buffer = s->_segMan->derefRegPtr(argv[1], 5);
+
+			if (buffer) {
+				ok = true;
+				buffer[0] = make_reg(0, module);
+				buffer[1] = make_reg(0, msg.noun);
+				buffer[2] = make_reg(0, msg.verb);
+				buffer[3] = make_reg(0, msg.cond);
+				buffer[4] = make_reg(0, msg.seq);
+			}
 		}
 
+		if (!ok)
+			warning("Message: buffer %04x:%04x invalid or too small to hold the tuple", PRINT_REG(argv[1]));
+
 		return NULL_REG;
 	}
 	default:


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