aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJordi Vilalta Prat2009-03-01 00:18:30 +0000
committerJordi Vilalta Prat2009-03-01 00:18:30 +0000
commit82872a7033946868045cd36b9c20916050654ede (patch)
treef4b4a59701b2a28f2a543e468156eb194e7bc65c
parent7050c7b03f0f7b107df62488fd4dc2f37b704d3b (diff)
downloadscummvm-rg350-82872a7033946868045cd36b9c20916050654ede.tar.gz
scummvm-rg350-82872a7033946868045cd36b9c20916050654ede.tar.bz2
scummvm-rg350-82872a7033946868045cd36b9c20916050654ede.zip
SCI: Start converting MessageState into a class
svn-id: r38989
-rw-r--r--engines/sci/engine/kstring.cpp18
-rw-r--r--engines/sci/engine/message.cpp38
-rw-r--r--engines/sci/engine/message.h21
3 files changed, 41 insertions, 36 deletions
diff --git a/engines/sci/engine/kstring.cpp b/engines/sci/engine/kstring.cpp
index 76e9f90c7f..e9fd56c5c0 100644
--- a/engines/sci/engine/kstring.cpp
+++ b/engines/sci/engine/kstring.cpp
@@ -750,10 +750,11 @@ reg_t kMessage(EngineState *s, int funct_nr, int argc, reg_t *argv) {
tuple.cond = UKPV(4);
tuple.seq = UKPV(5);
- if (message_state_load_res(&state, module) && message_get_specific(&state, &tuple)) {
+ if (state.loadRes(module) && state.getSpecific(&tuple)) {
if (buffer)
- message_get_text(&state, buffer, 100);
- return make_reg(0, message_get_talker(&state)); /* Talker id */
+ state.getText(buffer, 100);
+ // Talker id
+ return make_reg(0, state.getTalker());
} else {
if (buffer) strcpy(buffer, DUMMY_MESSAGE);
return NULL_REG;
@@ -762,10 +763,11 @@ reg_t kMessage(EngineState *s, int funct_nr, int argc, reg_t *argv) {
case 1 : {
char *buffer = argc == 7 ? kernel_dereference_char_pointer(s, argv[6], 0) : NULL;
- if (message_get_next(&state)) {
+ if (state.getNext()) {
if (buffer)
- message_get_text(&state, buffer, 100);
- return make_reg(0, message_get_talker(&state)); /* Talker id */
+ state.getText(buffer, 100);
+ // Talker id
+ return make_reg(0, state.getTalker());
} else {
if (buffer) strcpy(buffer, DUMMY_MESSAGE);
return NULL_REG;
@@ -779,8 +781,8 @@ reg_t kMessage(EngineState *s, int funct_nr, int argc, reg_t *argv) {
tuple.cond = UKPV(4);
tuple.seq = UKPV(5);
- if (message_state_load_res(&state, module) && message_get_specific(&state, &tuple))
- return make_reg(0, message_get_length(&state) + 1);
+ if (state.loadRes(module) && state.getSpecific(&tuple))
+ return make_reg(0, state.getLength() + 1);
else return NULL_REG;
}
}
diff --git a/engines/sci/engine/message.cpp b/engines/sci/engine/message.cpp
index 8ec403fa94..f472252a9b 100644
--- a/engines/sci/engine/message.cpp
+++ b/engines/sci/engine/message.cpp
@@ -132,46 +132,46 @@ static int index_record_find(MessageState *state, MessageTuple *t, IndexRecordCu
return found;
}
-int message_get_specific(MessageState *state, MessageTuple *t) {
- return index_record_find(state, t, &state->engine_cursor);
+int MessageState::getSpecific(MessageTuple *t) {
+ return index_record_find(this, t, &engine_cursor);
}
-int message_get_next(MessageState *state) {
- return index_record_next(state, &state->engine_cursor);
+int MessageState::getNext() {
+ return index_record_next(this, &engine_cursor);
}
-int message_get_talker(MessageState *state) {
- return state->handler->get_talker(&state->engine_cursor);
+int MessageState::getTalker() {
+ return handler->get_talker(&engine_cursor);
}
-int message_get_text(MessageState *state, char *buffer, int length) {
- state->handler->get_text(&state->engine_cursor, buffer, length);
+int MessageState::getText(char *buffer, int length) {
+ handler->get_text(&engine_cursor, buffer, length);
return strlen(buffer);
}
-int message_get_length(MessageState *state) {
+int MessageState::getLength() {
char buffer[500];
- state->handler->get_text(&state->engine_cursor, buffer, sizeof(buffer));
+ handler->get_text(&engine_cursor, buffer, sizeof(buffer));
return strlen(buffer);
}
-int message_state_load_res(MessageState *state, int module) {
- if (state->module == module)
+int MessageState::loadRes(int module) {
+ if (_module == module)
return 1;
- state->module = module;
- state->current_res = state->resmgr->findResource(kResourceTypeMessage, module, 0);
+ _module = module;
+ current_res = resmgr->findResource(kResourceTypeMessage, module, 0);
- if (state->current_res == NULL || state->current_res->data == NULL) {
+ if (current_res == NULL || current_res->data == NULL) {
sciprintf("Message subsystem: Failed to load %d.MSG\n", module);
return 0;
}
- state->record_count = state->handler->index_record_count(state->current_res->data);
- state->index_records = state->current_res->data + state->handler->header_size;
+ record_count = handler->index_record_count(current_res->data);
+ index_records = current_res->data + handler->header_size;
- index_record_cursor_initialize(state, &state->engine_cursor);
+ index_record_cursor_initialize(this, &engine_cursor);
return 1;
}
@@ -195,7 +195,7 @@ void message_state_initialize(ResourceManager *resmgr, MessageState *state) {
//version = getUInt16(tester->data);
state->initialized = 1;
- state->module = -1;
+ state->_module = -1;
state->resmgr = resmgr;
state->current_res = NULL;
state->record_count = 0;
diff --git a/engines/sci/engine/message.h b/engines/sci/engine/message.h
index 609757d40f..70012cbfbc 100644
--- a/engines/sci/engine/message.h
+++ b/engines/sci/engine/message.h
@@ -43,7 +43,7 @@ struct IndexRecordCursor {
byte *resource_beginning;
};
-typedef int index_record_size_t();
+//typedef int index_record_size_t();
typedef void parse_index_record_t(IndexRecordCursor *index_record, MessageTuple *t);
typedef int get_talker_t(IndexRecordCursor *cursor);
typedef void get_text_t(IndexRecordCursor *cursor, char *buffer, int buffer_size);
@@ -60,23 +60,26 @@ struct MessageHandler {
int index_record_size;
};
-struct MessageState {
+class MessageState {
+public:
+ int getSpecific(MessageTuple *t);
+ int getNext();
+ int getTalker();
+ int getLength();
+ int getText(char *buffer, int length);
+ int loadRes(int module);
+
+public: // TODO: hide the internals
int initialized;
MessageHandler *handler;
ResourceManager *resmgr;
Resource *current_res;
- int module;
+ int _module;
int record_count;
byte *index_records;
IndexRecordCursor engine_cursor;
};
-int message_get_specific(MessageState *state, MessageTuple *t);
-int message_get_next(MessageState *state);
-int message_get_talker(MessageState *state);
-int message_get_length(MessageState *state);
-int message_get_text(MessageState *state, char *buffer, int length);
-int message_state_load_res(MessageState *state, int module);
void message_state_initialize(ResourceManager *resmgr, MessageState *state);
} // End of namespace Sci