aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir2011-06-08 01:48:38 +0400
committerAlyssa Milburn2011-06-15 17:32:19 +0200
commitab41fb783de0323e333623411f7915eb110e6fac (patch)
tree28cc0f1698b7eac0a71cd663403b71f1214855c4
parent858a898aa7aef678c9c486c8c18788ade47f8aea (diff)
downloadscummvm-rg350-ab41fb783de0323e333623411f7915eb110e6fac.tar.gz
scummvm-rg350-ab41fb783de0323e333623411f7915eb110e6fac.tar.bz2
scummvm-rg350-ab41fb783de0323e333623411f7915eb110e6fac.zip
DREAMWEB: fixed equ expanding
-rw-r--r--devtools/tasmrecover/tasm/cpp.py15
-rw-r--r--engines/dreamweb/dreamgen.cpp22
2 files changed, 25 insertions, 12 deletions
diff --git a/devtools/tasmrecover/tasm/cpp.py b/devtools/tasmrecover/tasm/cpp.py
index 1e77893f89..36bc192219 100644
--- a/devtools/tasmrecover/tasm/cpp.py
+++ b/devtools/tasmrecover/tasm/cpp.py
@@ -52,7 +52,7 @@ namespace %s {
g = self.context.get_global(name)
if isinstance(g, op.const):
- value = self.expand(g.value)
+ value = self.expand_equ(g.value)
elif isinstance(g, proc.proc):
if self.indirection != -1:
raise Exception("invalid proc label usage")
@@ -101,6 +101,19 @@ namespace %s {
return 0
+ def expand_equ_cb(self, match):
+ name = match.group(0).lower()
+ g = self.context.get_global(name)
+ if isinstance(g, op.const):
+ return g.value
+ return str(g.offset)
+
+ def expand_equ(self, expr):
+ n = 1
+ while n > 0:
+ expr, n = re.subn(r'\b[a-zA-Z_][a-zA-Z0-9_]+\b', self.expand_equ_cb, expr)
+ return expr
+
def expand(self, expr, def_size = 0):
#print "EXPAND \"%s\"" %expr
size = self.get_size(expr) if def_size == 0 else def_size
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index ef05c31e87..c5b349fb44 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -16519,7 +16519,7 @@ static void makeheader(Context & context) {
context.di = 5952;
context.ax = 17;
storeit(context);
- context.ax = 68-context.data.byte(1);
+ context.ax = 68-1;
storeit(context);
context.ax = 0+2080+30000+(16*114)+((114+2)*2)+18000;
storeit(context);
@@ -16527,7 +16527,7 @@ static void makeheader(Context & context) {
storeit(context);
context.ax = 48;
storeit(context);
- context.ax = 991-context.data.byte(537);
+ context.ax = 991-537;
storeit(context);
return;
}
@@ -17313,7 +17313,7 @@ static void allocatebuffers(Context & context) {
allocatemem(context);
context.data.word(418) = context.ax;
trysoundalloc(context);
- context.bx = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)+(6*64)+991-context.data.byte(537)+68-context.data.byte(1)/16;
+ context.bx = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)+(6*64)+991-537+68-1/16;
allocatemem(context);
context.data.word(412) = context.ax;
trysoundalloc(context);
@@ -17340,7 +17340,7 @@ static void allocatebuffers(Context & context) {
static void clearbuffers(Context & context) {
context.es = context.data.word(412);
- context.cx = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)+(6*64)+991-context.data.byte(537)+68-context.data.byte(1)/2;
+ context.cx = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)+(6*64)+991-537+68-1/2;
context.ax = 0;
context.di = 0;
while(--context.cx) context._stosw();
@@ -17353,13 +17353,13 @@ static void clearbuffers(Context & context) {
context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)+(6*64);
context.ds = context.cs;
context.si = 537;
- context.cx = 991-context.data.byte(537);
+ context.cx = 991-537;
while(--context.cx) context._movsb();
context.es = context.data.word(412);
- context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)+(6*64)+991-context.data.byte(537);
+ context.di = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)+(6*64)+991-537;
context.ds = context.cs;
context.si = 1;
- context.cx = 68-context.data.byte(1);
+ context.cx = 68-1;
while(--context.cx) context._movsb();
clearchanges(context);
return;
@@ -17375,13 +17375,13 @@ static void clearchanges(Context & context) {
context.si = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)+(6*64);
context.es = context.cs;
context.di = 537;
- context.cx = 991-context.data.byte(537);
+ context.cx = 991-537;
while(--context.cx) context._movsb();
context.ds = context.data.word(412);
- context.si = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)+(6*64)+991-context.data.byte(537);
+ context.si = 0+(228*13)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*30)+(6*64)+991-537;
context.es = context.cs;
context.di = 1;
- context.cx = 68-context.data.byte(1);
+ context.cx = 68-1;
while(--context.cx) context._movsb();
context.data.byte(10) = 0;
context.data.word(12) = 0;
@@ -20605,7 +20605,7 @@ static void getroomdata(Context & context) {
static void readheader(Context & context) {
context.ds = context.cs;
context.dx = 5881;
- context.cx = 5958-context.data.byte(5881);
+ context.cx = 5958-5881;
readfromfile(context);
context.es = context.cs;
context.di = 5952;