# HG changeset patch # User mikael # Date 1111095014 0 # Node ID 63acb2dcaeeaa91e2a85d1434bf43d05bffe2f83 # Parent da1fb510081ed60450c74bc3f2ef85dac00f28f0 [/trunk] Changeset 17 by mikael * Quite a lot of change: the input bar is now usable. Can use /quit command and send messages. diff -r da1fb510081e -r 63acb2dcaeea mcabber/main.c --- a/mcabber/main.c Wed Mar 16 22:18:54 2005 +0000 +++ b/mcabber/main.c Thu Mar 17 21:30:14 2005 +0000 @@ -66,10 +66,10 @@ int main(int argc, char **argv) { - int i; + //int i; char configFile[4096]; - char *buffer; - char *secbuffer; + //char *buffer; + //char *secbuffer; char *username, *password, *resource; char *servername; char *idsession; @@ -213,9 +213,9 @@ free(incoming); } if ((x & 2) == 2) { - keypad(scr_GetRosterWindow(), TRUE); + keypad(scr_GetInputWindow(), TRUE); key = scr_Getch(); - ret = process_key(key); + ret = process_key(key, sock); /* switch (key) { case KEY_IC: @@ -231,23 +231,13 @@ bud_RosterUp(); break; - case 0x19a: + case KEY_RESIZE: endwin(); printf("\nRedimensionado no implementado\n"); printf("Reinicie Cabber.\n\n\n"); exit(EXIT_FAILURE); break; - case KEY_NPAGE: - for (i = 0; i < 10; i++) - bud_RosterDown(); - break; - - case KEY_PPAGE: - for (i = 0; i < 10; i++) - bud_RosterUp(); - break; - case 'z': case KEY_F(1): buffer = (char *) calloc(1, 4096); diff -r da1fb510081e -r 63acb2dcaeea mcabber/screen.c --- a/mcabber/screen.c Wed Mar 16 22:18:54 2005 +0000 +++ b/mcabber/screen.c Thu Mar 17 21:30:14 2005 +0000 @@ -33,7 +33,7 @@ WINDOW *rosterWnd, *chatWnd, *inputWnd; WINDOW *logWnd, *logWnd_border; PANEL *rosterPanel, *chatPanel, *inputPanel; -PANEL *logPanel, *logPanel_border; +static PANEL *logPanel, *logPanel_border; int maxY, maxX; window_entry_t *ventanaActual; @@ -301,7 +301,7 @@ update_panels(); doupdate(); free(instr); - keypad(rosterWnd, TRUE); + keypad(inputWnd, TRUE); } @@ -422,6 +422,7 @@ initscr(); noecho(); raw(); + //cbreak(); start_color(); use_default_colors(); @@ -508,6 +509,10 @@ free(submsgs); free(buffer); + top_panel(inputPanel); + //wmove(inputWnd, 0, ptr_inputline - (char*)&inputLine); + update_panels(); + doupdate(); } void scr_WriteMessage(int sock) @@ -554,8 +559,8 @@ int scr_Getch(void) { int ch; - keypad(rosterWnd, TRUE); - ch = wgetch(rosterWnd); + // keypad(inputWnd, TRUE); + ch = wgetch(inputWnd); return ch; } @@ -569,7 +574,67 @@ return chatWnd; } -int process_key(int key) +WINDOW *scr_GetInputWindow(void) +{ + return inputWnd; +} + +void send_message(int sock, char *msg) +{ + char **submsgs; + char *buffer = (char *) calloc(1, 24+strlen(msg)); + char *buffer2 = (char *) calloc(1, 1024); + int n, i; + buddy_entry_t *tmp = bud_SelectedInfo(); + + scr_ShowWindow(tmp->jid); + + sprintf(buffer, ">>> %s", msg); + + submsgs = + ut_SplitMessage(buffer, &n, + maxX - scr_WindowHeight(rosterWnd) - 20); + for (i = 0; i < n; i++) { + if (i == 0) + scr_WriteInWindow(tmp->jid, submsgs[i], TRUE); + else + scr_WriteInWindow(tmp->jid, submsgs[i], FALSE); + } + + for (i = 0; i < n; i++) + free(submsgs[i]); + free(submsgs); + + //move(CHAT_WIN_HEIGHT - 1, maxX - 1); + refresh(); + sprintf(buffer2, "%s@%s/%s", cfg_read("username"), + cfg_read("server"), cfg_read("resource")); + srv_sendtext(sock, tmp->jid, buffer, buffer2); + free(buffer); + free(buffer2); + + top_panel(inputPanel); +} + +int process_line(char *line, int sock) +{ + if (*line == 0) // XXX Simple checks should maybe be in process_key() + return 0; + if (*line != '/') { + send_message(sock, line); + return 0; + } + if (!strcasecmp(line, "/quit")) { + return 255; + } + // Commands handling + // TODO + // say... + wprintw(logWnd, "\nUnrecognised command, sorry."); + return 0; +} + +int process_key(int key, int sock) { if (isprint(key)) { char tmpLine[INPUTLINE_LENGTH]; @@ -583,6 +648,10 @@ *--ptr_inputline = 0; } break; + case KEY_DC: + if (*ptr_inputline) + strcpy(ptr_inputline, ptr_inputline+1); + break; case KEY_LEFT: if (ptr_inputline != (char*)&inputLine) { ptr_inputline--; @@ -597,20 +666,45 @@ break; case '\n': // Enter // XXX Test: - if (!strcasecmp(inputLine, "/quit")) { + if (process_line(inputLine, sock)) return 255; - } - // TODO processing ptr_inputline = inputLine; *ptr_inputline = 0; break; case KEY_UP: bud_RosterUp(); + scr_ShowBuddyWindow(); break; case KEY_DOWN: bud_RosterDown(); + scr_ShowBuddyWindow(); break; + case KEY_PPAGE: + wprintw(logWnd, "\nPageUp??"); + break; + case KEY_NPAGE: + wprintw(logWnd, "\nPageDown??"); + break; + case KEY_HOME: + case 1: + ptr_inputline = inputLine; + break; + case KEY_END: + case 5: + for (; *ptr_inputline; ptr_inputline++) ; + break; + case 21: // Ctrl-u + strcpy(inputLine, ptr_inputline); + ptr_inputline = inputLine; + break; + case KEY_EOL: + case 11: // Ctrl-k + *ptr_inputline = 0; + break; + default: + wprintw(logWnd, "\nUnkown key=%o", key); } + //wprintw(logWnd, "\n[%02x]", key); } mvwprintw(inputWnd, 0,0, "%s", inputLine); wclrtoeol(inputWnd); diff -r da1fb510081e -r 63acb2dcaeea mcabber/screen.h --- a/mcabber/screen.h Wed Mar 16 22:18:54 2005 +0000 +++ b/mcabber/screen.h Thu Mar 17 21:30:14 2005 +0000 @@ -28,9 +28,10 @@ WINDOW *scr_GetRosterWindow(void); WINDOW *scr_GetStatusWindow(void); +WINDOW *scr_GetInputWindow(void); int scr_Getch(void); -int process_key(int); +int process_key(int, int sock); #endif