[Scummvm-cvs-logs] SF.net SVN: scummvm:[40441] scummvm/trunk/engines/sci/engine
waltervn at users.sourceforge.net
waltervn at users.sourceforge.net
Mon May 11 00:25:43 CEST 2009
Revision: 40441
http://scummvm.svn.sourceforge.net/scummvm/?rev=40441&view=rev
Author: waltervn
Date: 2009-05-10 22:25:43 +0000 (Sun, 10 May 2009)
Log Message:
-----------
SCI: Minor changes to Message(). Some of the text in KQ6 floppy should now be visible.
Modified Paths:
--------------
scummvm/trunk/engines/sci/engine/kstring.cpp
scummvm/trunk/engines/sci/engine/message.cpp
scummvm/trunk/engines/sci/engine/message.h
Modified: scummvm/trunk/engines/sci/engine/kstring.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kstring.cpp 2009-05-10 22:15:33 UTC (rev 40440)
+++ scummvm/trunk/engines/sci/engine/kstring.cpp 2009-05-10 22:25:43 UTC (rev 40441)
@@ -749,17 +749,48 @@
switch (UKPV(0)) {
case 0 :
+ if (state.getMessage(&tuple)) {
+ char *buffer = NULL;
+
+ if ((argc == 7) && (argv[6] != NULL_REG))
+ buffer = kernel_dereference_char_pointer(s, argv[6], state.getLength() + 1);
+
+ int talker = state.getTalker();
+
+ if (buffer)
+ state.getText(buffer);
+ // Talker id
+ return make_reg(0, talker);
+ } else {
+ char *buffer = NULL;
+
+ if ((argc == 7) && (argv[6] != NULL_REG))
+ buffer = kernel_dereference_char_pointer(s, argv[6], strlen(DUMMY_MESSAGE) + 1);
+
+ if (buffer)
+ strcpy(buffer, DUMMY_MESSAGE);
+
+ return NULL_REG;
+ }
case 1 :
- if (UKPV(0) == 0 ? state.getMessage(&tuple) : state.getNext()) {
- char *buffer = argc == 7 ? kernel_dereference_char_pointer(s, argv[6], state.getLength() + 1) : NULL;
+ if (state.getNext()) {
+ char *buffer = NULL;
+ if ((argc == 2) && (argv[1] != NULL_REG))
+ buffer = kernel_dereference_char_pointer(s, argv[1], state.getLength() + 1);
+
+ int talker = state.getTalker();
+
if (buffer)
state.getText(buffer);
// Talker id
- return make_reg(0, state.getTalker());
+ return make_reg(0, talker);
} else {
- char *buffer = argc == 7 ? kernel_dereference_char_pointer(s, argv[6], 0) : NULL;
+ char *buffer = NULL;
+ if ((argc == 2) && (argv[1] != NULL_REG))
+ buffer = kernel_dereference_char_pointer(s, argv[1], strlen(DUMMY_MESSAGE) + 1);
+
if (buffer)
strcpy(buffer, DUMMY_MESSAGE);
@@ -768,7 +799,10 @@
case 2:
if (state.getMessage(&tuple))
return make_reg(0, state.getLength() + 1);
- else return NULL_REG;
+ else
+ return NULL_REG;
+ default:
+ warning("kMessage subfunction %i invoked (not implemented)", UKPV(0));
}
return NULL_REG;
Modified: scummvm/trunk/engines/sci/engine/message.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/message.cpp 2009-05-10 22:15:33 UTC (rev 40440)
+++ scummvm/trunk/engines/sci/engine/message.cpp 2009-05-10 22:25:43 UTC (rev 40441)
@@ -31,7 +31,8 @@
void MessageState::initIndexRecordCursor() {
_engineCursor.resource_beginning = _currentResource->data;
_engineCursor.index_record = _indexRecords;
- _engineCursor.index = 1;
+ _engineCursor.index = 0;
+ _lastMessage.seq = 0;
}
void MessageState::parse(IndexRecordCursor *cursor, MessageTuple *t) {
@@ -48,30 +49,37 @@
int MessageState::getMessage(MessageTuple *t) {
MessageTuple looking_at;
- int found = 0;
initIndexRecordCursor();
- do {
+ while (_engineCursor.index != _recordCount) {
parse(&_engineCursor, &looking_at);
if (t->noun == looking_at.noun &&
t->verb == looking_at.verb &&
t->cond == looking_at.cond &&
t->seq == looking_at.seq)
- found = 1;
- } while (!found && getNext());
+ return 1;
+ _engineCursor.index_record += ((_version == 2101) ? 4 : 11);
+ _engineCursor.index++;
+ }
+
// FIXME: Recursion not handled yet
- return found;
+ return 0;
}
int MessageState::getNext() {
if (_engineCursor.index == _recordCount)
return 0;
- _engineCursor.index_record += ((_version == 2101) ? 4 : 11);
- _engineCursor.index ++;
- return 1;
+
+ MessageTuple mesg;
+ parse(&_engineCursor, &mesg);
+
+ if (_lastMessage.seq == mesg.seq - 1)
+ return 1;
+
+ return 0;
}
int MessageState::getTalker() {
@@ -81,7 +89,10 @@
void MessageState::getText(char *buffer) {
int offset = READ_LE_UINT16(_engineCursor.index_record + ((_version == 2101) ? 2 : 5));
char *stringptr = (char *)_engineCursor.resource_beginning + offset;
+ parse(&_engineCursor, &_lastMessage);
strcpy(buffer, stringptr);
+ _engineCursor.index_record += ((_version == 2101) ? 4 : 11);
+ _engineCursor.index++;
}
int MessageState::getLength() {
Modified: scummvm/trunk/engines/sci/engine/message.h
===================================================================
--- scummvm/trunk/engines/sci/engine/message.h 2009-05-10 22:15:33 UTC (rev 40440)
+++ scummvm/trunk/engines/sci/engine/message.h 2009-05-10 22:25:43 UTC (rev 40441)
@@ -66,6 +66,7 @@
int _recordCount;
byte *_indexRecords;
IndexRecordCursor _engineCursor;
+ MessageTuple _lastMessage;
int _version;
};
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list