From bb3878bc76588838379be3df1dfe1d0d100ff59b Mon Sep 17 00:00:00 2001 From: James Booth Date: Tue, 7 Feb 2012 00:37:42 +0000 Subject: [PATCH] Hiding XMPP and Ncurses from app code --- app.c | 65 ++++++++++--------------------------------------------- windows.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++---- windows.h | 10 ++++----- 3 files changed, 73 insertions(+), 64 deletions(-) diff --git a/app.c b/app.c index 714f4403..e7cf7589 100644 --- a/app.c +++ b/app.c @@ -1,19 +1,12 @@ #include #include -#include #include #include "log.h" #include "windows.h" #include "jabber.h" -// window references -extern WINDOW *title_bar; -extern WINDOW *cmd_bar; -extern WINDOW *cmd_win; -extern WINDOW *main_win; - static void main_event_loop(void); void start_profanity(void) @@ -26,88 +19,52 @@ void start_profanity(void) break; } else if (strncmp(cmd, "/connect ", 9) == 0) { char *user; - char passwd[20]; - user = strndup(cmd+9, strlen(cmd)-9); bar_print_message("Enter password:"); + char passwd[20]; cmd_get_password(passwd); + bar_print_message(user); - jabber_connect(user, passwd); - main_event_loop(); - break; } else { - // echo ignore - wclear(cmd_win); - wmove(cmd_win, 0, 0); + cmd_clear(); } } } static void main_event_loop(void) { - int cmd_y = 0; - int cmd_x = 0; - - wtimeout(cmd_win, 0); + cmd_non_block(); while(TRUE) { int ch = ERR; char command[100]; int size = 0; - // while not enter + // while not enter, process all events, and try to get another char while(ch != '\n') { usleep(1); + // handle incoming messages jabber_process_events(); - // move cursor back to cmd_win - getyx(cmd_win, cmd_y, cmd_x); - wmove(cmd_win, cmd_y, cmd_x); - - // echo off, and get some more input - noecho(); - ch = wgetch(cmd_win); - - // if delete pressed, go back and delete it - if (ch == 127) { - if (size > 0) { - getyx(cmd_win, cmd_y, cmd_x); - wmove(cmd_win, cmd_y, cmd_x-1); - wdelch(cmd_win); - size--; - } - } - // else if not error or newline, show it and store it - else if (ch != ERR && ch != '\n') { - waddch(cmd_win, ch); - command[size++] = ch; - } - - echo(); + // get another character from the command box + cmd_poll_char(&ch, command, &size); } + // null terminate the input command[size++] = '\0'; // newline was hit, check if /quit command issued if (strcmp(command, "/quit") == 0) { break; } else { - // send the message jabber_send(command); - - // show it in the main window - wprintw(main_win, "me: %s\n", command); - wrefresh(main_win); - - // move back to the command window and clear it - wclear(cmd_win); - wmove(cmd_win, 0, 0); - wrefresh(cmd_win); + show_outgoing_msg("me", command); + cmd_clear(); } } diff --git a/windows.c b/windows.c index 0920fef0..2b6148c5 100644 --- a/windows.c +++ b/windows.c @@ -3,10 +3,10 @@ #include "windows.h" // window references -extern WINDOW *title_bar; -extern WINDOW *cmd_bar; -extern WINDOW *cmd_win; -extern WINDOW *main_win; +static WINDOW *title_bar; +static WINDOW *cmd_bar; +static WINDOW *cmd_win; +static WINDOW *main_win; static void create_title_bar(void); static void create_command_bar(void); @@ -58,12 +58,66 @@ void show_incomming_msg(char *from, char *message) wrefresh(main_win); } +void show_outgoing_msg(char *from, char* message) +{ + char line[100]; + sprintf(line, "%s: %s\n", from, message); + + wprintw(main_win, line); + wrefresh(main_win); +} + void cmd_get_command_str(char *cmd) { wmove(cmd_win, 0, 0); wgetstr(cmd_win, cmd); } +void cmd_clear(void) +{ + wclear(cmd_win); + wmove(cmd_win, 0, 0); + wrefresh(cmd_win); +} + +void cmd_non_block(void) +{ + wtimeout(cmd_win, 0); +} + +void cmd_poll_char(int *ch, char command[], int *size) +{ + int cmd_y = 0; + int cmd_x = 0; + + // move cursor back to cmd_win + getyx(cmd_win, cmd_y, cmd_x); + wmove(cmd_win, cmd_y, cmd_x); + + // echo off, and get some more input + noecho(); + *ch = wgetch(cmd_win); + + // if delete pressed, go back and delete it + if (*ch == 127) { + if (*size > 0) { + getyx(cmd_win, cmd_y, cmd_x); + wmove(cmd_win, cmd_y, cmd_x-1); + wdelch(cmd_win); + (*size)--; + } + } + // else if not error or newline, show it and store it + else if (*ch != ERR && *ch != '\n') { + waddch(cmd_win, *ch); + command[(*size)++] = *ch; + } + + echo(); + + +} + void cmd_get_password(char *passwd) { wclear(cmd_win); diff --git a/windows.h b/windows.h index 3ef373e1..5f411cf9 100644 --- a/windows.h +++ b/windows.h @@ -4,16 +4,14 @@ #include #include -// windows -WINDOW *title_bar; -WINDOW *cmd_bar; -WINDOW *cmd_win; -WINDOW *main_win; - void gui_init(void); void gui_close(void); void show_incomming_msg(char *from, char *message); +void show_outgoing_msg(char *from, char *message); void cmd_get_command_str(char *cmd); +void cmd_poll_char(int *ch, char command[], int *size); +void cmd_clear(void); +void cmd_non_block(void); void cmd_get_password(char *passwd); void bar_print_message(char *msg);