aboutsummaryrefslogtreecommitdiff
path: root/common/debugger.h
diff options
context:
space:
mode:
authorMax Horn2003-10-26 21:30:52 +0000
committerMax Horn2003-10-26 21:30:52 +0000
commita4d2a47820ad7ce26de1f52a9a11f6d466ed9610 (patch)
tree8561421e140950ed282475a0ffb58fe0c79b5edf /common/debugger.h
parentfbd6528e365babdd9e6d59089ef210f04a7eb19e (diff)
downloadscummvm-rg350-a4d2a47820ad7ce26de1f52a9a11f6d466ed9610.tar.gz
scummvm-rg350-a4d2a47820ad7ce26de1f52a9a11f6d466ed9610.tar.bz2
scummvm-rg350-a4d2a47820ad7ce26de1f52a9a11f6d466ed9610.zip
factor out common debugger code
svn-id: r10984
Diffstat (limited to 'common/debugger.h')
-rw-r--r--common/debugger.h98
1 files changed, 98 insertions, 0 deletions
diff --git a/common/debugger.h b/common/debugger.h
new file mode 100644
index 0000000000..f00910d8ea
--- /dev/null
+++ b/common/debugger.h
@@ -0,0 +1,98 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2002-2003 The ScummVM project
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * $Header$
+ */
+
+#ifndef COMMON_DEBUGGER_H
+#define COMMON_DEBUGGER_H
+
+class ConsoleDialog;
+class NewGui;
+
+namespace Common {
+
+// Choose between text console or ScummConsole
+#define USE_CONSOLE 1
+
+template <class T>
+class Debugger {
+public:
+ Debugger(NewGui *gui);
+ virtual ~Debugger();
+
+ int DebugPrintf(const char *format, ...);
+
+ virtual void onFrame();
+
+ virtual void attach(const char *entry = 0);
+ bool isAttached() const { return _isAttached; }
+
+protected:
+ typedef bool (T::*DebugProc)(int argc, const char **argv);
+
+ enum {
+ DVAR_INT,
+ DVAR_BOOL,
+ DVAR_INTARRAY,
+ DVAR_STRING
+ };
+
+ struct DVar {
+ char name[30];
+ void *variable;
+ int type, optional;
+ };
+
+ struct DCmd {
+ char name[30];
+ DebugProc function;
+ };
+
+ int _frame_countdown, _dvar_count, _dcmd_count;
+ DVar _dvars[256];
+ DCmd _dcmds[256];
+ bool _detach_now;
+
+private:
+ bool _isAttached;
+ char *_errStr;
+ bool _firstTime;
+ ConsoleDialog *_debuggerDialog;
+
+protected:
+ void detach();
+ void enter();
+
+ virtual void preEnter() = 0;
+ virtual void postEnter() = 0;
+
+ bool RunCommand(const char *input);
+ bool TabComplete(const char *input, char*& completion);
+
+ void DVar_Register(const char *varname, void *pointer, int type, int optional);
+ void DCmd_Register(const char *cmdname, DebugProc pointer);
+
+#if USE_CONSOLE
+ static bool debuggerInputCallback(ConsoleDialog *console, const char *input, void *refCon);
+ static bool debuggerCompletionCallback(ConsoleDialog *console, const char *input, char*& completion, void *refCon);
+#endif
+};
+
+} // End of namespace Common
+
+#endif