[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