Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2008-02-03 01:43:03 +0000
committerStijn Buys <ingar@osirion.org>2008-02-03 01:43:03 +0000
commitb4973888aeaea2dde6058bc06c3f6631349e7f3c (patch)
tree010de10692b330d7634ad3090fb94d14c101f484 /src/core/commandbuffer.cc
parent67f8a7a783e550cab8e6a77d997b31815ee8cd7e (diff)
command buffer handling
engine function parsing buffered client console
Diffstat (limited to 'src/core/commandbuffer.cc')
-rw-r--r--src/core/commandbuffer.cc56
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));
+}
+
+}
+
+}
+