[/trunk] Changeset 17 by mikael
* Quite a lot of change: the input bar is now usable.
Can use /quit command and send messages.
--- 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);
--- 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);
--- 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