[Scummvm-cvs-logs] scummvm master -> 25b99c448d63da48b639834d41146d2f30a11e49

bluegr md5 at scummvm.org
Sun Dec 18 19:19:57 CET 2011


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
25b99c448d DREAMWEB: Rewrite signOn into C++, and remove the users and passwords from the data blob


Commit: 25b99c448d63da48b639834d41146d2f30a11e49
    https://github.com/scummvm/scummvm/commit/25b99c448d63da48b639834d41146d2f30a11e49
Author: Filippos Karapetis (md5 at scummvm.org)
Date: 2011-12-18T10:17:55-08:00

Commit Message:
DREAMWEB: Rewrite signOn into C++, and remove the users and passwords from the data blob

Note that the string processing logic in signOn is a bit different from
the original, but the end result is the same (with cleaner code)

Changed paths:
    devtools/tasmrecover/tasm-recover
    engines/dreamweb/dreamgen.cpp
    engines/dreamweb/dreamgen.h
    engines/dreamweb/monitor.cpp
    engines/dreamweb/stubs.h



diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover
index 840d961..102f51d 100755
--- a/devtools/tasmrecover/tasm-recover
+++ b/devtools/tasmrecover/tasm-recover
@@ -56,6 +56,7 @@ p = parser(skip_binary_data = [
 	'diarylist',
 	# monitor.asm
 	'comlist',
+	'keys',
 	# newplace.asm
 	'destlist',
 	# object.asm
@@ -798,6 +799,7 @@ generator = cpp(context, "DreamGen", blacklist = [
 	'showtime',
 	'showwatch',
 	'showword',
+	'signon',
 	'singlekey',
 	'sitdowninbar',
 	'slabdoora',
diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp
index 644187c..5be7126 100644
--- a/engines/dreamweb/dreamgen.cpp
+++ b/engines/dreamweb/dreamgen.cpp
@@ -1773,14 +1773,14 @@ void DreamGenContext::getDestInfo() {
 	push(ax);
 	dx = data;
 	es = dx;
-	si = 661;
+	si = 555;
 	_add(si, ax);
 	cl = es.byte(si);
 	ax = pop();
 	push(cx);
 	dx = data;
 	es = dx;
-	si = 677;
+	si = 571;
 	_add(si, ax);
 	ax = pop();
 }
@@ -1832,7 +1832,7 @@ clearedlocations:
 	bx = ax;
 	dx = data;
 	es = dx;
-	_add(bx, 661);
+	_add(bx, 555);
 	es.byte(bx) = 0;
 }
 
@@ -1852,7 +1852,7 @@ dirroot:
 	si = offset_rootdir;
 	_inc(si);
 	es = cs;
-	di = 586;
+	di = 480;
 	_inc(di);
 	cx = 12;
 	_movsb(cx, true);
@@ -1885,107 +1885,6 @@ directloop1:
 	goto directloop1;
 }
 
-void DreamGenContext::signOn() {
-	STACK_CHECK;
-	parser();
-	_inc(di);
-	ds = cs;
-	si = offset_keys;
-	cx = 4;
-signonloop:
-	push(cx);
-	push(si);
-	push(di);
-	_add(si, 14);
-	cx = 11;
-signonloop2:
-	_lodsb();
-	_cmp(al, 32);
-	if (flags.z())
-		goto foundsign;
-	makeCaps();
-	ah = es.byte(di);
-	_inc(di);
-	_cmp(al, ah);
-	if (!flags.z())
-		goto nomatch;
-	if (--cx)
-		goto signonloop2;
-nomatch:
-	di = pop();
-	si = pop();
-	cx = pop();
-	_add(si, 26);
-	if (--cx)
-		goto signonloop;
-	al = 13;
-	monMessage();
-	return;
-foundsign:
-	di = pop();
-	si = pop();
-	cx = pop();
-	bx = si;
-	es = ds;
-	_cmp(es.byte(bx), 0);
-	if (flags.z())
-		goto notyetassigned;
-	al = 17;
-	monMessage();
-	return;
-notyetassigned:
-	push(es);
-	push(bx);
-	scrollMonitor();
-	al = 15;
-	monMessage();
-	di = data.word(kMonadx);
-	bx = data.word(kMonady);
-	push(di);
-	push(bx);
-	input();
-	bx = pop();
-	di = pop();
-	data.word(kMonadx) = di;
-	data.word(kMonady) = bx;
-	bx = pop();
-	es = pop();
-	push(es);
-	push(bx);
-	_add(bx, 2);
-	ds = cs;
-	si = 695;
-checkpass:
-	_lodsw();
-	ah = es.byte(bx);
-	_inc(bx);
-	_cmp(ah, 32);
-	if (flags.z())
-		goto passpassed;
-	_cmp(al, ah);
-	if (flags.z())
-		goto checkpass;
-	bx = pop();
-	es = pop();
-	scrollMonitor();
-	al = 16;
-	monMessage();
-	return;
-passpassed:
-	al = 14;
-	monMessage();
-	bx = pop();
-	es = pop();
-	push(es);
-	push(bx);
-	_add(bx, 14);
-	monPrint();
-	scrollMonitor();
-	bx = pop();
-	es = pop();
-	es.byte(bx) = 1;
-}
-
 void DreamGenContext::read() {
 	STACK_CHECK;
 	cx = 40;
@@ -1998,7 +1897,7 @@ void DreamGenContext::read() {
 	return;
 okcom:
 	es = cs;
-	di = 586;
+	di = 480;
 	ax = data.word(kTextfile1);
 	data.word(kMonsource) = ax;
 	ds = ax;
@@ -2128,7 +2027,7 @@ keyok2:
 	ds = cs;
 	si = offset_operand1+1;
 	es = cs;
-	di = 586+1;
+	di = 480+1;
 	cx = 12;
 	_movsb(cx, true);
 	monitorLogo();
@@ -2210,7 +2109,7 @@ void DreamGenContext::parser() {
 	al = '=';
 	_stosb();
 	ds = cs;
-	si = 695;
+	si = 589;
 notspace1:
 	_lodsw();
 	_cmp(al, 32);
@@ -2393,55 +2292,41 @@ void DreamGenContext::__start() {
 		//0x01a0: .... .... .... ....
 		0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 
 		//0x01b0: .... ...D REAM WEB.
-		0x56, 0x39, 0x39, 0x00, 0x01, 0x00, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x20, 0x20, 0x20, 
-		//0x01c0: V99. ..PU BLIC     
-		0x20, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 
-		//0x01d0:   PU BLIC       ...
-		0x42, 0x4c, 0x41, 0x43, 0x4b, 0x44, 0x52, 0x41, 0x47, 0x4f, 0x4e, 0x20, 0x52, 0x59, 0x41, 0x4e, 
-		//0x01e0: BLAC KDRA GON  RYAN
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x48, 0x45, 0x4e, 0x44, 0x52, 0x49, 
-		//0x01f0:         . ..HE NDRI
-		0x58, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x4f, 0x55, 0x49, 0x53, 0x20, 0x20, 0x20, 0x20, 0x20, 
-		//0x0200: X      LO UIS      
-		0x20, 0x00, 0x00, 0x00, 0x53, 0x45, 0x50, 0x54, 0x49, 0x4d, 0x55, 0x53, 0x20, 0x20, 0x20, 0x20, 
-		//0x0210:  ... SEPT IMUS     
-		0x42, 0x45, 0x43, 0x4b, 0x45, 0x54, 0x54, 0x20, 0x20, 0x20, 0x20, 0x00, 0xff, 0xff, 0x20, 0x20, 
-		//0x0220: BECK ETT     . ..  
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x22, 0x52, 0x4f, 0x4f, 
-		//0x0230:              . "ROO
-		0x54, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 
-		//0x0240: T          ."      
-		0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x0d, 0x0a, 0x0d, 0x0a, 0x24, 0x10, 0x12, 0x12, 
-		//0x0250:         . .... $...
-		0x11, 0x10, 0x10, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 
-		//0x0260: .... .... .... ....
-		0x02, 0x02, 0x02, 0x02, 0x02, 0x44, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-		//0x0270: .... .D:. .... ....
+		0x56, 0x39, 0x39, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 
+		//0x01c0: V99.               
+		0x20, 0x00, 0x22, 0x52, 0x4f, 0x4f, 0x54, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 
+		//0x01d0:  ."R OOT          .
+		0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x0d, 0x0a, 
+		//0x01e0: "               ...
+		0x0d, 0x0a, 0x24, 0x10, 0x12, 0x12, 0x11, 0x10, 0x10, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 
+		//0x01f0: ..$. .... .... ....
+		0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x44, 0x3a, 0x00, 0x00, 0x00, 
+		//0x0200: .... .... ...D :...
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-		//0x0280: .... .... .... ....
-		0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-		//0x0290: .... .... .... ....
-		0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x02, 0x04, 0x01, 0x0a, 0x09, 0x08, 0x06, 0x0b, 
-		//0x02a0: .... .... .... ....
-		0x04, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-		//0x02b0: .... .... .... ....
+		//0x0210: .... .... .... ....
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 
+		//0x0220: .... .... .... ....
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x02, 0x04, 
+		//0x0230: .... .... .... ....
+		0x01, 0x0a, 0x09, 0x08, 0x06, 0x0b, 0x04, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+		//0x0240: .... .... .... ....
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-		//0x02c0: .... .... .... ....
+		//0x0250: .... .... .... ....
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-		//0x02d0: .... .... .... ....
+		//0x0260: .... .... .... ....
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-		//0x02e0: .... .... .... ....
+		//0x0270: .... .... .... ....
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-		//0x02f0: .... .... .... ....
+		//0x0280: .... .... .... ....
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-		//0x0300: .... .... .... ....
+		//0x0290: .... .... .... ....
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-		//0x0310: .... .... .... ....
+		//0x02a0: .... .... .... ....
 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-		//0x0320: .... .... .... ....
-		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 
-		//0x0330: .... .... .... ....
-		};
+		//0x02b0: .... .... .... ....
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 
+		//0x02c0: .... .... .... ....
+		0xff, 0xff, 0xff, 0x00, 0x00, 0x00, };
 	ds.assign(src, src + sizeof(src));
 	dreamweb(); 
 }
diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h
index 6e06941..9b5665c 100644
--- a/engines/dreamweb/dreamgen.h
+++ b/engines/dreamweb/dreamgen.h
@@ -32,9 +32,8 @@
 
 namespace DreamGen {
 
-static const uint16 offset_rootdir = 0x023c;
-static const uint16 offset_operand1 = 0x022e;
-static const uint16 offset_keys = 0x01c4;
+static const uint16 offset_operand1 = 0x01c4;
+static const uint16 offset_rootdir = 0x01d2;
 static const uint16 kStartvars = 0;
 static const uint16 kProgresspoints = 1;
 static const uint16 kWatchon = 2;
@@ -356,15 +355,15 @@ static const uint16 kSoundbufferwrite = 435;
 static const uint16 kCurrentsample = 437;
 static const uint16 kRoomssample = 438;
 static const uint16 kBasicsample = 439;
-static const uint16 kCurrentfile = 586;
-static const uint16 kRoomscango = 661;
-static const uint16 kRoompics = 677;
-static const uint16 kOplist = 692;
-static const uint16 kInputline = 695;
-static const uint16 kPresslist = 823;
-static const uint16 kQuitrequested = 829;
-static const uint16 kSubtitles = 830;
-static const uint16 kForeignrelease = 831;
+static const uint16 kCurrentfile = 480;
+static const uint16 kRoomscango = 555;
+static const uint16 kRoompics = 571;
+static const uint16 kOplist = 586;
+static const uint16 kInputline = 589;
+static const uint16 kPresslist = 717;
+static const uint16 kQuitrequested = 723;
+static const uint16 kSubtitles = 724;
+static const uint16 kForeignrelease = 725;
 static const uint16 kBlocktextdat = (0);
 static const uint16 kPersonframes = (0);
 static const uint16 kDebuglevel1 = (0);
@@ -499,7 +498,6 @@ public:
 	void getEitherAd();
 	void dropObject();
 	void useOpened();
-	void signOn();
 	void locationPic();
 	void swapWithOpen();
 	void dreamweb();
diff --git a/engines/dreamweb/monitor.cpp b/engines/dreamweb/monitor.cpp
index dd94633..26caeb2 100644
--- a/engines/dreamweb/monitor.cpp
+++ b/engines/dreamweb/monitor.cpp
@@ -25,33 +25,28 @@
 namespace DreamGen {
 
 struct MonitorKeyEntry {
-	uint8 keyHeld;
-	uint8 b1;	// unused, for alignment
-	char  userpass[24];
-	//char  password[12];	// for the new monitor key list below
-	//char  username[12];	// for the new monitor key list below
+	uint8 keyAssigned;
+	char  username[12];
+	char  password[12];
 };
 
-#if 0
 // New monitor key list
 static MonitorKeyEntry monitorKeyEntries[4] = {
-	{ 1, "PUBLIC     ", "PUBLIC     " },
-	{ 0, "BLACKDRAGON", "RYAN       " },
-	{ 0, "HENDRIX    ", "LOUIS      " },
-	{ 0, "SEPTIMUS   ", "BECKETT    " }
+	{ 1, "PUBLIC",  "PUBLIC"      },
+	{ 0, "RYAN",    "BLACKDRAGON" },
+	{ 0, "LOUIS",   "HENDRIX"     },
+	{ 0, "BECKETT", "SEPTIMUS"    }
 };
-#endif
 
 void DreamGenContext::useMon() {
 	data.byte(kLasttrigger) = 0;
 	memset(data.ptr(kCurrentfile+1, 0), ' ', 12);
 	memset(data.ptr(offset_operand1+1, 0), ' ', 12);
 
-	MonitorKeyEntry *monitorKeyEntries = (MonitorKeyEntry *)data.ptr(offset_keys, 0);
-	monitorKeyEntries[0].keyHeld = 1;
-	monitorKeyEntries[1].keyHeld = 0;
-	monitorKeyEntries[2].keyHeld = 0;
-	monitorKeyEntries[3].keyHeld = 0;
+	monitorKeyEntries[0].keyAssigned = 1;
+	monitorKeyEntries[1].keyAssigned = 0;
+	monitorKeyEntries[2].keyAssigned = 0;
+	monitorKeyEntries[3].keyAssigned = 0;
 
 	createPanel();
 	showPanel();
@@ -434,12 +429,9 @@ void DreamGenContext::showKeys() {
 	scrollMonitor();
 	monMessage(18);
 
-	MonitorKeyEntry *monitorKeyEntries = (MonitorKeyEntry *)data.ptr(offset_keys, 0);
-
 	for (int i = 0; i < 4; i++) {
-		if (monitorKeyEntries[i].keyHeld)
-			monPrint(monitorKeyEntries[i].userpass + 12);	// username
-			//monPrint(monitorKeyEntries[i].username);
+		if (monitorKeyEntries[i].keyAssigned)
+			monPrint(monitorKeyEntries[i].username);
 	}
 
 	scrollMonitor();
@@ -447,20 +439,77 @@ void DreamGenContext::showKeys() {
 
 void DreamGenContext::getKeyAndLogo() {
 	byte newLogo = es.byte(bx + 1) - 48;
-	MonitorKeyEntry *monitorKeyEntries = (MonitorKeyEntry *)data.ptr(offset_keys, 0);
 	byte keyNum = es.byte(bx + 1 + 2) - 48;
 	bx += 1 + 2 + 1;
 
-	if (monitorKeyEntries[keyNum].keyHeld == 1) {
+	if (monitorKeyEntries[keyNum].keyAssigned == 1) {
 		// Key OK
 		data.byte(kLogonum) = newLogo;
 		al = 0;
 	} else {
 		monMessage(12);	// "Access denied, key required -"
-		monPrint(monitorKeyEntries[keyNum].userpass + 12);	// username
+		monPrint(monitorKeyEntries[keyNum].username);
 		scrollMonitor();
 		al = 1;
 	}
 }
 
+void DreamGenContext::signOn() {
+	parser();
+
+	int8 foundIndex = -1;
+	Common::String inputLine = (const char *)data.ptr(offset_operand1 + 1, 0);
+	inputLine.trim();
+
+	for (byte i = 0; i < 4; i++) {
+		if (inputLine.equalsIgnoreCase(monitorKeyEntries[i].username)) {
+			// Check if the key has already been assigned
+			if (monitorKeyEntries[i].keyAssigned) {
+				monMessage(17);
+				return;
+			} else {
+				foundIndex = i;
+				break;
+			}
+		}
+	}
+
+	if (foundIndex == -1) {
+		monMessage(13);
+		return;
+	}
+
+	monMessage(15);
+
+	uint16 prevX = data.word(kMonadx);
+	uint16 prevY = data.word(kMonady);
+	input();	// password input
+	data.word(kMonadx) = prevX;
+	data.word(kMonady) = prevY;
+
+	inputLine = (const char *)data.ptr(kInputline, 0);
+	inputLine.toUppercase();
+
+	// The entered line has zeroes in-between each character
+	uint32 len = strlen(monitorKeyEntries[foundIndex].password);
+	bool found = true;
+
+	for (uint32 i = 0; i < len; i++) {
+		if (monitorKeyEntries[foundIndex].password[i] != inputLine[i * 2]) {
+			found = false;
+			break;
+		}
+	}
+
+	if (!found) {
+		scrollMonitor();
+		monMessage(16);
+	} else {
+		monMessage(14);
+		monPrint(monitorKeyEntries[foundIndex].username);
+		scrollMonitor();
+		monitorKeyEntries[foundIndex].keyAssigned = 1;
+	}
+}
+
 } // End of namespace DreamGen
diff --git a/engines/dreamweb/stubs.h b/engines/dreamweb/stubs.h
index 3f38ad4..bb86175 100644
--- a/engines/dreamweb/stubs.h
+++ b/engines/dreamweb/stubs.h
@@ -373,5 +373,6 @@
 	void deleteExText(uint8 textNum) {
 		DreamBase::deleteExText(textNum);
 	}
+	void signOn();
 
 #endif






More information about the Scummvm-git-logs mailing list