[Scummvm-cvs-logs] CVS: scummvm/scumm actor.cpp,1.235,1.236 dialogs.cpp,1.105,1.106 dialogs.h,1.38,1.39 script_v6.cpp,1.316,1.317 script_v6he.cpp,2.37,2.38 script_v8.cpp,2.236,2.237 scumm.h,1.377,1.378 string.cpp,1.199,1.200

Max Horn fingolfin at users.sourceforge.net
Sun Mar 14 18:34:46 CET 2004


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19082/scumm

Modified Files:
	actor.cpp dialogs.cpp dialogs.h script_v6.cpp script_v6he.cpp 
	script_v8.cpp scumm.h string.cpp 
Log Message:
...and mor. Next big thing should be to document the overlay stuff, but that'll have to wait till after I slept :-)

Index: actor.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/actor.cpp,v
retrieving revision 1.235
retrieving revision 1.236
diff -u -d -r1.235 -r1.236
--- actor.cpp	24 Feb 2004 13:59:29 -0000	1.235
+++ actor.cpp	15 Mar 2004 02:21:04 -0000	1.236
@@ -1147,9 +1147,7 @@
 void ScummEngine::actorTalk() {
 	Actor *a;
 
-	_msgPtrToAdd = _charsetBuffer;
-	_messagePtr = addMessageToStack(_messagePtr);
-	assert((int)(_msgPtrToAdd - _charsetBuffer) < (int)(sizeof(_charsetBuffer)));
+	_messagePtr = addMessageToStack(_messagePtr, _charsetBuffer, sizeof(_charsetBuffer));
 
 	// FIXME: Workaround for bugs #770039 and #770049 
 	if (_gameId == GID_LOOM || _gameId == GID_LOOM256) {

Index: dialogs.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/dialogs.cpp,v
retrieving revision 1.105
retrieving revision 1.106
diff -u -d -r1.105 -r1.106
--- dialogs.cpp	24 Feb 2004 22:39:39 -0000	1.105
+++ dialogs.cpp	15 Mar 2004 02:21:04 -0000	1.106
@@ -395,10 +395,6 @@
 #pragma mark -
 
 enum {
-	kOKCmd					= 'ok  '
-};
-
-enum {
 	kKeysCmd = 'KEYS'
 };
 
@@ -413,12 +409,14 @@
 	// Add the buttons
 	//
 #ifdef _WIN32_WCE
-	addButton(_w - kButtonWidth - 8, _h - 24 - 4, "OK", GUI::OptionsDialog::kOKCmd, 'O');
-	addButton(_w - 2 * kButtonWidth - 12, _h - 24 - 4, "Cancel", kCloseCmd, 'C');
-	addButton(_w - 3 * kButtonWidth - 16, _h - 24 - 4, "Keys", kKeysCmd, 'K');
+	addButton(_w - kButtonWidth - 8, _h - 24 - 4, "Save", GUI::OptionsDialog::kSaveCmd, 'S');
+	addButton(_w - 2 * kButtonWidth - 12, _h - 24 - 4, "Apply", GUI::OptionsDialog::kApplyCmd, 'A');
+	addButton(_w - 3 * kButtonWidth - 16, _h - 24 - 4, "Revert", GUI::OptionsDialog::kRevertCmd, 'R');
+	addButton(_w - 4 * kButtonWidth - 16, _h - 24 - 4, "Keys", kKeysCmd, 'K');
 #else
-	addButton(_w - kButtonWidth-8, _h - 24, "OK", GUI::OptionsDialog::kOKCmd, 'O');
-	addButton(_w - 2 * kButtonWidth-12, _h - 24, "Cancel", kCloseCmd, 'C');
+	addButton(_w - kButtonWidth - 8, _h - 24, "Save", GUI::OptionsDialog::kSaveCmd, 'S');
+	addButton(_w - 2 * kButtonWidth - 12, _h - 24, "Apply", GUI::OptionsDialog::kApplyCmd, 'A');
+	addButton(_w - 3 * kButtonWidth - 16, _h - 24, "Revert", GUI::OptionsDialog::kRevertCmd, 'R');
 #endif
 
 	//
@@ -446,24 +444,8 @@
 #endif
 }
 
-void ConfigDialog::open() {
-	GUI_OptionsDialog::open();
-
-	// update checkboxes, too
-	subtitlesCheckbox->setState(ConfMan.getBool("subtitles"));
-}
-
-void ConfigDialog::close() {
-	
-	if (getResult()) {
-		// Subtitles
-		ConfMan.set("subtitles", subtitlesCheckbox->getState(), _domain);
-		// Sync with current setting
-		if (_vm->_version >= 7)
-			_vm->VAR(_vm->VAR_VOICE_MODE) = subtitlesCheckbox->getState();
-	}
-
-	GUI_OptionsDialog::close();
+void ConfigDialog::applySettings() {
+	ConfigDialog::applySettings();
 
 	// Sync the engine with the config manager
 	int soundVolumeMaster = ConfMan.getInt("master_volume");
@@ -479,8 +461,25 @@
 
 	_vm->_mixer->setVolume(soundVolumeSfx * soundVolumeMaster / 255);
 	_vm->_mixer->setMusicVolume(soundVolumeMusic);
+
+	// Sync with current setting
+	if (_vm->_version >= 7)
+		_vm->VAR(_vm->VAR_VOICE_MODE) = ConfMan.getBool("subtitles");
 }
 
+void ConfigDialog::loadSettings() {
+	GUI_OptionsDialog::loadSettings();
+
+	// Update subtitles checkbox
+	subtitlesCheckbox->setState(ConfMan.getBool("subtitles"));
+}
+
+void ConfigDialog::saveSettings() {
+	// Subtitles
+	ConfMan.set("subtitles", subtitlesCheckbox->getState(), _domain);
+
+	GUI_OptionsDialog::saveSettings();
+}
 
 void ConfigDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) {
 	switch (cmd) {

Index: dialogs.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/dialogs.h,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -d -r1.38 -r1.39
--- dialogs.h	26 Jan 2004 07:40:14 -0000	1.38
+++ dialogs.h	15 Mar 2004 02:21:04 -0000	1.39
@@ -112,12 +112,15 @@
 	ConfigDialog(ScummEngine *scumm);
 	~ConfigDialog();
 
-	virtual void open();
-	virtual void close();
 	virtual void handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data);
 
 protected:
 	GUI::CheckboxWidget *subtitlesCheckbox;
+
+
+	virtual void applySettings();
+	virtual void loadSettings();
+	virtual void saveSettings();
 };
 
 class InfoDialog : public ScummDialog {

Index: script_v6.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v6.cpp,v
retrieving revision 1.316
retrieving revision 1.317
diff -u -d -r1.316 -r1.317
--- script_v6.cpp	5 Mar 2004 11:08:29 -0000	1.316
+++ script_v6.cpp	15 Mar 2004 02:21:04 -0000	1.317
@@ -2508,8 +2508,8 @@
 			const byte *message;
 			byte buf_input[300], buf_output[300];
 			_messagePtr = getStringAddressVar(VAR_STRING2DRAW);
-			message = _msgPtrToAdd = buf_input;
-			addMessageToStack(_messagePtr);
+			message = buf_input;
+			addMessageToStack(_messagePtr, buf_input, sizeof(buf_input));
 			if ((_gameId == GID_DIG) && !(_features & GF_DEMO)) {
 				byte buf_trans[300];
 				char *t_ptr = (char *)buf_input;

Index: script_v6he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v6he.cpp,v
retrieving revision 2.37
retrieving revision 2.38
diff -u -d -r2.37 -r2.38
--- script_v6he.cpp	2 Mar 2004 10:22:55 -0000	2.37
+++ script_v6he.cpp	15 Mar 2004 02:21:04 -0000	2.38
@@ -955,9 +955,8 @@
 	int mode, len, slot, l, r;
 	byte filename[100];
 
-	_msgPtrToAdd = filename;
 	_messagePtr = _scriptPointer;
-	addMessageToStack(_messagePtr);
+	addMessageToStack(_messagePtr, filename, sizeof(filename));
 
 	len = resStrLen(_scriptPointer);
 	_scriptPointer += len + 1;
@@ -1003,9 +1002,8 @@
 	int len, r;
 	byte filename[100];
 
-	_msgPtrToAdd = filename;
 	_messagePtr = _scriptPointer;
-	addMessageToStack(_messagePtr);
+	addMessageToStack(_messagePtr, filename, sizeof(filename));
 
 	len = resStrLen(_scriptPointer);
 	_scriptPointer += len + 1;
@@ -1022,9 +1020,8 @@
 	int len, r1, r2;
 	byte filename[100],filename2[100];
 
-	_msgPtrToAdd = filename;
 	_messagePtr = _scriptPointer;
-	addMessageToStack(_messagePtr);
+	addMessageToStack(_messagePtr, filename, sizeof(filename));
 
 	len = resStrLen(_scriptPointer);
 	_scriptPointer += len + 1;
@@ -1034,9 +1031,8 @@
 			break;
 	}
 
-	_msgPtrToAdd = filename2;
 	_messagePtr = _scriptPointer;
-	addMessageToStack(_messagePtr);
+	addMessageToStack(_messagePtr, filename2, sizeof(filename2));
 
 	len = resStrLen(_scriptPointer);
 	_scriptPointer += len + 1;
@@ -1344,25 +1340,22 @@
 
 		switch (b) {
 		case 1:
-			_msgPtrToAdd = filename1;
 			_messagePtr = _scriptPointer;
-			addMessageToStack(_messagePtr);
+			addMessageToStack(_messagePtr, filename1, sizeof(filename1));
 
 			len = resStrLen(_scriptPointer);
 			_scriptPointer += len + 1;
 			debug(1, "o6_unknownF4(%d, %d, \"%s\")", a, b, _messagePtr);
 			break;
 		case 2:
-			_msgPtrToAdd = filename1;
 			_messagePtr = _scriptPointer;
-			addMessageToStack(_messagePtr);
+			addMessageToStack(_messagePtr, filename1, sizeof(filename1));
 
 			len = resStrLen(_scriptPointer);
 			_scriptPointer += len + 1;
 
-			_msgPtrToAdd = filename2;
 			_messagePtr = _scriptPointer;
-			addMessageToStack(_messagePtr);
+			addMessageToStack(_messagePtr, filename2, sizeof(filename2));
 
 			len = resStrLen(_scriptPointer);
 			_scriptPointer += len + 1;
@@ -1378,9 +1371,8 @@
 	int len, r;
 	byte filename[100];
 
-	_msgPtrToAdd = filename;
 	_messagePtr = _scriptPointer;
-	addMessageToStack(_messagePtr);
+	addMessageToStack(_messagePtr, filename, sizeof(filename));
 
 	len = resStrLen(_scriptPointer);
 	_scriptPointer += len + 1;

Index: script_v8.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v8.cpp,v
retrieving revision 2.236
retrieving revision 2.237
diff -u -d -r2.236 -r2.237
--- script_v8.cpp	25 Feb 2004 10:48:35 -0000	2.236
+++ script_v8.cpp	15 Mar 2004 02:21:04 -0000	2.237
@@ -531,8 +531,7 @@
 			break;
 		case 5:{
 			byte buffer[256];
-			_msgPtrToAdd = buffer;
-			addMessageToStack(_messagePtr);
+			addMessageToStack(_messagePtr, buffer, sizeof(buffer));
 			enqueueText(buffer, _string[m].xpos, _string[m].ypos, _string[m].color, _string[m].charset, _string[m].center);
 			}
 			break;

Index: scumm.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.h,v
retrieving revision 1.377
retrieving revision 1.378
diff -u -d -r1.377 -r1.378
--- scumm.h	2 Mar 2004 01:20:18 -0000	1.377
+++ scumm.h	15 Mar 2004 02:21:04 -0000	1.378
@@ -1064,7 +1064,7 @@
 
 	void CHARSET_1();
 	void drawString(int a);
-	const byte *addMessageToStack(const byte *msg);
+	const byte *addMessageToStack(const byte *msg, byte *dstBuffer, int dstBufferSize);
 	void addIntToStack(int var);
 	void addVerbToStack(int var);
 	void addNameToStack(int var);

Index: string.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/string.cpp,v
retrieving revision 1.199
retrieving revision 1.200
diff -u -d -r1.199 -r1.200
--- string.cpp	22 Feb 2004 14:48:13 -0000	1.199
+++ string.cpp	15 Mar 2004 02:21:04 -0000	1.200
@@ -48,8 +48,7 @@
 
 void ScummEngine::unkMessage1() {
 	byte buffer[100];
-	_msgPtrToAdd = buffer;
-	_messagePtr = addMessageToStack(_messagePtr);
+	_messagePtr = addMessageToStack(_messagePtr, buffer, sizeof(buffer));
 
 //	if ((_gameId == GID_CMI) && _debugMode) {	// In CMI, unkMessage1 is used for printDebug output
 	if ((buffer[0] != 0xFF) && _debugMode) {
@@ -78,8 +77,7 @@
 	byte buf[100];
 	const byte *tmp;
 
-	_msgPtrToAdd = buf;
-	tmp = _messagePtr = addMessageToStack(_messagePtr);
+	tmp = _messagePtr = addMessageToStack(_messagePtr, buf, sizeof(buf));
 
 	if (_string[3].color == 0)
 		_string[3].color = 4;
@@ -348,8 +346,7 @@
 	byte fontHeight = 0;
 	uint color;
 
-	_msgPtrToAdd = buf;
-	_messagePtr = addMessageToStack(_messagePtr);
+	_messagePtr = addMessageToStack(_messagePtr, buf, sizeof(buf));
 
 	_charset->_top = _string[a].ypos + _screenTop;
 	_charset->_startLeft = _charset->_left = _string[a].xpos;
@@ -366,18 +363,18 @@
 
 	fontHeight = _charset->getFontHeight();
 
-	_msgPtrToAdd = buf;
 
 	// trim from the right
+	byte *tmp = buf;
 	space = NULL;
-	while (*_msgPtrToAdd) {
-		if (*_msgPtrToAdd == ' ') {
+	while (*tmp) {
+		if (*tmp == ' ') {
 			if (!space)
-				space = _msgPtrToAdd;
+				space = tmp;
 		} else {
 			space = NULL;
 		}
-		_msgPtrToAdd++;
+		tmp++;
 	}
 	if (space)
 		*space = '\0';
@@ -472,12 +469,16 @@
 	}
 }
 
-const byte *ScummEngine::addMessageToStack(const byte *msg) {
+const byte *ScummEngine::addMessageToStack(const byte *msg, byte *dstBuffer, int dstBufferSize) {
 	uint num = 0;
 	uint32 val;
 	byte chr;
 	byte buf[512];
 
+	if (dstBuffer) {
+		_msgPtrToAdd = dstBuffer;
+	}
+
 	if (msg == NULL) {
 		warning("Bad message in addMessageToStack, ignoring");
 		return NULL;
@@ -563,6 +564,12 @@
 	}
 	*_msgPtrToAdd = 0;
 
+	if (dstBuffer) {
+		// Check for a buffer overflow
+		if (_msgPtrToAdd >= dstBuffer + dstBufferSize)
+			error("addMessageToStack: buffer overflow!");
+	}
+
 	return msg;
 }
 
@@ -582,7 +589,7 @@
 			if (num == _verbs[k].verbid && !_verbs[k].type && !_verbs[k].saveid) {
 				const byte *ptr = getResourceAddress(rtVerb, k);
 				ptr = translateTextAndPlaySpeech(ptr);
-				addMessageToStack(ptr);
+				addMessageToStack(ptr, 0, 0);
 				break;
 			}
 		}
@@ -599,9 +606,9 @@
 	if (ptr) {
 		if ((_version == 8) && (ptr[0] == '/')) {
 			translateText(ptr, _transText);
-			addMessageToStack(_transText);
+			addMessageToStack(_transText, 0, 0);
 		} else {
-			addMessageToStack(ptr);
+			addMessageToStack(ptr, 0, 0);
 		}
 	}
 }
@@ -617,9 +624,9 @@
 		if (ptr) {
 			if ((_version == 8) && (ptr[0] == '/')) {
 				translateText(ptr, _transText);
-				addMessageToStack(_transText);
+				addMessageToStack(_transText, 0, 0);
 			} else {
-				addMessageToStack(ptr);
+				addMessageToStack(ptr, 0, 0);
 			}
 		}
 	}
@@ -728,6 +735,7 @@
 	return strcmp(i1->tag, i2->tag);
 }
 
+// Create an index of the language file.
 void ScummEngine::loadLanguageBundle() {
 	File file;
 	int32 size;
@@ -751,23 +759,16 @@
 	file.read(_languageBuffer, size);
 	file.close();
 
-	// Create an index of the language file.
-	// FIXME: Extend this mechanism to also cover The Dig?
-
 	int32 i;
 	char *ptr = _languageBuffer;
 
 	// Count the number of lines in the language file.
-
-	_languageIndexSize = 0;
-
-	for (;;) {
+	for (_languageIndexSize = 0; ; _languageIndexSize++) {
 		ptr = strpbrk(ptr, "\n\r");
 		if (ptr == NULL)
 			break;
 		while (*ptr == '\n' || *ptr == '\r')
 			ptr++;
-		_languageIndexSize++;
 	}
 
 	// Fill the language file index. This is just an array of





More information about the Scummvm-git-logs mailing list