annotate ui.c @ 576:414d11df07ce

Gracefully handle error situations when the main UI has not yet been initialized properly.
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 30 Dec 2012 08:12:38 +0200
parents 3ae357fd34bb
children 97a49a6cc959
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
466
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
10 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
11 *currWin = NULL;
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
12
571
3ae357fd34bb Rename quit-related internal variables.
Matti Hamalainen <ccr@tnsp.org>
parents: 568
diff changeset
13 BOOL appCursesInit = FALSE, appQuitFlag = FALSE;
501
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
14 int cursorVisible = ERR,
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
15 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
16
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
17
507
e644d373afb9 Fix a memory leak.
Matti Hamalainen <ccr@tnsp.org>
parents: 506
diff changeset
18 static void nn_line_free(void *ptr)
e644d373afb9 Fix a memory leak.
Matti Hamalainen <ccr@tnsp.org>
parents: 506
diff changeset
19 {
e644d373afb9 Fix a memory leak.
Matti Hamalainen <ccr@tnsp.org>
parents: 506
diff changeset
20 nn_line_t *line = (nn_line_t *) ptr;
e644d373afb9 Fix a memory leak.
Matti Hamalainen <ccr@tnsp.org>
parents: 506
diff changeset
21 if (line != NULL)
e644d373afb9 Fix a memory leak.
Matti Hamalainen <ccr@tnsp.org>
parents: 506
diff changeset
22 {
e644d373afb9 Fix a memory leak.
Matti Hamalainen <ccr@tnsp.org>
parents: 506
diff changeset
23 th_free(line->buf);
e644d373afb9 Fix a memory leak.
Matti Hamalainen <ccr@tnsp.org>
parents: 506
diff changeset
24 th_free(line);
e644d373afb9 Fix a memory leak.
Matti Hamalainen <ccr@tnsp.org>
parents: 506
diff changeset
25 }
e644d373afb9 Fix a memory leak.
Matti Hamalainen <ccr@tnsp.org>
parents: 506
diff changeset
26 }
e644d373afb9 Fix a memory leak.
Matti Hamalainen <ccr@tnsp.org>
parents: 506
diff changeset
27
e644d373afb9 Fix a memory leak.
Matti Hamalainen <ccr@tnsp.org>
parents: 506
diff changeset
28
466
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
29 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
30 {
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
31 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
32
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
33 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
34
507
e644d373afb9 Fix a memory leak.
Matti Hamalainen <ccr@tnsp.org>
parents: 506
diff changeset
35 res->data = th_ringbuf_new(NN_BACKBUF_LEN, nn_line_free);
466
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
36 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
37 {
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
38 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
39 return NULL;
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
40 }
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 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
43
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
44 return res;
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 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
49 {
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
50 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
51 {
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
52 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
53 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
54 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
55 }
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
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
58
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
59 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
60 {
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
61 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
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
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
65 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
66 {
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
67 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
68 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
69 else
495
f8fc6d18bcdb Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 493
diff changeset
70 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
71 }
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
72
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
73
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
74 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
75 {
501
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
76 // 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
77 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
78 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
79
501
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
80 // 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
81 initscr();
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
82 raw();
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
83 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
84 noecho();
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
85 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
86 timeout(delay);
501
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
87 scrollok(stdscr, FALSE);
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
88 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
89
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
90 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
91 {
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
92 start_color();
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
93
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( 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
95 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
96 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
97 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
98 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
99 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
100 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
101 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
102
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
103 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
104 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
105 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
106 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
107 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
108 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
109 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
110 }
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
111
571
3ae357fd34bb Rename quit-related internal variables.
Matti Hamalainen <ccr@tnsp.org>
parents: 568
diff changeset
112 appCursesInit = TRUE;
501
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
113 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
114
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
115 #ifdef PDCURSES
495
f8fc6d18bcdb Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 493
diff changeset
116 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
117 #endif
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 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
120 chatWindows[0] = nn_window_new(NULL);
541
44f67ec5e945 Improve logging facilities. Private chats in query windows are now logged
Matti Hamalainen <ccr@tnsp.org>
parents: 540
diff changeset
121 nn_log_open(chatWindows[0]);
466
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
122 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
123
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
124 return TRUE;
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
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
127
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
128 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
129 {
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
130 int i;
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 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
133 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
134
571
3ae357fd34bb Rename quit-related internal variables.
Matti Hamalainen <ccr@tnsp.org>
parents: 568
diff changeset
135 if (appCursesInit)
466
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
136 {
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
137 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
138 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
139
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
140 endwin();
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
141 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
142 }
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
143 }
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
501
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
146 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
147 {
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
148 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
149 }
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
150
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
151
466
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
152 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
153 {
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
154 int i;
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 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
157 {
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
158 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
159 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
160 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
161 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
162 }
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 return NULL;
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
165 }
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
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
168 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
169 {
541
44f67ec5e945 Improve logging facilities. Private chats in query windows are now logged
Matti Hamalainen <ccr@tnsp.org>
parents: 540
diff changeset
170 nn_window_t *res;
466
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
171 int i;
541
44f67ec5e945 Improve logging facilities. Private chats in query windows are now logged
Matti Hamalainen <ccr@tnsp.org>
parents: 540
diff changeset
172
466
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
173 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
174 return FALSE;
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 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
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
541
44f67ec5e945 Improve logging facilities. Private chats in query windows are now logged
Matti Hamalainen <ccr@tnsp.org>
parents: 540
diff changeset
179 nn_log_open(res);
44f67ec5e945 Improve logging facilities. Private chats in query windows are now logged
Matti Hamalainen <ccr@tnsp.org>
parents: 540
diff changeset
180
466
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
181 for (i = 1; i < SET_MAX_WINDOWS; i++)
541
44f67ec5e945 Improve logging facilities. Private chats in query windows are now logged
Matti Hamalainen <ccr@tnsp.org>
parents: 540
diff changeset
182 if (chatWindows[i] == NULL)
44f67ec5e945 Improve logging facilities. Private chats in query windows are now logged
Matti Hamalainen <ccr@tnsp.org>
parents: 540
diff changeset
183 {
44f67ec5e945 Improve logging facilities. Private chats in query windows are now logged
Matti Hamalainen <ccr@tnsp.org>
parents: 540
diff changeset
184 res->num = i;
44f67ec5e945 Improve logging facilities. Private chats in query windows are now logged
Matti Hamalainen <ccr@tnsp.org>
parents: 540
diff changeset
185 chatWindows[i] = res;
44f67ec5e945 Improve logging facilities. Private chats in query windows are now logged
Matti Hamalainen <ccr@tnsp.org>
parents: 540
diff changeset
186 if (curwin)
44f67ec5e945 Improve logging facilities. Private chats in query windows are now logged
Matti Hamalainen <ccr@tnsp.org>
parents: 540
diff changeset
187 currWin = res;
44f67ec5e945 Improve logging facilities. Private chats in query windows are now logged
Matti Hamalainen <ccr@tnsp.org>
parents: 540
diff changeset
188 return TRUE;
44f67ec5e945 Improve logging facilities. Private chats in query windows are now logged
Matti Hamalainen <ccr@tnsp.org>
parents: 540
diff changeset
189 }
466
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
190
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
191 return FALSE;
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
192 }
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 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
196 {
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
197 int i;
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
198 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
199
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
200 for (i = 1; i < SET_MAX_WINDOWS; i++)
541
44f67ec5e945 Improve logging facilities. Private chats in query windows are now logged
Matti Hamalainen <ccr@tnsp.org>
parents: 540
diff changeset
201 if (chatWindows[i] == win)
501
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
202 {
541
44f67ec5e945 Improve logging facilities. Private chats in query windows are now logged
Matti Hamalainen <ccr@tnsp.org>
parents: 540
diff changeset
203 chatWindows[i] = NULL;
44f67ec5e945 Improve logging facilities. Private chats in query windows are now logged
Matti Hamalainen <ccr@tnsp.org>
parents: 540
diff changeset
204 nn_log_close(win);
44f67ec5e945 Improve logging facilities. Private chats in query windows are now logged
Matti Hamalainen <ccr@tnsp.org>
parents: 540
diff changeset
205 nn_window_free(win);
44f67ec5e945 Improve logging facilities. Private chats in query windows are now logged
Matti Hamalainen <ccr@tnsp.org>
parents: 540
diff changeset
206 return;
466
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
207 }
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
208 }
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
209
504
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
210
503
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
211 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
212 {
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
213 int val = 0;
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
214
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
215 while (**s >= '0' && **s <= '9')
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
216 {
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
217 val *= 10;
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
218 val += (**s - '0');
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
219 (*s)++;
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
220 }
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
221 if (**s != '½')
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
222 return FALSE;
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
223
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
224 if (val < 9)
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
225 *col = A_DIM | COLOR_PAIR(val);
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
226 else if (val < 30)
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
227 *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
228
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
229 return TRUE;
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
230 }
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
231
466
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
232
504
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
233 #define QPUTCH(ch) nnwin_putch(&(win->line->buf), &(win->line->bufsize), &(win->line->len), col, ch)
508
f71c59cbc5a7 Remove useless check from nnwin_putch().
Matti Hamalainen <ccr@tnsp.org>
parents: 507
diff changeset
234
504
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
235 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
236 {
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
237 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
238 {
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
239 *bufsize += TH_BUFGROW;
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
240 *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
241 if (*buf == NULL)
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
242 return FALSE;
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
243 }
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
244
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
245 (*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
246 (*len)++;
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
247
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
248 return TRUE;
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
249 }
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
250
466
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
251
501
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
252 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
253 {
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
254 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
255 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
256
576
414d11df07ce Gracefully handle error situations when the main UI has not yet been
Matti Hamalainen <ccr@tnsp.org>
parents: 571
diff changeset
257 if (win == NULL)
414d11df07ce Gracefully handle error situations when the main UI has not yet been
Matti Hamalainen <ccr@tnsp.org>
parents: 571
diff changeset
258 return -16;
414d11df07ce Gracefully handle error situations when the main UI has not yet been
Matti Hamalainen <ccr@tnsp.org>
parents: 571
diff changeset
259
466
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
260 while (*s)
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
261 {
501
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
262 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
263 {
501
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
264 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
265 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
266 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
267 }
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
268
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
269 if (*s == '½')
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
270 {
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
271 s++;
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
272 if (*s == '½')
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 QPUTCH(*s);
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 else
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
277 {
503
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
278 if (!nnwin_get_color(&s, &col))
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
279 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
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 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
283 {
501
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
284 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
285 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
286 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
287 }
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
288 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
289 {
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
290 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
291 }
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
292
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
293 s++;
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
294 }
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 return 0;
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
297 }
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
298
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
299
503
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
300 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
301 {
503
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
302 const char *s = fmt;
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
303 int col = 0;
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
304 while (*s)
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
305 {
504
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
306 if (clip && getcurx(win) >= scrWidth)
503
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
307 return;
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
308
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
309 if (*s == '½')
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
310 {
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
311 s++;
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
312 if (*s == '½')
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
313 {
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
314 waddch(win, ((unsigned char) *s) | col);
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
315 s++;
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
316 }
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
317 else
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
318 {
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
319 if (!nnwin_get_color(&s, &col))
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
320 return;
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
321 }
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 else
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
324 {
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
325 waddch(win, ((unsigned char) *s) | col);
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
326 s++;
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 }
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
329 }
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
513
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
332 void nnwin_update(BOOL force, BOOL mask, nn_editbuf_t *ebuf, char *username, int usercolor)
503
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 int sx, sy;
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
335
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
336 // Save cursor position
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
337 getyx(stdscr, sy, sx);
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 // 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
340 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
341 {
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
342 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
343 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
344 werase(stdscr);
503
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
345 force = TRUE;
501
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
346 }
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
347
466
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
348 // 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
349 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
350 {
503
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
351 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
352 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
353
503
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
354 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
355 {
540
658c188101a6 Silence a warning by typecasting to correct type from void.
Matti Hamalainen <ccr@tnsp.org>
parents: 535
diff changeset
356 nn_line_t *line = (nn_line_t *) buf->data[offs];
503
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
357 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
358 {
504
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
359 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
360 size_t pos;
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
361
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
362 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
363 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
364 y -= 1;
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
365
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
366 if (y < 0)
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
367 {
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
368 size_t r;
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
369 int x;
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
370 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
371 {
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
372 if (++x >= scrWidth)
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
373 {
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
374 x = 0;
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
375 r++;
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 }
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
378 y = 0;
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
379 }
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
380
503
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
381 wmove(stdscr, y, 0);
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
382
504
60e04709ce0f Refactor window backbuffer to use integer as internal storage to simplify
Matti Hamalainen <ccr@tnsp.org>
parents: 503
diff changeset
383 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
384 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
385 }
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
386 }
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
387
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
388 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
389 }
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
390
503
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
391 // Update statusline
501
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
392 {
503
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
393 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
394 int i;
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
395
503
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
396 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
397
503
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
398 #if 0
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
399 snprintf(tmpStr, sizeof(tmpStr),
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
400 " ½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
401 tmpStamp,
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
402 username,
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
403 usercolor,
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
404 currWin->num + 1,
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
405 currWin->id != NULL ? currWin->id : "MAIN",
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
406 currWin->pos);
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
407 #else
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 " %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
410 tmpStamp,
527
436e86afa70a If username has not yet been set, show - instead of (null).
Matti Hamalainen <ccr@tnsp.org>
parents: 513
diff changeset
411 username != NULL ? username : "-",
535
379e361f1144 Fix various segfault issues.
Matti Hamalainen <ccr@tnsp.org>
parents: 527
diff changeset
412 usercolor,
379e361f1144 Fix various segfault issues.
Matti Hamalainen <ccr@tnsp.org>
parents: 527
diff changeset
413 currWin != NULL ? currWin->num + 1 : 0,
379e361f1144 Fix various segfault issues.
Matti Hamalainen <ccr@tnsp.org>
parents: 527
diff changeset
414 (currWin != NULL && currWin->id != NULL) ? currWin->id : "MAIN",
379e361f1144 Fix various segfault issues.
Matti Hamalainen <ccr@tnsp.org>
parents: 527
diff changeset
415 currWin != NULL ? currWin->pos : 0);
503
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
416 #endif
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
417
501
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
418 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
419 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
420 wclrtoeol(stdscr);
503
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
421 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
422
501
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
423 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
424 {
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
425 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
426 {
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
427 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
428 waddstr(stdscr, tmpStr);
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
429 }
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
430 }
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
431 }
503
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
432
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
433 // Restore cursor position
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
434 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
435
503
bac3f9af112c More work on curses cleanup. Almost working now.
Matti Hamalainen <ccr@tnsp.org>
parents: 501
diff changeset
436 // Update editbuf if needed
571
3ae357fd34bb Rename quit-related internal variables.
Matti Hamalainen <ccr@tnsp.org>
parents: 568
diff changeset
437 if (appCursesInit && 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
438 {
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
439 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
440 xoffs = ebuf->pos % scrWidth;
466
796508f828f6 Refactor much of the "windowing" UI code into a new module, ui.[ch]
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
441
501
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
442 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
443 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
444 wbkgdset(stdscr, COLOR_PAIR(0));
513
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
445
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
446 ebuf->dirty = FALSE;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
447 if (mask)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
448 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
449 size_t i;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
450 for (i = 0; i < ebuf->len; i++)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
451 waddch(stdscr, '*');
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
452 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
453 else
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
454 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
455 char *tmp;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
456 ebuf->data[ebuf->len] = 0;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
457 tmp = nn_username_decode(th_strdup(ebuf->data));
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
458 waddnstr(stdscr, tmp, ebuf->len);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
459 th_free(tmp);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
460 }
501
ca88945d8eda Begin work on integrating the removal of ncurses "windowing" and transition
Matti Hamalainen <ccr@tnsp.org>
parents: 496
diff changeset
461 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
462
501
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 }
513
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
467
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
468
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
469 void nnwin_input_process(nn_editbuf_t *editBuf, nn_editstate_t *editState,
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
470 BOOL (*callback)(int, nn_editbuf_t *, nn_editstate_t *))
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
471 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
472 int c, cnt = 0;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
473
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
474 // Handle several buffered keypresses at once
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
475 do
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
476 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
477 c = wgetch(stdscr);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
478
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
479 /* Handle various problematic cases where terminal
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
480 * keycodes do not get properly translated by curses
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
481 */
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
482 if (c == 10 || c == 13)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
483 c = KEY_ENTER;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
484 else
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
485 if (c == 0x1b)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
486 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
487 // ^[O
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
488 c = wgetch(stdscr);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
489 if (c == 'O')
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
490 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
491 c = wgetch(stdscr);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
492 switch (c)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
493 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
494 case 'd':
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
495 c = 0x204;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
496 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
497 case 'c':
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
498 c = 0x206;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
499 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
500 default:
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
501 editState->debugMsg("Unhandled ESC-O key sequence 0x%02x\n", c);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
502 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
503 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
504 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
505 // ^[[
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
506 else if (c == '[')
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
507 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
508 c = wgetch(stdscr);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
509 switch (c)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
510 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
511 case 0x31:
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
512 c = wgetch(stdscr);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
513 if (c >= 0x31 && c <= 0x39)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
514 c = KEY_F(c - 0x30);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
515 else
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
516 c = ERR;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
517 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
518
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
519 case 0x32:
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
520 c = KEY_IC;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
521 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
522 case 0x33:
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
523 c = KEY_DC;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
524 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
525
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
526 case 0x35:
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
527 c = KEY_PPAGE;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
528 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
529 case 0x36:
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
530 c = KEY_NPAGE;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
531 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
532
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
533 case 0x37:
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
534 c = KEY_HOME;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
535 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
536 case 0x38:
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
537 c = KEY_END;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
538 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
539
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
540 default:
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
541 editState->debugMsg("Unhandled ESC-[*~ key sequence 0x%02x\n", c);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
542 c = ERR;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
543 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
544 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
545 // Get the trailing ~
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
546 if (c != ERR)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
547 wgetch(stdscr);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
548 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
549 else
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
550 if (c >= 0x31 && c <= 0x39)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
551 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
552 c = c - 0x30 + 0x5000;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
553 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
554 else
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
555 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
556 editState->debugMsg("Unhandled ESC key sequence 0x%02x\n", c);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
557 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
558 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
559 #if defined(__WIN32) && defined(PDCURSES)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
560 else
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
561 if (c >= 0x198 && c <= 0x1a0)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
562 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
563 c = c - 0x198 + 0x5000;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
564 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
565 #endif
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
566
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
567 switch (c)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
568 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
569 #ifdef KEY_RESIZE
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
570 case KEY_RESIZE:
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
571 resize_term(0, 0);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
572 erase();
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
573 timeout(SET_DELAY);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
574 nnwin_reset();
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
575 editState->update = TRUE;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
576 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
577 #endif
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
578
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
579 case 0x204: // ctrl+left arrow = Skip words left
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
580 case 0x20b:
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
581 while (editBuf->pos > 0 && isspace((int) editBuf->data[editBuf->pos - 1]))
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
582 editBuf->pos--;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
583 while (editBuf->pos > 0 && !isspace((int) editBuf->data[editBuf->pos - 1]))
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
584 editBuf->pos--;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
585 editBuf->dirty = TRUE;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
586 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
587
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
588 case 0x206: // ctrl+right arrow = Skip words right
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
589 case 0x210:
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
590 while (editBuf->pos < editBuf->len && isspace((int) editBuf->data[editBuf->pos]))
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
591 editBuf->pos++;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
592 while (editBuf->pos < editBuf->len && !isspace((int) editBuf->data[editBuf->pos]))
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
593 editBuf->pos++;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
594 editBuf->dirty = TRUE;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
595 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
596
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
597 case KEY_HOME:
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
598 nn_editbuf_setpos(editBuf, 0);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
599 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
600 case KEY_END:
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
601 nn_editbuf_setpos(editBuf, editBuf->len);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
602 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
603 case KEY_LEFT:
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
604 nn_editbuf_setpos(editBuf, editBuf->pos - 1);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
605 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
606 case KEY_RIGHT:
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
607 nn_editbuf_setpos(editBuf, editBuf->pos + 1);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
608 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
609
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
610 case KEY_BACKSPACE:
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
611 case 0x08:
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
612 case 0x7f:
568
afb4caf32bdf Editline Backspace handling was wonky, we didn't check for edit position to be > 0. Fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 541
diff changeset
613 if (editBuf->pos > 0)
afb4caf32bdf Editline Backspace handling was wonky, we didn't check for edit position to be > 0. Fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 541
diff changeset
614 {
afb4caf32bdf Editline Backspace handling was wonky, we didn't check for edit position to be > 0. Fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 541
diff changeset
615 nn_editbuf_delete(editBuf, editBuf->pos - 1);
afb4caf32bdf Editline Backspace handling was wonky, we didn't check for edit position to be > 0. Fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 541
diff changeset
616 nn_editbuf_setpos(editBuf, editBuf->pos - 1);
afb4caf32bdf Editline Backspace handling was wonky, we didn't check for edit position to be > 0. Fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 541
diff changeset
617 }
513
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
618 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
619
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
620 case KEY_DC: // Delete character
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
621 nn_editbuf_delete(editBuf, editBuf->pos);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
622 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
623
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
624 case KEY_IC: // Ins = Toggle insert / overwrite mode
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
625 editState->insertMode = !editState->insertMode;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
626 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
627
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
628 case KEY_F(2): // F2 = Clear editbuffer
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
629 nn_editbuf_clear(editBuf);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
630 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
631
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
632 case 0x0c: // Ctrl + L
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
633 editState->update = TRUE;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
634 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
635
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
636 case ERR:
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
637 // Ignore
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
638 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
639
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
640 default:
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
641 if (!callback(c, editBuf, editState))
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
642 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
643 if (isprint(c) || c == 0xe4 || c == 0xf6 || c == 0xc4 || c == 0xd6)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
644 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
645 if (editState->insertMode)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
646 nn_editbuf_insert(editBuf, editBuf->pos, c);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
647 else
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
648 nn_editbuf_write(editBuf, editBuf->pos, c);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
649 nn_editbuf_setpos(editBuf, editBuf->pos + 1);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
650 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
651 else
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
652 editState->debugMsg("Unhandled key: 0x%02x\n", c);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
653 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
654 break;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
655 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
656 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
657 while (c != ERR && ++cnt < 10);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
658 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
659
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
660
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
661
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
662 char *nnwin_prompt_requester(BOOL allowEmpty, nn_editstate_t *editState,
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
663 BOOL (*callback)(int, nn_editbuf_t *, nn_editstate_t *),
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
664 void (*update)(nn_editbuf_t *, nn_editstate_t *))
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
665 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
666 nn_editbuf_t *editBuf = nn_editbuf_new(NN_TMPBUF_SIZE);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
667 char *res;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
668
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
669 editState->done = FALSE;
571
3ae357fd34bb Rename quit-related internal variables.
Matti Hamalainen <ccr@tnsp.org>
parents: 568
diff changeset
670 while (!editState->isError && !appQuitFlag && !editState->done)
513
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
671 {
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
672 nnwin_input_process(editBuf, editState, callback);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
673 update(editBuf, editState);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
674 }
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
675
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
676 if (allowEmpty || editBuf->len > 0)
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
677 res = nn_editbuf_get_string(editBuf, 0, editBuf->len);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
678 else
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
679 res = NULL;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
680
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
681 nn_editbuf_free(editBuf);
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
682
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
683 return res;
ef5a2aa8382b Refactor input handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
684 }