summaryrefslogtreecommitdiff
path: root/src/Printer.cc
diff options
context:
space:
mode:
authorPixel <pixel@nobis-crew.org>2011-10-03 14:48:05 -0700
committerPixel <pixel@nobis-crew.org>2011-10-03 14:48:05 -0700
commit342b273234405ab76dc159d2e402bfb1ddfa1d8f (patch)
treef10d6857960313d6fc3b0aaa325ed46b8ad481fb /src/Printer.cc
First commit - very basic features.
Diffstat (limited to 'src/Printer.cc')
-rw-r--r--src/Printer.cc60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/Printer.cc b/src/Printer.cc
new file mode 100644
index 0000000..fda9952
--- /dev/null
+++ b/src/Printer.cc
@@ -0,0 +1,60 @@
+#include "Printer.h"
+#include "Main.h"
+#include "Local.h"
+
+class PrinterLocal : public Balau::Local {
+ public:
+ PrinterLocal() { }
+ Balau::Printer * getGlobal() { return reinterpret_cast<Balau::Printer *>(Local::getGlobal()); }
+ Balau::Printer * get() { return reinterpret_cast<Balau::Printer *>(Local::get()); }
+ void setGlobal(Balau::Printer * printer) { Local::setGlobal(printer); }
+ void set(Balau::Printer * printer) { Local::set(printer); }
+} printerLocal;
+
+static const char * prefixes[] = {
+ "(DD) ",
+ "(II) ",
+ "(--) ",
+ "(WW) ",
+ "(EE) ",
+ "(AA) ",
+};
+
+Balau::Printer::Printer() : m_verbosity(M_STATUS | M_WARNING | M_ERROR) {
+ if (!printerLocal.getGlobal())
+ printerLocal.setGlobal(this);
+}
+
+Balau::Printer * Balau::Printer::getPrinter() { return printerLocal.get(); }
+
+void Balau::Printer::_log(uint32_t level, const char * fmt, va_list ap) {
+ if (!(level & m_verbosity))
+ return;
+
+ int l, i;
+
+ for (l = M_MAX, i = (sizeof(prefixes) / sizeof(*prefixes)) - 1; l; l >>= 1, i--)
+ if (l & level)
+ break;
+
+ print(prefixes[i]);
+ print(fmt, ap);
+ print("\n");
+}
+
+void Balau::Printer::_print(const char * fmt, va_list ap) {
+ vfprintf(stderr, fmt, ap);
+}
+
+class DefaultPrinter : public Balau::AtStart {
+ public:
+ DefaultPrinter() : AtStart(10) { }
+ protected:
+ virtual void doStart();
+};
+
+static DefaultPrinter defaultPrinter;
+
+void DefaultPrinter::doStart() {
+ new Balau::Printer();
+}