aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorEugene Sandulenko2013-07-22 23:38:11 +0300
committerEugene Sandulenko2013-09-06 14:51:04 +0300
commit4dc47c5c08d44766fe75e2e982f0cea05b8238aa (patch)
treefc91ba8293e49854fe02fa8900fd8b9946e4363f /engines
parent9d83eb1aeacf7bed6105875289a5960a06571035 (diff)
downloadscummvm-rg350-4dc47c5c08d44766fe75e2e982f0cea05b8238aa.tar.gz
scummvm-rg350-4dc47c5c08d44766fe75e2e982f0cea05b8238aa.tar.bz2
scummvm-rg350-4dc47c5c08d44766fe75e2e982f0cea05b8238aa.zip
FULLPIPE: More message handler-related functions
Diffstat (limited to 'engines')
-rw-r--r--engines/fullpipe/messagequeue.cpp136
-rw-r--r--engines/fullpipe/messagequeue.h8
2 files changed, 144 insertions, 0 deletions
diff --git a/engines/fullpipe/messagequeue.cpp b/engines/fullpipe/messagequeue.cpp
index 7688a6a129..9d2ec383fb 100644
--- a/engines/fullpipe/messagequeue.cpp
+++ b/engines/fullpipe/messagequeue.cpp
@@ -119,4 +119,140 @@ void updateMessageHandlerIndex(MessageHandler *msg, int offset) {
msg->index += offset;
}
+void addMessageHandler(int (*callback)(ExCommand *), int16 id) {
+ if (getMessageHandlerById(id))
+ return;
+
+ MessageHandler *curItem = g_fullpipe->_messageHandlers;
+
+ if (!curItem)
+ return;
+
+ int index = 0;
+ for (MessageHandler *i = g_fullpipe->_messageHandlers->nextItem; i; i = i->nextItem) {
+ curItem = i;
+ index++;
+ }
+
+ allocMessageHandler(curItem, id, callback, index);
+
+ if (curItem)
+ updateMessageHandlerIndex(curItem->nextItem->nextItem, 1);
+
+}
+
+MessageHandler *getMessageHandlerById(int16 id) {
+ MessageHandler *curItem = g_fullpipe->_messageHandlers;
+
+ if (!curItem)
+ return 0;
+
+ while (id != curItem->id) {
+ curItem = curItem->nextItem;
+
+ if (!curItem)
+ return 0;
+ }
+
+ return curItem;
+}
+
+bool allocMessageHandler(MessageHandler *where, int16 id, int (*callback)(ExCommand *), int index) {
+ MessageHandler *msg = new MessageHandler;
+
+ if (where) {
+ msg->nextItem = where->nextItem;
+ where->nextItem = msg;
+ msg->id = id;
+ msg->callback = callback;
+ msg->index = index;
+ } else {
+ msg->nextItem = 0;
+ msg->id = id;
+ msg->callback = callback;
+ msg->index = 0;
+
+ g_fullpipe->_messageHandlers = msg;
+ }
+
+ return true;
+}
+
+int getMessageHandlersCount() {
+ int result;
+ MessageHandler *curItem = g_fullpipe->_messageHandlers;
+
+ for (result = 0; curItem; result++)
+ curItem = curItem->nextItem;
+
+ return result;
+}
+
+bool addMessageHandlerByIndex(int (*callback)(ExCommand *), int index, int16 id) {
+ if (getMessageHandlerById(id))
+ return false;
+
+ if (index) {
+ MessageHandler *curItem = g_fullpipe->_messageHandlers;
+
+ for (int i = index - 1; i > 0; i--)
+ if (curItem)
+ curItem = curItem->nextItem;
+
+ bool res = allocMessageHandler(curItem, id, callback, index);
+
+ if (res)
+ updateMessageHandlerIndex(curItem->nextItem->nextItem, 1);
+
+ return res;
+ } else {
+ MessageHandler *newItem = new MessageHandler;
+
+ newItem->nextItem = g_fullpipe->_messageHandlers;
+ newItem->id = id;
+ newItem->callback = callback;
+ newItem->index = 0;
+
+ updateMessageHandlerIndex(g_fullpipe->_messageHandlers, 1);
+ g_fullpipe->_messageHandlers = newItem;
+
+ return true;
+ }
+}
+
+bool insertMessageHandler(int (*callback)(ExCommand *), int index, int16 id) {
+ if (getMessageHandlerById(id))
+ return false;
+
+ MessageHandler *curItem = g_fullpipe->_messageHandlers;
+
+ for (int i = index; i > 0; i--)
+ if (curItem)
+ curItem = curItem->nextItem;
+
+ bool res = allocMessageHandler(curItem, id, callback, index + 1);
+ if (curItem)
+ updateMessageHandlerIndex(curItem->nextItem->nextItem, 1);
+
+ return res;
+}
+
+void clearMessageHandlers() {
+ MessageHandler *curItem;
+ MessageHandler *nextItem;
+
+ curItem = g_fullpipe->_messageHandlers;
+ if (curItem) {
+ do {
+ nextItem = curItem->nextItem;
+
+ delete curItem;
+
+ curItem = nextItem;
+ } while (nextItem);
+
+ g_fullpipe->_messageHandlers = 0;
+ }
+}
+
} // End of namespace Fullpipe
diff --git a/engines/fullpipe/messagequeue.h b/engines/fullpipe/messagequeue.h
index bb8d4108e3..b47bf49049 100644
--- a/engines/fullpipe/messagequeue.h
+++ b/engines/fullpipe/messagequeue.h
@@ -72,6 +72,14 @@ struct MessageHandler {
bool removeMessageHandler(int16 id, int pos);
void updateMessageHandlerIndex(MessageHandler *msg, int offset);
+void addMessageHandler(int (*callback)(ExCommand *), int16 id);
+MessageHandler *getMessageHandlerById(int16 id);
+bool allocMessageHandler(MessageHandler *where, int16 id, int (*callback)(ExCommand *), int index);
+int getMessageHandlersCount();
+bool addMessageHandlerByIndex(int (*callback)(ExCommand *), int index, int16 id);
+bool insertMessageHandler(int (*callback)(ExCommand *), int index, int16 id);
+void clearMessageHandlers();
+
} // End of namespace Fullpipe