summaryrefslogtreecommitdiff
path: root/library/Console-linux.cpp
diff options
context:
space:
mode:
authorPetr Mrázek2011-06-22 08:14:21 +0200
committerPetr Mrázek2011-06-22 08:14:21 +0200
commitf8cdd95b092c2d59b2fae48d6368c85a3af8cdee (patch)
treed35f4e0ab9db8464f143ce60783330d7ad034179 /library/Console-linux.cpp
parentb41ab40bb6eb44d00c2eca64a6ca54168e446d5f (diff)
downloaddfhack-f8cdd95b092c2d59b2fae48d6368c85a3af8cdee.tar.gz
dfhack-f8cdd95b092c2d59b2fae48d6368c85a3af8cdee.tar.bz2
dfhack-f8cdd95b092c2d59b2fae48d6368c85a3af8cdee.tar.xz
Console revamp - linux part.
Diffstat (limited to 'library/Console-linux.cpp')
-rw-r--r--library/Console-linux.cpp119
1 files changed, 119 insertions, 0 deletions
diff --git a/library/Console-linux.cpp b/library/Console-linux.cpp
new file mode 100644
index 00000000..28d8d53c
--- /dev/null
+++ b/library/Console-linux.cpp
@@ -0,0 +1,119 @@
+/*
+https://github.com/peterix/dfhack
+Copyright (c) 2009-2011 Petr Mrázek (peterix@gmail.com)
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any
+purpose, including commercial applications, and to alter it and
+redistribute it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must
+not claim that you wrote the original software. If you use this
+software in a product, an acknowledgment in the product documentation
+would be appreciated but is not required.
+
+2. Altered source versions must be plainly marked as such, and
+must not be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source
+distribution.
+*/
+
+#include "dfhack/Console.h"
+#include <cstdio>
+#include <cstdlib>
+#include <sstream>
+using namespace DFHack;
+
+duthomhas::stdiostream dfout;
+FILE * dfout_C = 0;
+duthomhas::stdiobuf * stream_o = 0;
+
+// FIXME: prime candidate for being a singleton...
+Console::Console()
+{
+ // make our own weird streams so our IO isn't redirected
+ dfout_C = fopen("/dev/tty", "w");
+ stream_o = new duthomhas::stdiobuf(dfout_C);
+ dfout.rdbuf(stream_o);
+ std::cin.tie(&dfout);
+ clear();
+ // result is a terminal controlled by the parasitic code!
+}
+Console::~Console()
+{
+
+}
+void Console::clear()
+{
+ dfout << "\033c";
+ dfout << "\033[3J\033[H";
+}
+void Console::gotoxy(int x, int y)
+{
+ std::ostringstream oss;
+ oss << "\033[" << y << ";" << x << "H";
+ dfout << oss.str();
+}
+
+const char * ANSI_CLS = "\033[2J";
+const char * ANSI_BLACK = "\033[22;30m";
+const char * ANSI_RED = "\033[22;31m";
+const char * ANSI_GREEN = "\033[22;32m";
+const char * ANSI_BROWN = "\033[22;33m";
+const char * ANSI_BLUE = "\033[22;34m";
+const char * ANSI_MAGENTA = "\033[22;35m";
+const char * ANSI_CYAN = "\033[22;36m";
+const char * ANSI_GREY = "\033[22;37m";
+const char * ANSI_DARKGREY = "\033[01;30m";
+const char * ANSI_LIGHTRED = "\033[01;31m";
+const char * ANSI_LIGHTGREEN = "\033[01;32m";
+const char * ANSI_YELLOW = "\033[01;33m";
+const char * ANSI_LIGHTBLUE = "\033[01;34m";
+const char * ANSI_LIGHTMAGENTA = "\033[01;35m";
+const char * ANSI_LIGHTCYAN = "\033[01;36m";
+const char * ANSI_WHITE = "\033[01;37m";
+
+const char * getANSIColor(const int c)
+{
+ switch (c)
+ {
+ case 0 : return ANSI_BLACK;
+ case 1 : return ANSI_BLUE; // non-ANSI
+ case 2 : return ANSI_GREEN;
+ case 3 : return ANSI_CYAN; // non-ANSI
+ case 4 : return ANSI_RED; // non-ANSI
+ case 5 : return ANSI_MAGENTA;
+ case 6 : return ANSI_BROWN;
+ case 7 : return ANSI_GREY;
+ case 8 : return ANSI_DARKGREY;
+ case 9 : return ANSI_LIGHTBLUE; // non-ANSI
+ case 10: return ANSI_LIGHTGREEN;
+ case 11: return ANSI_LIGHTCYAN; // non-ANSI;
+ case 12: return ANSI_LIGHTRED; // non-ANSI;
+ case 13: return ANSI_LIGHTMAGENTA;
+ case 14: return ANSI_YELLOW; // non-ANSI
+ case 15: return ANSI_WHITE;
+ default: return "";
+ }
+}
+
+void Console::color(int index)
+{
+ dfout << getANSIColor(index);
+}
+
+void Console::cursor(bool enable)
+{
+ if(enable)
+ {
+ dfout <<"\033[?25h";
+ }
+ else
+ {
+ dfout <<"\033[?25l";
+ }
+} \ No newline at end of file