diff options
| author | Claudio Matsuoka | 2001-11-19 00:04:34 +0000 | 
|---|---|---|
| committer | Claudio Matsuoka | 2001-11-19 00:04:34 +0000 | 
| commit | 14d89432bbd4f3af9cc2f4041f20263c88756da3 (patch) | |
| tree | 93ad8bda22dbbaa0d489401d35f7b9828b5d61cf /debugrl.cpp | |
| parent | b9074d5dd1ae724a6d07ee0ebe66aefe1438f9cb (diff) | |
| download | scummvm-rg350-14d89432bbd4f3af9cc2f4041f20263c88756da3.tar.gz scummvm-rg350-14d89432bbd4f3af9cc2f4041f20263c88756da3.tar.bz2 scummvm-rg350-14d89432bbd4f3af9cc2f4041f20263c88756da3.zip | |
Merged Tom Dunstan's debugger readline patch. Define
HAVE_READLINE to enable it.
svn-id: r3500
Diffstat (limited to 'debugrl.cpp')
| -rw-r--r-- | debugrl.cpp | 86 | 
1 files changed, 86 insertions, 0 deletions
| diff --git a/debugrl.cpp b/debugrl.cpp new file mode 100644 index 0000000000..86d72327a0 --- /dev/null +++ b/debugrl.cpp @@ -0,0 +1,86 @@ +#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 */ | 
