summaryrefslogtreecommitdiffstats
path: root/kxsldbg/kxsldbgpart/libxsldbg/xsldbgthread.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kxsldbg/kxsldbgpart/libxsldbg/xsldbgthread.cpp')
-rw-r--r--kxsldbg/kxsldbgpart/libxsldbg/xsldbgthread.cpp184
1 files changed, 184 insertions, 0 deletions
diff --git a/kxsldbg/kxsldbgpart/libxsldbg/xsldbgthread.cpp b/kxsldbg/kxsldbgpart/libxsldbg/xsldbgthread.cpp
new file mode 100644
index 00000000..ecb94052
--- /dev/null
+++ b/kxsldbg/kxsldbgpart/libxsldbg/xsldbgthread.cpp
@@ -0,0 +1,184 @@
+
+/***************************************************************************
+ xsldbgthread.c - basic thread support
+ -------------------
+ begin : Thu Dec 20 2001
+ copyright : (C) 2001 by Keith Isdale
+ email : k_isdale@tpg.com.au
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+
+#include "xsldbg.h"
+#include "breakpoint.h"
+#include "options.h"
+
+#include "xsldbgmsg.h"
+#include "xsldbgthread.h"
+
+static void (*cleanupFuncPtr)(void) = 0;
+static int threadStatus = XSLDBG_MSG_THREAD_NOTUSED;
+static int inputStatus = XSLDBG_MSG_AWAITING_INPUT;
+
+/* is xsldbg ready for input from the application */
+static int inputReady = 0;
+
+/* Is the application ready for a notification message */
+static int appReady = 0;
+
+static notifyMessageListPtr notifyList;
+
+arrayListPtr msgList = NULL;
+
+int
+getAppReady(void)
+{
+ return appReady;
+}
+
+void
+setAppReady(int ready)
+{
+ appReady = ready;
+}
+
+
+/* the compiler will optimize this function to inline and to keep variable private*/
+int
+getInputStatus(void)
+{
+ return inputStatus;
+}
+
+void
+setInputStatus(XsldbgMessageEnum type)
+{
+ switch (type) {
+ case XSLDBG_MSG_AWAITING_INPUT: /* Waiting for user input */
+ case XSLDBG_MSG_READ_INPUT: /* Read user input */
+ case XSLDBG_MSG_PROCESSING_INPUT: /* Processing user's request */
+ inputStatus = type;
+ break;
+
+ default:
+ printf("Invalid input status %d\n", type);
+ }
+}
+
+
+/* the compiler will optimize this function to inline and to keep variable private*/
+int
+getThreadStatus(void)
+{
+ return threadStatus;
+}
+
+/* reset the status to @p type */
+void
+setThreadStatus(XsldbgMessageEnum type)
+{
+ switch (type) {
+ case XSLDBG_MSG_THREAD_NOTUSED:
+ case XSLDBG_MSG_THREAD_INIT:
+ case XSLDBG_MSG_THREAD_RUN:
+ threadStatus = type;
+ break;
+
+ case XSLDBG_MSG_THREAD_STOP:
+ case XSLDBG_MSG_THREAD_DEAD:
+ xslDebugStatus = DEBUG_QUIT;
+ threadStatus = type;
+ break;
+
+ default:
+ printf("Invalid thread status %d\n", type);
+ }
+}
+
+
+/* Is input ready yet */
+int
+getInputReady(void)
+{
+ return inputReady;
+}
+
+/* set/clear flag that indicates if input is ready*/
+void
+setInputReady(int value)
+{
+ inputReady = value;
+}
+
+
+
+int
+notifyListStart(XsldbgMessageEnum type)
+{
+ int result = 0;
+
+ switch (type) {
+ case XSLDBG_MSG_INTOPTION_CHANGE:
+ case XSLDBG_MSG_STRINGOPTION_CHANGE:
+ msgList =
+ arrayListNew(10, (freeItemFunc) optionsParamItemFree);
+ break;
+
+ default:
+ msgList = arrayListNew(10, NULL);
+ }
+
+ notifyList =
+ (notifyMessageListPtr) xmlMalloc(sizeof(notifyMessageList));
+ if (notifyList && msgList) {
+ notifyList->type = type;
+ notifyList->list = msgList;
+ result = 1;
+ }
+
+ return result;
+}
+
+int
+notifyListQueue(const void *data)
+{
+ int result = 0;
+
+ if (msgList) {
+ arrayListAdd(msgList, (void *) data);
+ result = 1;
+ }
+ return result;
+}
+
+
+int
+notifyListSend(void)
+{
+ int result = 0;
+
+ if (notifyList && msgList) {
+ notifyXsldbgApp(XSLDBG_MSG_LIST, notifyList);
+ result = 1;
+ }
+ return result;
+}
+
+void xsldbgSetThreadCleanupFunc(void (*cleanupFunc)(void))
+{
+ cleanupFuncPtr = cleanupFunc;
+}
+
+void xsldbgThreadCleanup(void)
+{
+ if (cleanupFuncPtr != 0)
+ (cleanupFuncPtr)();
+}