diff options
author | D G Turner | 2011-12-26 21:23:38 +0000 |
---|---|---|
committer | D G Turner | 2011-12-26 21:23:38 +0000 |
commit | 6a7e798f465afb0f188b85664dee5ae2cda93a4a (patch) | |
tree | a2c62e44cf607eb567c4e9703d6797a6c2a5890c /engines | |
parent | b3b904ddabcda8c39c5b40eec1e2c6c0e14e4ef3 (diff) | |
download | scummvm-rg350-6a7e798f465afb0f188b85664dee5ae2cda93a4a.tar.gz scummvm-rg350-6a7e798f465afb0f188b85664dee5ae2cda93a4a.tar.bz2 scummvm-rg350-6a7e798f465afb0f188b85664dee5ae2cda93a4a.zip |
DREAMWEB: Ported 'dirfile' to C++
Needs some checking of es:di usage and work to remove _operand1 to
dreambase.h
Diffstat (limited to 'engines')
-rw-r--r-- | engines/dreamweb/dreamgen.cpp | 77 | ||||
-rw-r--r-- | engines/dreamweb/monitor.cpp | 55 |
2 files changed, 55 insertions, 77 deletions
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp index 4a0611d594..13cb4253ae 100644 --- a/engines/dreamweb/dreamgen.cpp +++ b/engines/dreamweb/dreamgen.cpp @@ -26,83 +26,6 @@ namespace DreamGen { -void DreamGenContext::dirFile() { - STACK_CHECK; - al = 34; - es.byte(di) = al; - push(es); - push(di); - ds = data.word(kTextfile1); - si = (66*2); - searchForString(); - _cmp(al, 0); - if (flags.z()) - goto foundfile; - di = pop(); - es = pop(); - push(es); - push(di); - ds = data.word(kTextfile2); - si = (66*2); - searchForString(); - _cmp(al, 0); - if (flags.z()) - goto foundfile; - di = pop(); - es = pop(); - push(es); - push(di); - ds = data.word(kTextfile3); - si = (66*2); - searchForString(); - _cmp(al, 0); - if (flags.z()) - goto foundfile; - di = pop(); - es = pop(); - al = 7; - monMessage(); - return; -foundfile: - ax = pop(); - ax = pop(); - getKeyAndLogo(); - _cmp(al, 0); - if (flags.z()) - goto keyok2; - return; -keyok2: - push(es); - push(bx); - ds = cs; - si = offset_operand1+1; - es = cs; - di = 408+1; - cx = 12; - _movsb(cx, true); - monitorLogo(); - scrollMonitor(); - al = 10; - monMessage(); - bx = pop(); - es = pop(); -directloop2: - al = es.byte(bx); - _inc(bx); - _cmp(al, 34); - if (flags.z()) - goto endofdir2; - _cmp(al, '*'); - if (flags.z()) - goto endofdir2; - _cmp(al, '='); - if (!flags.z()) - goto directloop2; - monPrint(); - goto directloop2; -endofdir2: - scrollMonitor(); -} void DreamGenContext::__start() { static const uint8 src[] = { diff --git a/engines/dreamweb/monitor.cpp b/engines/dreamweb/monitor.cpp index f1b870d9c0..7e88838a7d 100644 --- a/engines/dreamweb/monitor.cpp +++ b/engines/dreamweb/monitor.cpp @@ -453,6 +453,61 @@ void DreamGenContext::getKeyAndLogo() { } } +void DreamGenContext::dirFile() { + bool foundFile = false; + + es.byte(di) = 34; + + ds = data.word(kTextfile1); + si = kTextstart; + searchForString(); + if (al == 0) { + foundFile = true; + } else { + ds = data.word(kTextfile2); + si = kTextstart; + searchForString(); + if (al == 0) { + foundFile = true; + } else { + ds = data.word(kTextfile3); + si = kTextstart; + searchForString(); + if (al == 0) + foundFile = true; + } + } + + if (!foundFile) { + monMessage(7); + return; + } + + // "foundfile" + getKeyAndLogo(); + if (al != 0) + return; + + // "keyok2" + memcpy(data.ptr(kCurrentfile+1, 0), data.ptr(offset_operand1+1, 0), 12); + monitorLogo(); + scrollMonitor(); + monMessage(10); + + while (true) { + al = es.byte(bx); + bx++; + if (al == 34 || al == '*') { + // "endofdir2" + scrollMonitor(); + return; + } + + if (al == '=') + monPrint(); + } +} + void DreamGenContext::dirCom() { randomAccess(30); |