aboutsummaryrefslogtreecommitdiff
path: root/scumm/debugrl.cpp
diff options
context:
space:
mode:
authorMax Horn2002-08-21 16:07:07 +0000
committerMax Horn2002-08-21 16:07:07 +0000
commitce46866403fdcc479cf9d67e4d430409b15dadc3 (patch)
tree75ebfaa1ed13f549959d76d3ce101c3e66f5451b /scumm/debugrl.cpp
parent662256f25dbe43abf67077a804e225738765f009 (diff)
downloadscummvm-rg350-ce46866403fdcc479cf9d67e4d430409b15dadc3.tar.gz
scummvm-rg350-ce46866403fdcc479cf9d67e4d430409b15dadc3.tar.bz2
scummvm-rg350-ce46866403fdcc479cf9d67e4d430409b15dadc3.zip
Initial revision
svn-id: r4785
Diffstat (limited to 'scumm/debugrl.cpp')
-rw-r--r--scumm/debugrl.cpp87
1 files changed, 87 insertions, 0 deletions
diff --git a/scumm/debugrl.cpp b/scumm/debugrl.cpp
new file mode 100644
index 0000000000..8c9366a2f4
--- /dev/null
+++ b/scumm/debugrl.cpp
@@ -0,0 +1,87 @@
+#ifdef HAVE_READLINE
+
+#include "debugrl.h"
+
+// A lot of this was ripped straight from the readline fileman.c example.
+
+char *_debugger_commands[] = {
+ "help",
+ "quit",
+ "go",
+ "actor",
+ "scripts",
+ "exit",
+ (char *)NULL
+};
+
+
+// forwards decls
+char **scumm_debugger_completion(const char *text, int start, int end);
+char *scumm_debugger_command_generator(const char *text, int state);
+
+void initialize_readline()
+{
+ /* Allow conditional parsing of the ~/.inputrc file. */
+ rl_readline_name = "scummvm";
+
+ /* Tell the completer that we want a crack first. */
+ rl_attempted_completion_function = scumm_debugger_completion;
+}
+
+char **scumm_debugger_completion(const char *text, int start, int end)
+{
+
+ char **matches;
+
+ matches = (char **)NULL;
+
+ // If this word is at the start of the line, then it is a command
+ // to complete.
+ if (start == 0) {
+ matches = rl_completion_matches(text, scumm_debugger_command_generator);
+ } else {
+ // At some stage it'd be nice to have symbolic actor name completion
+ // or something similarly groovy. Not right now though.
+ }
+
+ // This just makes sure that readline doesn't try to use its default
+ // completer, which uses filenames in the current dir, if we can't find
+ // a match, since filenames don't have much use in the debuger :)
+ // There's probably a nice way to do this once, rather than every time.
+ rl_attempted_completion_over = 1;
+
+ return (matches);
+}
+
+
+/* Generator function for command completion. STATE lets us know whether
+ to start from scratch; without any state (i.e. STATE == 0), then we
+ start at the top of the list. */
+char *scumm_debugger_command_generator(const char *text, int state)
+{
+
+ static int list_index, len;
+ char *name;
+
+ /* If this is a new word to complete, initialize now. This includes
+ saving the length of TEXT for efficiency, and initializing the index
+ variable to 0. */
+ if (!state) {
+ list_index = 0;
+ len = strlen(text);
+ }
+
+ /* Return the next name which partially matches from the command list. */
+ while (name = _debugger_commands[list_index]) {
+ list_index++;
+
+ if (strncmp(name, text, len) == 0)
+ //return (dupstr(name));
+ return strdup(name);
+ }
+
+ /* If no names matched, then return NULL. */
+ return ((char *)NULL);
+}
+
+#endif /* HAVE_READLINE */