about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2015-04-22 20:44:30 -0700
committerKartik K. Agaram <vc@akkartik.com>2015-04-22 20:44:30 -0700
commit547ec78bf27e37e7a1552d99185200fef460bb38 (patch)
tree941749ccd9e491a538b1a7d44eb7527672a72f66
parent8e7827dfcf15ccbbade3e5d58c340dd5f72b7208 (diff)
downloadmu-547ec78bf27e37e7a1552d99185200fef460bb38.tar.gz
1145 - dump termbox's 256-color support
-rw-r--r--cpp/termbox/output.inl40
-rw-r--r--cpp/termbox/termbox.c92
2 files changed, 14 insertions, 118 deletions
diff --git a/cpp/termbox/output.inl b/cpp/termbox/output.inl
index 2018d298..45be181b 100644
--- a/cpp/termbox/output.inl
+++ b/cpp/termbox/output.inl
@@ -1,43 +1,3 @@
-/* Sets the termbox output mode. Termbox has three output options:
- * 1. TB_OUTPUT_NORMAL     => [1..8]
- *    This mode provides 8 different colors:
- *      black, red, green, yellow, blue, magenta, cyan, white
- *    Shortcut: TB_BLACK, TB_RED, ...
- *    Attributes: TB_BOLD, TB_UNDERLINE, TB_REVERSE
- *
- *    Example usage:
- *        tb_change_cell(x, y, '@', TB_BLACK | TB_BOLD, TB_RED);
- *
- * 2. TB_OUTPUT_256        => [0..256]
- *    In this mode you can leverage the 256 terminal mode:
- *    0x00 - 0x07: the 8 colors as in TB_OUTPUT_NORMAL
- *    0x08 - 0x0f: TB_* | TB_BOLD
- *    0x10 - 0xe7: 216 different colors
- *    0xe8 - 0xff: 24 different shades of grey
- *
- *    Example usage:
- *        tb_change_cell(x, y, '@', 184, 240);
- *        tb_change_cell(x, y, '@', 0xb8, 0xf0);
- *
- * 2. TB_OUTPUT_216        => [0..216]
- *    This mode supports the 3rd range of the 256 mode only.
- *    But you don't need to provide an offset.
- *
- * 3. TB_OUTPUT_GRAYSCALE  => [0..23]
- *    This mode supports the 4th range of the 256 mode only.
- *    But you dont need to provide an offset.
- *
- * Execute build/src/demo/output to see its impact on your terminal.
- *
- * If 'mode' is TB_OUTPUT_CURRENT, it returns the current output mode.
- */
-int tb_select_output_mode(int mode);
-#define TB_OUTPUT_CURRENT   0
-#define TB_OUTPUT_NORMAL    1
-#define TB_OUTPUT_256       2
-#define TB_OUTPUT_216       3
-#define TB_OUTPUT_GRAYSCALE 4
-
 enum {
   T_ENTER_CA,
   T_EXIT_CA,
diff --git a/cpp/termbox/termbox.c b/cpp/termbox/termbox.c
index 3ecc0b4b..6d1b7b7d 100644
--- a/cpp/termbox/termbox.c
+++ b/cpp/termbox/termbox.c
@@ -40,8 +40,6 @@ static struct bytebuffer input_buffer;
 static int termw = -1;
 static int termh = -1;
 
-static int outputmode = TB_OUTPUT_NORMAL;
-
 static int inout;
 static int winch_fds[2];
 
@@ -268,13 +266,6 @@ void tb_clear(void)
   cellbuf_clear(&back_buffer);
 }
 
