[Scummvm-cvs-logs] CVS: tools descumm6.cpp,1.33,1.34

Max Horn fingolfin at users.sourceforge.net
Sun Dec 22 18:18:02 CET 2002


Update of /cvsroot/scummvm/tools
In directory sc8-pr-cvs1:/tmp/cvs-serv29000

Modified Files:
	descumm6.cpp 
Log Message:
more V8 work

Index: descumm6.cpp
===================================================================
RCS file: /cvsroot/scummvm/tools/descumm6.cpp,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -d -r1.33 -r1.34
--- descumm6.cpp	23 Dec 2002 01:03:35 -0000	1.33
+++ descumm6.cpp	23 Dec 2002 02:17:25 -0000	1.34
@@ -22,10 +22,7 @@
 
 #include <string.h>
 #include <stdio.h>
-
-//#ifdef UNIX
 #include <ctype.h>
-//#endif
 
 #ifdef WIN32
 #include <io.h>
@@ -432,9 +429,181 @@
 	"VAR_CUSTOMSCALETABLE",
 };
 
+const char *var_names8[] = {
+	/* 0 */
+	NULL,
+	"room_width?",
+	"room_height?",
+	"cursor_screen_x",
+	/* 4 */
+	"cursor_screen_y",
+	"cursor_x",
+	"cursor_y",
+	"cursor_state?",
+	/* 8 */
+	"userface_state?",
+	"camera_x",
+	"camera_y",
+	"camera_dest_x",
+	/* 12 */
+	"camera_dest_y",
+	NULL,
+	NULL,
+	NULL,
+	/* 16 */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	/* 20 */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	/* 24 */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	/* 28 */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	/* 32 */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	/* XXX */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	/* XXX */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	/* XXX */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	/* 48 */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	/* XXX */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	/* XXX */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	/* XXX */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	/* 64 */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	/* XXX */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	/* XXX */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	/* XXX */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	/* 80 */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	/* XXX */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	/* XXX */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	/* XXX */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	/* 96 */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	/* XXX */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	/* XXX */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	/* XXX */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	/* 112 */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	/* XXX */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	/* XXX */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	/* XXX */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	/* 128 */
+	NULL,
+	NULL,
+	"sputm_debug",
+	NULL,
+};
+
 const char *getVarName(uint var)
 {
-	if (scriptVersion == 7) {
+	if (scriptVersion == 8) {
+		if (var >= sizeof(var_names8) / sizeof(var_names8[0]))
+			return NULL;
+		return var_names8[var];
+	} else if (scriptVersion == 7) {
 		if (var >= sizeof(var_names7) / sizeof(var_names7[0]))
 			return NULL;
 		return var_names7[var];
@@ -471,7 +640,7 @@
 	return (byte)(*cur_pos++);
 }
 
-int get_word()
+uint get_word()
 {
 	int i;
 
@@ -485,6 +654,18 @@
 	return i;
 }
 
+int get_signed_word()
+{
+	uint i = get_word();
+
+	if (scriptVersion == 8) {
+		return (int32)i;
+	} else {
+		return (int16)i;
+	}
+}
+
+
 
 byte *skipVerbHeader(byte *p)
 {
@@ -573,7 +754,6 @@
 	return se;
 }
 
-
 char *se_astext(StackEnt * se, char *where, bool wantparens = true)
 {
 	int i;
@@ -585,18 +765,34 @@
 		where += sprintf(where, "%ld", se->data);
 		break;
 	case seVar:
-		if (!(se->data & 0xF000)) {
-			var = se->data & 0xFFF;
-			if ((s = getVarName(var)) != NULL)
-				where = strecpy(where, s);
-			else
-				where += sprintf(where, "var[%ld]", se->data & 0xFFF);
-		} else if (se->data & 0x8000) {
-			where += sprintf(where, "bitvar[%ld]", se->data & 0x7FFF);
-		} else if (se->data & 0x4000) {
-			where += sprintf(where, "localvar[%ld]", se->data & 0xFFF);
+		if (scriptVersion == 8) {
+			if (!(se->data & 0xF0000000)) {
+				var = se->data & 0xFFFFFFF;
+				if ((s = getVarName(var)) != NULL)
+					where = strecpy(where, s);
+				else
+					where += sprintf(where, "var[%ld]", se->data & 0xFFFFFFF);
+			} else if (se->data & 0x80000000) {
+				where += sprintf(where, "bitvar[%ld]", se->data & 0x7FFFFFFF);
+			} else if (se->data & 0x40000000) {
+				where += sprintf(where, "localvar[%ld]", se->data & 0xFFFFFFF);
+			} else {
+				where += sprintf(where, "??var??[%ld]", se->data & 0xFFFFFFFF);
+			}
 		} else {
-			where += sprintf(where, "??var??[%ld]", se->data & 0xFFFF);
+			if (!(se->data & 0xF000)) {
+				var = se->data & 0xFFF;
+				if ((s = getVarName(var)) != NULL)
+					where = strecpy(where, s);
+				else
+					where += sprintf(where, "var[%ld]", se->data & 0xFFF);
+			} else if (se->data & 0x8000) {
+				where += sprintf(where, "bitvar[%ld]", se->data & 0x7FFF);
+			} else if (se->data & 0x4000) {
+				where += sprintf(where, "localvar[%ld]", se->data & 0xFFF);
+			} else {
+				where += sprintf(where, "??var??[%ld]", se->data & 0xFFFF);
+			}
 		}
 		break;
 	case seArray:
@@ -758,6 +954,16 @@
 			case 2:
 				e += sprintf(e, ":keeptext:");
 				break;
+			case 4:	// V8 - TODO
+				{
+				StackEnt foo;
+				foo.type = seVar;
+				foo.data = get_word();
+				e += sprintf(e, ":");
+				e = se_astext(&foo, e);
+				e += sprintf(e, ":");
+				}
+				break;
 			case 9:
 				e += sprintf(e, ":startanim=%d:", get_word());
 				break;
@@ -798,7 +1004,7 @@
 	int num, i;
 
 	if (senum->type != seInt) {
-		printf("stackList with variable number of arguments, cannot disassemble");
+		printf("stackList with variable number of arguments, cannot disassemble\n");
 		exit(1);
 	}
 	se->data = num = senum->data;
@@ -987,7 +1193,7 @@
 void jump()
 {
 	int cur = get_curoffs() + 2;
-	int to = cur + (int16)get_word();
+	int to = cur + get_signed_word();
 
 	if (!dontOutputElse && maybeAddElse(cur, to)) {
 		pendingElse = true;
@@ -1003,7 +1209,9 @@
 void jumpif(StackEnt * se, bool when)
 {
 	int cur = get_curoffs() + 2;
-	int to = cur + (int16)get_word();
+	int offset = get_signed_word();
+	int to = cur + offset;
+	printf("jumpif: %d, %d, %d\n", cur, offset, to);
 	char *e = output;
 
 	if (!dontOutputElseif && pendingElse) {
@@ -1102,6 +1310,7 @@
 	case 0x16:
 		push(se_oper(pop(), operMod, pop()));
 		break;
+
 	case 0x64:
 		jumpif(pop(), true);
 		break;
@@ -1111,14 +1320,19 @@
 	case 0x66:
 		jump();
 		break;
+	case 0x67:
+		ext("|break");
+		break;
 	case 0x6D:
 		writeVar(get_word(), pop());
 		break;
 
 	case 0x79:
-		ext("lp|startScript");
+		ext("lpp|startScript");
+		break;
 	case 0x7A:
 		ext("lp|startScriptQuick");
+		break;
 
 	case 0x9C:
 		ext("x" "cursorCommand\0"
@@ -1138,7 +1352,7 @@
 		break;
 	case 0x95:
 		ext("m" "printDebug_\0"
-				"x" "printDebug_\0"
+				"x" "printDebug\0"
 				"\xC8|baseop,"
 				"\xC9|end,"
 				"\xCApp|XY,"





More information about the Scummvm-git-logs mailing list