diff options
author | Jordi Vilalta Prat | 2009-03-01 00:18:30 +0000 |
---|---|---|
committer | Jordi Vilalta Prat | 2009-03-01 00:18:30 +0000 |
commit | 82872a7033946868045cd36b9c20916050654ede (patch) | |
tree | f4b4a59701b2a28f2a543e468156eb194e7bc65c /engines/sci | |
parent | 7050c7b03f0f7b107df62488fd4dc2f37b704d3b (diff) | |
download | scummvm-rg350-82872a7033946868045cd36b9c20916050654ede.tar.gz scummvm-rg350-82872a7033946868045cd36b9c20916050654ede.tar.bz2 scummvm-rg350-82872a7033946868045cd36b9c20916050654ede.zip |
SCI: Start converting MessageState into a class
svn-id: r38989
Diffstat (limited to 'engines/sci')
-rw-r--r-- | engines/sci/engine/kstring.cpp | 18 | ||||
-rw-r--r-- | engines/sci/engine/message.cpp | 38 | ||||
-rw-r--r-- | engines/sci/engine/message.h | 21 |
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 |