--- /dev/null
+/* $Id$
+
+This file is part of gldbg
+Copyright © 2009 Mikko Rasa, Mikkosoft Productions
+Distributed under the GPL
+*/
+
+#include <msp/io/print.h>
+#include "glprint.h"
+#include "tracer.h"
+
+using namespace Msp;
+
+Tracer::Tracer():
+ glprint(new GlPrint(0, 16384)),
+ out(0),
+ delete_out(true),
+ enabled(true)
+{ }
+
+Tracer::~Tracer()
+{
+ if(delete_out)
+ delete out;
+}
+
+void Tracer::set_output(IO::Base *o)
+{
+ if(delete_out)
+ delete out;
+ out = o;
+ delete_out = true;
+}
+
+void Tracer::set_output(IO::Base &o)
+{
+ set_output(&o);
+ delete_out = false;
+}
+
+void Tracer::enable()
+{
+ if(!out)
+ throw InvalidState("Output is not set");
+ enabled = true;
+}
+
+void Tracer::disable()
+{
+ enabled = false;
+}
+
+int Tracer::decode(const char *data, unsigned len)
+{
+ if(!enabled || !out)
+ return 0;
+ int ret = glprint->decode(data, len);
+ if(ret>=0)
+ IO::print(*out, "%s\n", glprint->get_buffer());
+ return ret;
+}