-int tb_select_output_mode(int mode)
-{
-  if (mode)
-    outputmode = mode;
-  return outputmode;
-}
-
 void tb_set_clear_attributes(uint16_t fg, uint16_t bg)
 {
   foreground = fg;
@@ -310,19 +301,15 @@ static void write_cursor(int x, int y) {
   WRITE_LITERAL("H");
 }
 
-// can only be called in NORMAL output mode
 static void write_sgr_fg(uint16_t fg) {
   char buf[32];
-
   WRITE_LITERAL("\033[3");
   WRITE_INT(fg-1);
   WRITE_LITERAL("m");
 }
 
-// can only be called in NORMAL output mode
 static void write_sgr_bg(uint16_t bg) {
   char buf[32];
-
   WRITE_LITERAL("\033[4");
   WRITE_INT(bg-1);
   WRITE_LITERAL("m");
@@ -330,26 +317,11 @@ static void write_sgr_bg(uint16_t bg) {
 
 static void write_sgr(uint16_t fg, uint16_t bg) {
   char buf[32];
-
-  switch (outputmode) {
-  case TB_OUTPUT_256:
-  case TB_OUTPUT_216:
-  case TB_OUTPUT_GRAYSCALE:
-    WRITE_LITERAL("\033[38;5;");
-    WRITE_INT(fg);
-    WRITE_LITERAL("m");
-    WRITE_LITERAL("\033[48;5;");
-    WRITE_INT(bg);
-    WRITE_LITERAL("m");
-    break;
-  case TB_OUTPUT_NORMAL:
-  default:
-    WRITE_LITERAL("\033[3");
-    WRITE_INT(fg-1);
-    WRITE_LITERAL(";4");
-    WRITE_INT(bg-1);
-    WRITE_LITERAL("m");
-  }
+  WRITE_LITERAL("\033[3");
+  WRITE_INT(fg-1);
+  WRITE_LITERAL(";4");
+  WRITE_INT(bg-1);
+  WRITE_LITERAL("m");
 }
 
 static void cellbuf_init(struct cellbuf *buf, int width, int height)
@@ -431,34 +403,8 @@ static void send_attr(uint16_t fg, uint16_t bg)
   if (fg != lastfg || bg != lastbg) {
     bytebuffer_puts(&output_buffer, funcs[T_SGR0]);
 
-    uint16_t fgcol;
-    uint16_t bgcol;
-
-    switch (outputmode) {
-    case TB_OUTPUT_256:
-      fgcol = fg & 0xFF;
-      bgcol = bg & 0xFF;
-      break;
-
-    case TB_OUTPUT_216:
-      fgcol = fg & 0xFF; if (fgcol > 215) fgcol = 7;
-      bgcol = bg & 0xFF; if (bgcol > 215) bgcol = 0;
-      fgcol += 0x10;
-      bgcol += 0x10;
-      break;
-
-    case TB_OUTPUT_GRAYSCALE:
-      fgcol = fg & 0xFF; if (fgcol > 23) fgcol = 23;
-      bgcol = bg & 0xFF; if (bgcol > 23) bgcol = 0;
-      fgcol += 0xe8;
-      bgcol += 0xe8;
-      break;
-
-    case TB_OUTPUT_NORMAL:
-    default:
-      fgcol = fg & 0x0F;
-      bgcol = bg & 0x0F;
-    }
+    uint16_t fgcol = fg & 0x0F;
+    uint16_t bgcol = bg & 0x0F;
 
     if (fg & TB_BOLD)
       bytebuffer_puts(&output_buffer, funcs[T_BOLD]);
@@ -469,23 +415,13 @@ static void send_attr(uint16_t fg, uint16_t bg)
     if ((fg & TB_REVERSE) || (bg & TB_REVERSE))
       bytebuffer_puts(&output_buffer, funcs[T_REVERSE]);
 
-    switch (outputmode) {
-    case TB_OUTPUT_256:
-    case TB_OUTPUT_216:
-    case TB_OUTPUT_GRAYSCALE:
-      write_sgr(fgcol, bgcol);
-      break;
-
-    case TB_OUTPUT_NORMAL:
-    default:
-      if (fgcol != TB_DEFAULT) {
-        if (bgcol != TB_DEFAULT)
-          write_sgr(fgcol, bgcol);
-        else
-          write_sgr_fg(fgcol);
-      } else if (bgcol != TB_DEFAULT) {
-        write_sgr_bg(bgcol);
-      }
+    if (fgcol != TB_DEFAULT) {
+      if (bgcol != TB_DEFAULT)
+        write_sgr(fgcol, bgcol);
+      else
+        write_sgr_fg(fgcol);
+    } else if (bgcol != TB_DEFAULT) {
+      write_sgr_bg(bgcol);
     }
 
     lastfg = fg;