diff options
author | Stijn Buys <ingar@osirion.org> | 2008-02-03 01:43:03 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2008-02-03 01:43:03 +0000 |
commit | b4973888aeaea2dde6058bc06c3f6631349e7f3c (patch) | |
tree | 010de10692b330d7634ad3090fb94d14c101f484 /src/core/commandbuffer.cc | |
parent | 67f8a7a783e550cab8e6a77d997b31815ee8cd7e (diff) |
command buffer handling
engine function parsing
buffered client console
Diffstat (limited to 'src/core/commandbuffer.cc')
-rw-r--r-- | src/core/commandbuffer.cc | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/core/commandbuffer.cc b/src/core/commandbuffer.cc new file mode 100644 index 0000000..23e8a8d --- /dev/null +++ b/src/core/commandbuffer.cc @@ -0,0 +1,56 @@ +/* + core/commandbuffer.cc + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 +*/ + +#include "core/commandbuffer.h" +#include "sys/sys.h" + +// C++ headers +#include <string> +#include <sstream> + +namespace core { + +std::stringstream cmd(std::stringstream::in | std::stringstream::out); + +namespace commandbuffer { + +void exec(const char *text) { + std::stringstream cmdstream(text); + std::string cmdname; + + cmdstream >> cmdname; + + func::Func f = func::find(cmdname); + + if (f) { + f(cmdstream); + return; + } + + con_print << "unknown command '" << cmdname << "'" << std::endl; +} + +void execute() { + if (core::cmd.eof()) + return; + + char line[MAXCMDSIZE]; + while(core::cmd.getline(line, MAXCMDSIZE-1)) { + exec(line); + } + + cmd.clear(); +} + +void clear() { + char line[MAXCMDSIZE]; + while(core::cmd.getline(line, MAXCMDSIZE-1)); +} + +} + +} + |