From 599fbf4fe6e8fd92105ae2bcdd21e0c2f82005f9 Mon Sep 17 00:00:00 2001 From: Bertrand Augereau Date: Mon, 18 Jul 2011 14:30:07 +0200 Subject: DREAMWEB: 'printdirect' ported to C++ --- engines/dreamweb/dreamgen.cpp | 40 ---------------------------------------- engines/dreamweb/dreamgen.h | 3 +-- engines/dreamweb/stubs.cpp | 31 +++++++++++++++++++++++++++++++ engines/dreamweb/stubs.h | 1 + 4 files changed, 33 insertions(+), 42 deletions(-) (limited to 'engines/dreamweb') diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp index 1a3b6a2497..41dbf9dc3a 100644 --- a/engines/dreamweb/dreamgen.cpp +++ b/engines/dreamweb/dreamgen.cpp @@ -5108,45 +5108,6 @@ void DreamGenContext::printboth() { ax = pop(); } -void DreamGenContext::printdirect() { - STACK_CHECK; - data.word(kLastxpos) = di; - ds = data.word(kCurrentset); -printloop6: - push(bx); - push(di); - push(dx); - getnumber(); - ch = 0; -printloop5: - ax = es.word(si); - _inc(si); - _cmp(al, 0); - if (flags.z()) - goto finishdirct; - _cmp(al, ':'); - if (flags.z()) - goto finishdirct; - push(cx); - push(es); - modifychar(); - printchar(); - data.word(kLastxpos) = di; - es = pop(); - cx = pop(); - if (--cx) - goto printloop5; - dx = pop(); - di = pop(); - bx = pop(); - _add(bx, data.word(kLinespacing)); - goto printloop6; -finishdirct: - dx = pop(); - di = pop(); - bx = pop(); -} - void DreamGenContext::monprint() { STACK_CHECK; data.byte(kKerning) = 1; @@ -21444,7 +21405,6 @@ void DreamGenContext::__dispatch_call(uint16 addr) { case addr_printslow: printslow(); break; case addr_waitframes: waitframes(); break; case addr_printboth: printboth(); break; - case addr_printdirect: printdirect(); break; case addr_monprint: monprint(); break; case addr_fillryan: fillryan(); break; case addr_fillopen: fillopen(); break; diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h index 782f4845fc..c50ee96348 100644 --- a/engines/dreamweb/dreamgen.h +++ b/engines/dreamweb/dreamgen.h @@ -585,7 +585,6 @@ public: static const uint16 addr_fillopen = 0xc324; static const uint16 addr_fillryan = 0xc320; static const uint16 addr_monprint = 0xc314; - static const uint16 addr_printdirect = 0xc310; static const uint16 addr_printboth = 0xc30c; static const uint16 addr_waitframes = 0xc308; static const uint16 addr_printslow = 0xc304; @@ -1566,7 +1565,7 @@ public: //void spriteupdate(); void usetempcharset(); void discops(); - void printdirect(); + //void printdirect(); void delthisone(); void makebackob(); void middlepanel(); diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp index b68f7e67df..fa7ec63a40 100644 --- a/engines/dreamweb/stubs.cpp +++ b/engines/dreamweb/stubs.cpp @@ -271,6 +271,37 @@ void DreamGenContext::getnextword() { bh = charCount; } +void DreamGenContext::printdirect() { + data.word(kLastxpos) = di; + ds = data.word(kCurrentset); + while (true) { + push(bx); + push(di); + push(dx); + uint8 charCount = getnumber(dl, (bool)(dl & 1)); + do { + ax = es.word(si); + ++si; + if ((al == 0) || (al == ':')) { + dx = pop(); + di = pop(); + bx = pop(); + return; + } + push(es); + al = engine->modifyChar(al); + printchar(); + data.word(kLastxpos) = di; + es = pop(); + --charCount; + } while(charCount); + dx = pop(); + di = pop(); + bx = pop(); + bx += data.word(kLinespacing); + } +} + void DreamGenContext::getnumber() { cl = getnumber(dl, (bool)(dl & 1)); } diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h index b882172b4c..ef957344b4 100644 --- a/engines/dreamweb/stubs.h +++ b/engines/dreamweb/stubs.h @@ -38,6 +38,7 @@ void quickquit2(); void getnextword(); uint8 getnextword(uint8 *totalWidth, uint8 *charCount); + void printdirect(); void getnumber(); uint8 getnumber(uint16 maxWidth, bool centered); void kernchars(); -- cgit v1.2.3