diff options
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)); +} + +} + +} + |