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

drmccoy at users.sourceforge.net drmccoy at users.sourceforge.net
Tue Dec 23 22:58:29 CET 2008


Revision: 35510
          http://scummvm.svn.sourceforge.net/scummvm/?rev=35510&view=rev
Author:   drmccoy
Date:     2008-12-23 21:58:29 +0000 (Tue, 23 Dec 2008)

Log Message:
-----------
Added a way to specify a starting offset on the command line

Modified Paths:
--------------
    tools/trunk/degob.cpp
    tools/trunk/degob_script.cpp
    tools/trunk/degob_script.h
    tools/trunk/degob_script_v6.cpp

Modified: tools/trunk/degob.cpp
===================================================================
--- tools/trunk/degob.cpp	2008-12-23 21:17:39 UTC (rev 35509)
+++ tools/trunk/degob.cpp	2008-12-23 21:58:29 UTC (rev 35510)
@@ -45,6 +45,7 @@
 	FILE *f;
 	byte *totData = 0, *extData = 0, *extComData = 0;
 	uint32 totSize = 0, extSize = 0, extComSize = 0;
+	int32 offset = -1;
 
 	if (!(f = fopen(argv[2], "r")))
 		error("Couldn't open file \"%s\"", argv[2]);
@@ -53,19 +54,46 @@
 
 	ExtTable *extTable = 0;
 	if (argc > 3) {
-		if (!(f = fopen(argv[3], "r")))
-			error("Couldn't open file \"%s\"", argv[3]);
-		extData = readFile(f, extSize);
-		fclose(f);
+		int n = 3;
 
-		if (argc > 4) {
-			if (!(f = fopen(argv[4], "r")))
-				error("Couldn't open file \"%s\"", argv[4]);
-			extComData = readFile(f, extComSize);
+		if (!strncmp(argv[n], "-o", 2)) {
+			char *strOffset;
+
+			if (strlen(argv[n]) > 2)
+				strOffset = argv[n] + 2;
+			else if (argc <= (n + 1))
+				error("No offset specified");
+			else
+				strOffset = argv[++n];
+
+			long int tempOffset;
+
+			if ((sscanf(strOffset, "%ld", &tempOffset) != 1) || (tempOffset < 0))
+				error("Invalid offset specified");
+
+			offset = (int32) tempOffset;
+
+			n++;
+		}
+
+		if (argc > n) {
+
+			if (!(f = fopen(argv[n], "r")))
+				error("Couldn't open file \"%s\"", argv[n]);
+			extData = readFile(f, extSize);
 			fclose(f);
+
+			n++;
+
+			if (argc > n) {
+				if (!(f = fopen(argv[n], "r")))
+					error("Couldn't open file \"%s\"", argv[n]);
+				extComData = readFile(f, extComSize);
+				fclose(f);
+			}
+
+			extTable = new ExtTable(extData, extSize, extComData, extComSize);
 		}
-
-		extTable = new ExtTable(extData, extSize, extComData, extComSize);
 	}
 
 	Script *script = initScript(totData, totSize, extTable, version);
@@ -77,7 +105,7 @@
 	printInfo(*script);
 	printf("-----\n");
 
-	script->deGob();
+	script->deGob(offset);
 
 	delete[] totData;
 	delete[] extData;
@@ -88,7 +116,7 @@
 }
 
 void printHelp(const char *bin) {
-	printf("Usage: %s <version> <file.tot> [<file.ext>] [<commun.ext>]\n\n", bin);
+	printf("Usage: %s <version> <file.tot> [-o <offset>] [<file.ext>] [<commun.ext>]\n\n", bin);
 	printf("The disassembled script will be written to stdout.\n\n");
 	printf("Supported versions:\n");
 	printf("	Gob1     - Gobliiins 1\n");

Modified: tools/trunk/degob_script.cpp
===================================================================
--- tools/trunk/degob_script.cpp	2008-12-23 21:17:39 UTC (rev 35509)
+++ tools/trunk/degob_script.cpp	2008-12-23 21:58:29 UTC (rev 35510)
@@ -870,9 +870,12 @@
 	_funcOffsets.push_back(offset);
 }
 
-void Script::deGob() {
+void Script::deGob(int32 offset) {
+	if (offset < 0)
+		offset = _start;
+
 	_funcOffsets.clear();
-	_funcOffsets.push_back(_start);
+	_funcOffsets.push_back(offset);
 
 	for (std::list<uint32>::iterator it = _funcOffsets.begin(); it != _funcOffsets.end(); ++it) {
 		seek(*it);

Modified: tools/trunk/degob_script.h
===================================================================
--- tools/trunk/degob_script.h	2008-12-23 21:17:39 UTC (rev 35509)
+++ tools/trunk/degob_script.h	2008-12-23 21:58:29 UTC (rev 35510)
@@ -81,7 +81,7 @@
 	uint8 getSuffixIM() const;
 	uint8 getSuffixEX() const;
 
-	void deGob();
+	void deGob(int32 offset = -1);
 
 protected:
 	enum FuncType {

Modified: tools/trunk/degob_script_v6.cpp
===================================================================
--- tools/trunk/degob_script_v6.cpp	2008-12-23 21:17:39 UTC (rev 35509)
+++ tools/trunk/degob_script_v6.cpp	2008-12-23 21:58:29 UTC (rev 35510)
@@ -755,7 +755,7 @@
 		varIndex2 = readVarIndex(&var_6, 0);
 
 		printIndent();
-		print("memcpy(%s, %s, %d);\n", varIndex, varIndex2, var_6 * 4);
+		print("memcpy(%s, %s, %d);\n", varIndex.c_str(), varIndex2.c_str(), var_6 * 4);
 
 		seek(savedPos);
 		skipExpr(99);
@@ -773,7 +773,7 @@
 			uint16 n = readUint16();
 
 			printIndent();
-			print("memset(%s + %d, %d, %d);\n", varIndex, off, c, n);
+			print("memset(%s + %d, %d, %d);\n", varIndex.c_str(), off, c, n);
 
 			off += n;
 		}


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