[Scummvm-cvs-logs] CVS: scummvm/scumm dialogs.cpp,1.5,1.6 dialogs.h,1.2,1.3

Max Horn fingolfin at users.sourceforge.net
Sat Sep 28 12:26:02 CEST 2002


Update of /cvsroot/scummvm/scummvm/scumm
In directory usw-pr-cvs1:/tmp/cvs-serv18864/scumm

Modified Files:
	dialogs.cpp dialogs.h 
Log Message:
patch #612722: MI2 NewGui title fix

Index: dialogs.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/dialogs.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- dialogs.cpp	27 Sep 2002 23:27:14 -0000	1.5
+++ dialogs.cpp	28 Sep 2002 19:25:09 -0000	1.6
@@ -30,16 +30,11 @@
 #include "common/config-file.h"
 
 
-
 #ifdef _MSC_VER
-
 #	pragma warning( disable : 4068 )
-
 #endif
 
 
-
-
 struct ResString {
 	int num;
 	char string[80];
@@ -153,20 +148,17 @@
 void ScummDialog::addResText(int x, int y, int w, int h, int resID)
 {
 	// Get the string
-	const char *str = queryResString(resID);
-	if (!str)
-		str = "Dummy!";
-	new StaticTextWidget(this, x, y, w, h, str, kTextAlignCenter);
+	new StaticTextWidget(this, x, y, w, h, queryResString(resID), kTextAlignCenter);
 }
 
 
-const char *ScummDialog::queryResString(int stringno)
+const ScummVM::String ScummDialog::queryResString(int stringno)
 {
 	char *result;
 	int string;
 
 	if (stringno == 0)
-		return NULL;
+		return String();
 
 	if (_scumm->_features & GF_AFTER_V7)
 		string = _scumm->_vars[string_map_table_v7[stringno - 1].num];
@@ -183,12 +175,105 @@
 
 	if (!result) {								// Gracelessly degrade to english :)
 		if (_scumm->_features & GF_AFTER_V6)
-			return string_map_table_v6[stringno - 1].string;
+			result = string_map_table_v6[stringno - 1].string;
 		else
-			return string_map_table_v5[stringno - 1].string;
+			result = string_map_table_v5[stringno - 1].string;
 	}
 
-	return result;
+	// Convert to a proper string (take care of FF codes)
+	int value;
+	byte chr;
+	String tmp;
+
+	while ((chr = *result++)) {		
+		if (chr == 0xFF) {
+			chr = *result++;			
+			switch (chr) {
+			case 4: { // add value
+				value = _scumm->readVar(READ_LE_UINT16(result));
+				if (value < 0) {
+					tmp += '-';
+					value = -value;
+				}
+
+				int flag = 0;
+				int max = 10000;
+				do {
+					if (value >= max || flag) {
+						tmp += value / max + '0';
+						value %= max;
+						flag = 1;
+					}
+					max /= 10;
+					if (max == 1)
+						flag = 1;
+				} while (max);
+				result += 2;
+				break;
+			}
+
+			case 5: { //add verb
+				value = _scumm->readVar(READ_LE_UINT16(result));
+				int i;
+				if (!value)
+					break;
+				
+				for (i = 1; i < _scumm->_maxVerbs; i++) {
+					if (value == _scumm->_verbs[i].verbid && !_scumm->_verbs[i].type && !_scumm->_verbs[i].saveid) {
+						char* verb = (char*)_scumm->getResourceAddress(rtVerb, i);
+						if (verb) {
+							tmp += verb;
+						}
+						break;
+					}
+				}
+				result += 2;
+				break;
+			}
+
+			case 6: { // add object or actor name
+				value = _scumm->readVar(READ_LE_UINT16(result));
+				if (!value)
+					break;
+
+				char* name = (char*)_scumm->getObjOrActorName(value);
+				if (name) {
+					tmp += name;
+				}
+				result += 2;
+				break;
+			}
+			case 7: { // add string
+				value = READ_LE_UINT16(result);
+				if (_scumm->_features & GF_AFTER_V6 || _scumm->_gameId == GID_INDY3_256)			
+					value = _scumm->readVar(value);
+
+				if (value) {
+					char *str = (char*)_scumm->getStringAddress(value);
+					if (str) {
+						tmp += str;
+					}
+				}
+				result += 2;
+				break;
+			}
+				// Do these ever occur in the Gui?
+			case 9:
+			case 10:
+			case 12:
+			case 13:
+			case 14:				
+				result += 2;				
+			default:
+				warning("Ignoring unknown resource string of type %d", (int)chr);
+			}
+		} else {
+			if (chr != '@') {
+				tmp += chr;
+			}
+		}
+	}
+	return tmp;
 }
 
 const char *ScummDialog::queryCustomString(int stringno)
@@ -224,11 +309,11 @@
 //  addResText(10, 7, 240, 16, 2);
 //  addResText(10, 7, 240, 16, 3);
 
-	addButton(200, 20, 54, 16, RES_STRING(4), kSaveCmd, 'S');	// Save
-	addButton(200, 40, 54, 16, RES_STRING(5), kLoadCmd, 'L');	// Load
-	addButton(200, 60, 54, 16, RES_STRING(6), kPlayCmd, 'P');	// Play
-	addButton(200, 80, 54, 16, CUSTOM_STRING(17), kOptionsCmd, 'O');	// Options
-	addButton(200, 100, 54, 16, RES_STRING(8), kQuitCmd, 'Q');	// Quit
+	addButton(200, 20, 54, 16, queryResString(4), kSaveCmd, 'S');	// Save
+	addButton(200, 40, 54, 16, queryResString(5), kLoadCmd, 'L');	// Load
+	addButton(200, 60, 54, 16, queryResString(6), kPlayCmd, 'P');	// Play
+	addButton(200, 80, 54, 16, queryCustomString(17), kOptionsCmd, 'O');	// Options
+	addButton(200, 100, 54, 16, queryResString(8), kQuitCmd, 'Q');	// Quit
 	
 	_savegameList = new ListWidget(this, 10, 20, 180, 90);
 	_savegameList->setNumberingMode(kListNumberingZero);
@@ -294,11 +379,11 @@
 OptionsDialog::OptionsDialog(NewGui *gui, Scumm *scumm)
 	: ScummDialog(gui, scumm, 50, 80, 210, 60)
 {
-	addButton( 10, 10, 40, 16, CUSTOM_STRING(5), kSoundCmd, 'S');	// Sound
-	addButton( 80, 10, 40, 16, CUSTOM_STRING(6), kKeysCmd, 'K');	// Keys
-	addButton(150, 10, 40, 16, CUSTOM_STRING(7), kAboutCmd, 'A');	// About
-	addButton( 10, 35, 40, 16, CUSTOM_STRING(18), kMiscCmd, 'M');	// Misc
-	addButton(150, 35, 40, 16, CUSTOM_STRING(23), kCloseCmd, 'C');	// Close dialog - FIXME
+	addButton( 10, 10, 40, 16, queryCustomString(5), kSoundCmd, 'S');	// Sound
+	addButton( 80, 10, 40, 16, queryCustomString(6), kKeysCmd, 'K');	// Keys
+	addButton(150, 10, 40, 16, queryCustomString(7), kAboutCmd, 'A');	// About
+	addButton( 10, 35, 40, 16, queryCustomString(18), kMiscCmd, 'M');	// Misc
+	addButton(150, 35, 40, 16, queryCustomString(23), kCloseCmd, 'C');	// Close dialog - FIXME
 
 	_aboutDialog = new AboutDialog(gui, scumm);
 	_soundDialog = new SoundDialog(gui, scumm);
@@ -333,7 +418,7 @@
 AboutDialog::AboutDialog(NewGui *gui, Scumm *scumm)
 	: ScummDialog(gui, scumm, 30, 20, 260, 124)
 {
-	addButton(110, 100, 40, 16, CUSTOM_STRING(23), kCloseCmd, 'C');	// Close dialog - FIXME
+	addButton(110, 100, 40, 16, queryCustomString(23), kCloseCmd, 'C');	// Close dialog - FIXME
 	new StaticTextWidget(this, 10, 10, 240, 16, "ScummVM " SCUMMVM_VERSION " (" SCUMMVM_CVS ")", kTextAlignCenter);
 	new StaticTextWidget(this, 10, 30, 240, 16, "http://scummvm.sourceforge.net", kTextAlignCenter);
 	new StaticTextWidget(this, 10, 50, 240, 16, "All games (c) LucasArts", kTextAlignCenter);

Index: dialogs.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/dialogs.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- dialogs.h	26 Sep 2002 11:44:02 -0000	1.2
+++ dialogs.h	28 Sep 2002 19:25:09 -0000	1.3
@@ -21,26 +21,26 @@
 #ifndef SCUMM_DIALOGS_H
 #define SCUMM_DIALOGS_H
 
+#include "common/str.h"
 #include "gui/dialog.h"
 
 class ListWidget;
 class Scumm;
 
-#define RES_STRING(id)		queryResString(id)
-#define CUSTOM_STRING(id)	queryCustomString(id)
-
 class ScummDialog : public Dialog {
 public:
 	ScummDialog(NewGui *gui, Scumm *scumm, int x, int y, int w, int h)
 		: Dialog(gui, x, y, w, h), _scumm(scumm) {}
 	
 protected:
+	typedef ScummVM::String String;
+
 	Scumm *_scumm;
 
 	void addResText(int x, int y, int w, int h, int resID);
 
 	// Query a string from the resources
-	const char *queryResString(int stringno);
+	const String queryResString(int stringno);
 	
 	// Query a custom string. This is in a seperate method so that we
 	// can easily localize the messages in the future if we want to.





More information about the Scummvm-git-logs mailing list