diff options
author | Nominate <thomas.bladon@st-hughs.ox.ac.uk> | 2013-08-06 11:16:17 +0100 |
---|---|---|
committer | Nominate <thomas.bladon@st-hughs.ox.ac.uk> | 2013-08-06 11:16:17 +0100 |
commit | 45c84e55e6e25bd95b5b6c86368845ff20dec7e9 (patch) | |
tree | 15441e2eea035f83bae5b720ad79a865e2c0e2e8 /testing | |
parent | 1f001b2f915710e254d039c1f74c533196826235 (diff) |
Corrected wrap-around
This should allow wrap-around and allow proper execution.
Diffstat (limited to 'testing')
-rw-r--r-- | testing/toxic/prompt.c | 80 |
1 files changed, 50 insertions, 30 deletions
diff --git a/testing/toxic/prompt.c b/testing/toxic/prompt.c index c832db39..742b35f8 100644 --- a/testing/toxic/prompt.c +++ b/testing/toxic/prompt.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * Toxic -- Tox Curses Client | 2 | * Toxic -- Tox Curses Client |
3 | */ | 3 | */ |
4 | 4 | ||
5 | #include <stdlib.h> | 5 | #include <stdlib.h> |
6 | #include <string.h> | 6 | #include <string.h> |
@@ -41,7 +41,17 @@ unsigned char * hex_string_to_bin(char hex_string[]) | |||
41 | static char prompt_buf[256] = {0}; | 41 | static char prompt_buf[256] = {0}; |
42 | static int prompt_buf_pos=0; | 42 | static int prompt_buf_pos=0; |
43 | 43 | ||
44 | static void execute(ToxWindow* self, char* cmd) { | 44 | static void execute(ToxWindow* self, char* u_cmd) { |
45 | int i; | ||
46 | int newlines = 0; | ||
47 | char cmd[256] = {0}; | ||
48 | for(i = 0; i < strlen(prompt_buf); i++) | ||
49 | { | ||
50 | if (u_cmd[i] == '\n') | ||
51 | ++newlines; | ||
52 | else | ||
53 | cmd[i - newlines] = u_cmd[i]; | ||
54 | } | ||
45 | 55 | ||
46 | if(!strcmp(cmd, "quit") || !strcmp(cmd, "exit") || !strcmp(cmd, "q")) { | 56 | if(!strcmp(cmd, "quit") || !strcmp(cmd, "exit") || !strcmp(cmd, "q")) { |
47 | endwin(); | 57 | endwin(); |
@@ -158,7 +168,7 @@ static void execute(ToxWindow* self, char* cmd) { | |||
158 | break; | 168 | break; |
159 | } | 169 | } |
160 | } | 170 | } |
161 | else if(!strcmp(cmd, "clear")) { | 171 | else if(!strcmp(cmd, "clear")) { |
162 | wclear(self->window); | 172 | wclear(self->window); |
163 | } | 173 | } |
164 | else if(!strcmp(cmd, "help")) { | 174 | else if(!strcmp(cmd, "help")) { |
@@ -197,7 +207,7 @@ static void execute(ToxWindow* self, char* cmd) { | |||
197 | 207 | ||
198 | for(i=0; i<32; i++) { | 208 | for(i=0; i<32; i++) { |
199 | char xx[3]; | 209 | char xx[3]; |
200 | snprintf(xx, sizeof(xx), "%02x", self_public_key[i] & 0xff); | 210 | snprintf(xx, sizeof(xx), "%02x", self_public_key[i] & 0xff); |
201 | strcat(id, xx); | 211 | strcat(id, xx); |
202 | } | 212 | } |
203 | 213 | ||
@@ -266,8 +276,16 @@ static void execute(ToxWindow* self, char* cmd) { | |||
266 | static void prompt_onKey(ToxWindow* self, int key) { | 276 | static void prompt_onKey(ToxWindow* self, int key) { |
267 | // PRINTABLE characters: Add to line. | 277 | // PRINTABLE characters: Add to line. |
268 | if(isprint(key)) { | 278 | if(isprint(key)) { |
269 | if(prompt_buf_pos == (COLS - 3)) { | 279 | if (prompt_buf_pos == 255){ |
270 | return; | 280 | wprintw(self->window, "\nToo Long.\n"); |
281 | prompt_buf_pos = 0; | ||
282 | prompt_buf[0] = 0; | ||
283 | } | ||
284 | else if(!(prompt_buf_pos == 0) && (prompt_buf_pos < COLS) && (prompt_buf_pos % (COLS - 3) == 0)) { | ||
285 | prompt_buf[prompt_buf_pos++] = '\n'; | ||
286 | } | ||
287 | else if(!(prompt_buf_pos == 0) && (prompt_buf_pos > COLS) && ((prompt_buf_pos - (COLS - 3)) % (COLS) == 0)) { | ||
288 | prompt_buf[prompt_buf_pos++] = '\n'; | ||
271 | } | 289 | } |
272 | prompt_buf[prompt_buf_pos++] = key; | 290 | prompt_buf[prompt_buf_pos++] = key; |
273 | prompt_buf[prompt_buf_pos] = 0; | 291 | prompt_buf[prompt_buf_pos] = 0; |
@@ -290,20 +308,22 @@ static void prompt_onKey(ToxWindow* self, int key) { | |||
290 | } | 308 | } |
291 | 309 | ||
292 | static void prompt_onDraw(ToxWindow* self) { | 310 | static void prompt_onDraw(ToxWindow* self) { |
293 | curs_set(1); | 311 | curs_set(1); |
294 | int x, y; | 312 | int x, y; |
295 | 313 | getyx(self->window, y, x); | |
296 | getyx(self->window, y, x); | 314 | (void) x; |
297 | (void) x; | 315 | int i; |
298 | 316 | for (i = 0; i < (strlen(prompt_buf)); i++) | |
299 | wattron(self->window, COLOR_PAIR(1)); | 317 | { |
300 | mvwprintw(self->window, y, 0, "# "); | 318 | if ((prompt_buf[i] == '\n') && (y != 0)) |
301 | wattroff(self->window, COLOR_PAIR(1)); | 319 | --y; |
302 | 320 | } | |
303 | mvwprintw(self->window, y, 2, "%s", prompt_buf); | 321 | wattron(self->window, COLOR_PAIR(1)); |
304 | wclrtoeol(self->window); | 322 | mvwprintw(self->window, y, 0, "# "); |
305 | 323 | wattroff(self->window, COLOR_PAIR(1)); | |
306 | wrefresh(self->window); | 324 | mvwprintw(self->window, y, 2, "%s", prompt_buf); |
325 | wclrtoeol(self->window); | ||
326 | wrefresh(self->window); | ||
307 | } | 327 | } |
308 | 328 | ||
309 | static void print_usage(ToxWindow* self) { | 329 | static void print_usage(ToxWindow* self) { |
@@ -311,15 +331,15 @@ static void print_usage(ToxWindow* self) { | |||
311 | wprintw(self->window, "Commands:\n"); | 331 | wprintw(self->window, "Commands:\n"); |
312 | wattroff(self->window, A_BOLD); | 332 | wattroff(self->window, A_BOLD); |
313 | 333 | ||
314 | wprintw(self->window, " connect <ip> <port> <key> : Connect to DHT server\n"); | 334 | wprintw(self->window, " connect <ip> <port> <key> : Connect to DHT server\n"); |
315 | wprintw(self->window, " add <id> <message> : Add friend\n"); | 335 | wprintw(self->window, " add <id> <message> : Add friend\n"); |
316 | wprintw(self->window, " status <message> : Set your status\n"); | 336 | wprintw(self->window, " status <message> : Set your status\n"); |
317 | wprintw(self->window, " nick <nickname> : Set your nickname\n"); | 337 | wprintw(self->window, " nick <nickname> : Set your nickname\n"); |
318 | wprintw(self->window, " accept <number> : Accept friend request\n"); | 338 | wprintw(self->window, " accept <number> : Accept friend request\n"); |
319 | wprintw(self->window, " myid : Print your ID\n"); | 339 | wprintw(self->window, " myid : Print your ID\n"); |
320 | wprintw(self->window, " quit/exit : Exit program\n"); | 340 | wprintw(self->window, " quit/exit : Exit program\n"); |
321 | wprintw(self->window, " help : Print this message again\n"); | 341 | wprintw(self->window, " help : Print this message again\n"); |
322 | wprintw(self->window, " clear : Clear this window\n"); | 342 | wprintw(self->window, " clear : Clear this window\n"); |
323 | 343 | ||
324 | wattron(self->window, A_BOLD); | 344 | wattron(self->window, A_BOLD); |
325 | wprintw(self->window, "TIP: Use the TAB key to navigate through the tabs.\n\n"); | 345 | wprintw(self->window, "TIP: Use the TAB key to navigate through the tabs.\n\n"); |