Mercurial > hg > nnchat
annotate ui.c @ 504:60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
line handling and buffer drawing.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sat, 02 Jun 2012 22:00:25 +0300 |
parents | bac3f9af112c |
children | 8734a02a86ec |
rev | line source |
---|---|
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1 /* |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
2 * NNChat - Custom chat client for NewbieNudes.com chatrooms |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
3 * Written by Matti 'ccr' Hämäläinen |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
4 * (C) Copyright 2008-2012 Tecnic Software productions (TNSP) |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
5 */ |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
6 #include "util.h" |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
7 #include "ui.h" |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
8 |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
9 #define STATUS_YPOS 0 |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
10 |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
11 nn_window_t *chatWindows[SET_MAX_WINDOWS], |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
12 *currWin = NULL; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
13 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
14 BOOL cursesInit = FALSE; |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
15 int cursorVisible = ERR, |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
16 scrWidth, scrHeight; |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
17 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
18 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
19 static nn_window_t *nn_window_new(const char *id) |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
20 { |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
21 nn_window_t *res = th_calloc(1, sizeof(nn_window_t)); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
22 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
23 if (res == NULL) return NULL; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
24 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
25 res->data = th_ringbuf_new(NN_BACKBUF_LEN, th_free); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
26 if (res->data == NULL) |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
27 { |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
28 th_free(res); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
29 return NULL; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
30 } |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
31 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
32 res->id = th_strdup(id); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
33 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
34 return res; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
35 } |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
36 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
37 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
38 static void nn_window_free(nn_window_t *win) |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
39 { |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
40 if (win != NULL) |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
41 { |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
42 th_ringbuf_free(win->data); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
43 th_free(win->id); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
44 th_free(win); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
45 } |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
46 } |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
47 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
48 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
49 nn_window_t *nnwin_main_window() |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
50 { |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
51 return chatWindows[0]; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
52 } |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
53 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
54 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
55 nn_window_t *nnwin_get(const int index) |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
56 { |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
57 if (index >= 1 && index <= SET_MAX_WINDOWS) |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
58 return chatWindows[index - 1]; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
59 else |
495 | 60 return NULL; |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
61 } |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
62 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
63 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
64 BOOL nnwin_init(int delay) |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
65 { |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
66 // Sanity check the terminal size |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
67 if (LINES < 0 || LINES > 1000) LINES = 24; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
68 if (COLS < 0 || COLS > 1000) COLS = 80; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
69 |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
70 // Initialize (n)curses library and terminal settings |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
71 initscr(); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
72 raw(); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
73 keypad(stdscr, TRUE); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
74 noecho(); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
75 meta(stdscr, TRUE); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
76 timeout(delay); |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
77 scrollok(stdscr, FALSE); |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
78 cursorVisible = curs_set(1); |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
79 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
80 if (has_colors()) |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
81 { |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
82 start_color(); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
83 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
84 init_pair( 1, COLOR_RED, COLOR_BLACK); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
85 init_pair( 2, COLOR_GREEN, COLOR_BLACK); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
86 init_pair( 3, COLOR_YELLOW, COLOR_BLACK); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
87 init_pair( 4, COLOR_BLUE, COLOR_BLACK); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
88 init_pair( 5, COLOR_MAGENTA, COLOR_BLACK); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
89 init_pair( 6, COLOR_CYAN, COLOR_BLACK); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
90 init_pair( 7, COLOR_WHITE, COLOR_BLACK); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
91 init_pair( 8, COLOR_BLACK, COLOR_BLACK); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
92 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
93 init_pair(10, COLOR_BLACK, COLOR_RED); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
94 init_pair(11, COLOR_WHITE, COLOR_RED); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
95 init_pair(12, COLOR_GREEN, COLOR_RED); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
96 init_pair(13, COLOR_YELLOW, COLOR_RED); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
97 init_pair(14, COLOR_BLUE, COLOR_RED); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
98 init_pair(15, COLOR_MAGENTA, COLOR_RED); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
99 init_pair(16, COLOR_CYAN, COLOR_RED); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
100 } |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
101 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
102 cursesInit = TRUE; |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
103 nnwin_reset(); |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
104 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
105 #ifdef PDCURSES |
495 | 106 PDC_set_title("NNChat v" NN_VERSION); |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
107 #endif |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
108 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
109 memset(chatWindows, 0, sizeof(chatWindows)); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
110 chatWindows[0] = nn_window_new(NULL); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
111 currWin = chatWindows[0]; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
112 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
113 return TRUE; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
114 } |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
115 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
116 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
117 void nnwin_shutdown() |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
118 { |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
119 int i; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
120 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
121 for (i = 0; i < SET_MAX_WINDOWS; i++) |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
122 nn_window_free(chatWindows[i]); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
123 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
124 if (cursesInit) |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
125 { |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
126 if (cursorVisible != ERR) |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
127 curs_set(cursorVisible); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
128 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
129 endwin(); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
130 THMSG(1, "NCurses deinitialized.\n"); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
131 } |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
132 } |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
133 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
134 |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
135 void nnwin_reset(void) |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
136 { |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
137 getmaxyx(stdscr, scrHeight, scrWidth); |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
138 } |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
139 |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
140 |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
141 nn_window_t *nnwin_find(const char *id) |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
142 { |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
143 int i; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
144 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
145 for (i = 0; i < SET_MAX_WINDOWS; i++) |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
146 { |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
147 if (chatWindows[i] != NULL && |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
148 chatWindows[i]->id != NULL && |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
149 th_strcasecmp(id, chatWindows[i]->id) == 0) |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
150 return chatWindows[i]; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
151 } |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
152 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
153 return NULL; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
154 } |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
155 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
156 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
157 BOOL nnwin_open(const char *name, BOOL curwin) |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
158 { |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
159 int i; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
160 nn_window_t *res; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
161 if (name == NULL) |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
162 return FALSE; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
163 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
164 if ((res = nn_window_new(name)) == NULL) |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
165 return FALSE; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
166 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
167 for (i = 1; i < SET_MAX_WINDOWS; i++) |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
168 if (chatWindows[i] == NULL) |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
169 { |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
170 res->num = i; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
171 chatWindows[i] = res; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
172 if (curwin) |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
173 currWin = res; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
174 return TRUE; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
175 } |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
176 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
177 return FALSE; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
178 } |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
179 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
180 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
181 void nnwin_close(nn_window_t *win) |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
182 { |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
183 int i; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
184 if (win == NULL) return; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
185 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
186 for (i = 1; i < SET_MAX_WINDOWS; i++) |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
187 { |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
188 if (chatWindows[i] == win) |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
189 { |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
190 chatWindows[i] = NULL; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
191 nn_window_free(win); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
192 return; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
193 } |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
194 } |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
195 } |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
196 |
504
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
197 |
503
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
198 static BOOL nnwin_get_color(char const **s, int *col) |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
199 { |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
200 int val = 0; |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
201 |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
202 while (**s >= '0' && **s <= '9') |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
203 { |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
204 val *= 10; |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
205 val += (**s - '0'); |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
206 (*s)++; |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
207 } |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
208 if (**s != '½') |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
209 return FALSE; |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
210 |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
211 if (val < 9) |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
212 *col = A_DIM | COLOR_PAIR(val); |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
213 else if (val < 30) |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
214 *col = A_BOLD | COLOR_PAIR(val - 9); |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
215 |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
216 return TRUE; |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
217 } |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
218 |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
219 |
504
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
220 #define QPUTCH(ch) nnwin_putch(&(win->line->buf), &(win->line->bufsize), &(win->line->len), col, ch) |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
221 static BOOL nnwin_putch(int **buf, size_t *bufsize, size_t *len, int color, char ch) |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
222 { |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
223 if (*buf == NULL) |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
224 *bufsize = *len = 0; |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
225 |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
226 if (*buf == NULL || *len + 1 >= *bufsize) |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
227 { |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
228 *bufsize += TH_BUFGROW; |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
229 *buf = (int *) th_realloc(*buf, *bufsize * sizeof(int)); |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
230 if (*buf == NULL) |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
231 return FALSE; |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
232 } |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
233 |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
234 (*buf)[*len] = ((unsigned char) ch) | color; |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
235 (*len)++; |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
236 |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
237 return TRUE; |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
238 } |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
239 |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
240 |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
241 int nnwin_print(nn_window_t *win, const char *fmt) |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
242 { |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
243 const char *s = fmt; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
244 int col = 0; |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
245 |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
246 while (*s) |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
247 { |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
248 if (win->line == NULL) |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
249 { |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
250 win->line = th_calloc(1, sizeof(nn_line_t)); |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
251 if (win->line == NULL) |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
252 return -15; |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
253 } |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
254 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
255 if (*s == '½') |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
256 { |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
257 s++; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
258 if (*s == '½') |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
259 { |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
260 QPUTCH(*s); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
261 } |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
262 else |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
263 { |
503
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
264 if (!nnwin_get_color(&s, &col)) |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
265 return -1; |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
266 } |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
267 } |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
268 else if (*s == '\n') |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
269 { |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
270 th_ringbuf_add(win->data, win->line); |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
271 win->line = NULL; |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
272 win->dirty = TRUE; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
273 } |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
274 else if (*s != '\r') |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
275 { |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
276 QPUTCH((unsigned char) *s == 255 ? ' ' : *s); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
277 } |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
278 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
279 s++; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
280 } |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
281 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
282 return 0; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
283 } |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
284 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
285 |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
286 char *nnwin_prompt_requester(const char *info, BOOL allowEmpty) |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
287 { |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
288 char tmpBuf[512], *ptr; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
289 int curSave = curs_set(1); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
290 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
291 echo(); |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
292 waddstr(stdscr, info); |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
293 wgetnstr(stdscr, tmpBuf, sizeof(tmpBuf) - 1); |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
294 noecho(); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
295 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
296 if (curSave != ERR) |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
297 curs_set(curSave); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
298 |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
299 str_trim_right(tmpBuf); |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
300 ptr = str_trim_left(tmpBuf); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
301 |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
302 if (allowEmpty || ptr[0]) |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
303 return th_strdup(ptr); |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
304 else |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
305 return NULL; |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
306 } |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
307 |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
308 |
503
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
309 static void nnwin_print_str(WINDOW *win, const char *fmt, BOOL clip) |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
310 { |
503
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
311 const char *s = fmt; |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
312 int col = 0; |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
313 while (*s) |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
314 { |
504
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
315 if (clip && getcurx(win) >= scrWidth) |
503
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
316 return; |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
317 |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
318 if (*s == '½') |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
319 { |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
320 s++; |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
321 if (*s == '½') |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
322 { |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
323 waddch(win, ((unsigned char) *s) | col); |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
324 s++; |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
325 } |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
326 else |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
327 { |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
328 if (!nnwin_get_color(&s, &col)) |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
329 return; |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
330 } |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
331 } |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
332 else |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
333 { |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
334 waddch(win, ((unsigned char) *s) | col); |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
335 s++; |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
336 } |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
337 } |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
338 } |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
339 |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
340 |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
341 void nnwin_update(BOOL force, nn_editbuf_t *ebuf, char *username, int usercolor) |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
342 { |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
343 int sx, sy; |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
344 |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
345 // Save cursor position |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
346 getyx(stdscr, sy, sx); |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
347 |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
348 // Clear screen if forced or main or editbuf are dirty |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
349 if (force || (currWin != NULL && currWin->dirty) || (ebuf != NULL && ebuf->dirty)) |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
350 { |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
351 wattrset(stdscr, A_NORMAL); |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
352 wbkgdset(stdscr, COLOR_PAIR(0)); |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
353 werase(stdscr); |
503
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
354 force = TRUE; |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
355 } |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
356 |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
357 // Check if update is forced or if the window is dirty |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
358 if (currWin != NULL && (force || currWin->dirty)) |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
359 { |
503
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
360 int y, offs; |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
361 qringbuf_t *buf = currWin->data; |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
362 |
503
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
363 for (y = scrHeight - 4, offs = buf->size - 1 - currWin->pos; offs >= 0 && y > 0; offs--) |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
364 { |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
365 nn_line_t *line = buf->data[offs]; |
503
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
366 if (line != NULL) |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
367 { |
504
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
368 const int *s = line->buf; |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
369 size_t pos; |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
370 |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
371 y -= (line->len / scrWidth); |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
372 if (line->len % scrWidth != 0) |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
373 y -= 1; |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
374 |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
375 if (y < 0) |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
376 { |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
377 size_t r; |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
378 int x; |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
379 for (r = -y, x = 0, pos = 0; r && pos < line->len; pos++) |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
380 { |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
381 if (++x >= scrWidth) |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
382 { |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
383 x = 0; |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
384 r++; |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
385 } |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
386 } |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
387 y = 0; |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
388 } |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
389 |
503
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
390 wmove(stdscr, y, 0); |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
391 |
504
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
392 for (pos = 0; pos < line->len; pos++) |
60e04709ce0f
Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents:
503
diff
changeset
|
393 waddch(stdscr, s[pos]); |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
394 } |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
395 } |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
396 |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
397 currWin->dirty = FALSE; |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
398 } |
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
399 |
503
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
400 // Update statusline |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
401 { |
503
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
402 char tmpStamp[32], tmpStr[128]; |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
403 int i; |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
404 |
503
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
405 str_get_timestamp(tmpStamp, sizeof(tmpStamp), "%H:%M:%S"); |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
406 |
503
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
407 #if 0 |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
408 snprintf(tmpStr, sizeof(tmpStr), |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
409 " ½10½%s½13½ | ½16½%s½13½ | ½11½#%06x½13½ | WIN: %d: %s / %d | ½11½", |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
410 tmpStamp, |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
411 username, |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
412 usercolor, |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
413 currWin->num + 1, |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
414 currWin->id != NULL ? currWin->id : "MAIN", |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
415 currWin->pos); |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
416 #else |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
417 snprintf(tmpStr, sizeof(tmpStr), |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
418 " %s | %s | #%06x | WIN: %d: %s / %d | ", |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
419 tmpStamp, |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
420 username, |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
421 usercolor, |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
422 currWin->num + 1, |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
423 currWin->id != NULL ? currWin->id : "MAIN", |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
424 currWin->pos); |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
425 #endif |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
426 |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
427 wmove(stdscr, scrHeight - 4, 0); |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
428 wbkgdset(stdscr, COLOR_PAIR(10)); |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
429 wclrtoeol(stdscr); |
503
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
430 nnwin_print_str(stdscr, tmpStr, TRUE); |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
431 |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
432 for (i = 0; i < SET_MAX_WINDOWS; i++) |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
433 { |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
434 if (chatWindows[i] != NULL && chatWindows[i]->dirty) |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
435 { |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
436 snprintf(tmpStr, sizeof(tmpStr), "%d ", i + 1); |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
437 waddstr(stdscr, tmpStr); |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
438 } |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
439 } |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
440 } |
503
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
441 |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
442 // Restore cursor position |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
443 wmove(stdscr, sy, sx); |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
444 |
503
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
445 // Update editbuf if needed |
bac3f9af112c
More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents:
501
diff
changeset
|
446 if (ebuf != NULL && (force || ebuf->dirty)) |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
447 { |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
448 int yoffs = ebuf->pos / scrWidth, |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
449 xoffs = ebuf->pos % scrWidth; |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
450 char *tmp; |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
451 |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
452 ebuf->dirty = FALSE; |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
453 ebuf->data[ebuf->len] = 0; |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
454 tmp = nn_username_decode(th_strdup(ebuf->data)); |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
455 |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
456 wmove(stdscr, scrHeight - 3, 0); |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
457 wattrset(stdscr, A_NORMAL); |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
458 wbkgdset(stdscr, COLOR_PAIR(0)); |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
459 waddnstr(stdscr, tmp, ebuf->len); |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
460 wmove(stdscr, scrHeight - 3 + yoffs, xoffs); |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
461 |
501
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
462 th_free(tmp); |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
463 } |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
464 |
ca88945d8eda
Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents:
496
diff
changeset
|
465 wrefresh(stdscr); |
466
796508f828f6
Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
466 } |