summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ui.c101
1 files changed, 54 insertions, 47 deletions
diff --git a/ui.c b/ui.c
index 5a7d35c..5091431 100644
--- a/ui.c
+++ b/ui.c
@@ -29,27 +29,50 @@
#include "chat.h"
+#define MIN(a, b) ((a) < (b) ? (a) : (b))
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+
+#define CTRL(c) ((c) & 037)
+
#ifndef A_ITALIC
#define A_ITALIC A_NORMAL
#endif
-#define CTRL(c) ((c) & 037)
+static void colorInit(void) {
+ start_color();
+ use_default_colors();
+ if (COLORS >= 16) {
+ for (short pair = 0; pair < 0xFF; ++pair) {
+ if (pair < 0x10) {
+ init_pair(1 + pair, pair, -1);
+ } else {
+ init_pair(1 + pair, pair & 0x0F, (pair & 0xF0) >> 4);
+ }
+ }
+ } else {
+ for (short pair = 0; pair < 077; ++pair) {
+ if (pair < 010) {
+ init_pair(1 + pair, pair, -1);
+ } else {
+ init_pair(1 + pair, pair & 007, (pair & 070) >> 3);
+ }
+ }
+ }
+}
-#define MIN(a, b) ((a) < (b) ? (a) : (b))
-#define MAX(a, b) ((a) > (b) ? (a) : (b))
+static attr_t attr8(short pair) {
+ if (COLORS >= 16 || pair < 0) return A_NORMAL;
+ return (pair & 0x08) ? A_BOLD : A_NORMAL;
+}
+static short pair8(short pair) {
+ if (COLORS >= 16 || pair < 0) return pair;
+ return (pair & 0x70) >> 1 | (pair & 0x07);
+}
static const int TOPIC_COLS = 512;
static const int INPUT_COLS = 512;
static const int LOG_LINES = 100;
-static struct {
- WINDOW *topic;
- WINDOW *log;
- WINDOW *input;
- int scroll;
- size_t cursor;
-} ui;
-
static int lastLine(void) {
return LINES - 1;
}
@@ -60,32 +83,21 @@ static int logHeight(void) {
return LINES - 4;
}
+static struct {
+ WINDOW *topic;
+ WINDOW *log;
+ WINDOW *input;
+ int scroll;
+ size_t cursor;
+} ui;
+
void uiInit(void) {
setlocale(LC_CTYPE, "");
initscr();
cbreak();
noecho();
- start_color();
- use_default_colors();
-
- if (COLORS >= 16) {
- for (short pair = 0; pair < 0xFF; ++pair) {
- if (pair < 0x10) {
- init_pair(1 + pair, pair, -1);
- } else {
- init_pair(1 + pair, pair & 0x0F, (pair & 0xF0) >> 4);
- }
- }
- } else {
- for (short pair = 0; pair < 077; ++pair) {
- if (pair < 010) {
- init_pair(1 + pair, pair, -1);
- } else {
- init_pair(1 + pair, pair & 007, (pair & 070) >> 3);
- }
- }
- }
+ colorInit();
ui.topic = newpad(2, TOPIC_COLS);
mvwhline(ui.topic, 1, 0, ACS_HLINE, TOPIC_COLS);
@@ -139,7 +151,11 @@ void uiDraw(void) {
doupdate();
}
-static const short MIRC_COLORS[16] = {
+static void uiRedraw(void) {
+ clearok(curscr, true);
+}
+
+static const short IRC_COLORS[16] = {
8 + COLOR_WHITE, // white
0 + COLOR_BLACK, // black
0 + COLOR_BLUE, // blue
@@ -175,22 +191,13 @@ static const char *parseColor(short *pair, const char *str) {
if (bgLen) str = &str[1 + bgLen];
if (*pair == -1) *pair = 0;
- *pair = (*pair & 0xF0) | MIRC_COLORS[fg & 0x0F];
- if (bgLen) *pair = (*pair & 0x0F) | (MIRC_COLORS[bg & 0x0F] << 4);
+ *pair = (*pair & 0xF0) | IRC_COLORS[fg & 0x0F];
+ if (bgLen) *pair = (*pair & 0x0F) | (IRC_COLORS[bg & 0x0F] << 4);
return str;
}
-static attr_t attr8(short pair) {
- if (COLORS >= 16 || pair < 0) return A_NORMAL;
- return (pair & 0x08) ? A_BOLD : A_NORMAL;
-}
-static short pair8(short pair) {
- if (COLORS >= 16 || pair < 0) return pair;
- return (pair & 0x70) >> 1 | (pair & 0x07);
-}
-
-static void uiAdd(WINDOW *win, const char *str) {
+static void addIRC(WINDOW *win, const char *str) {
attr_t attr = A_NORMAL;
short pair = -1;
for (;;) {
@@ -211,13 +218,13 @@ static void uiAdd(WINDOW *win, const char *str) {
void uiTopic(const char *topic) {
wmove(ui.topic, 0, 0);
+ addIRC(ui.topic, topic);
wclrtoeol(ui.topic);
- uiAdd(ui.topic, topic);
}
void uiLog(const char *line) {
waddch(ui.log, '\n');
- uiAdd(ui.log, line);
+ addIRC(ui.log, line);
}
void uiFmt(const char *format, ...) {
@@ -309,7 +316,7 @@ static void enter(void) {
static void keyChar(wint_t ch) {
switch (ch) {
- break; case CTRL('L'): clearok(curscr, true);
+ break; case CTRL('L'): uiRedraw();
break; case CTRL('B'): moveLeft();
break; case CTRL('F'): moveRight();
break; case CTRL('A'): moveHome();