changeset 2:63acb2dcaeea

[/trunk] Changeset 17 by mikael * Quite a lot of change: the input bar is now usable. Can use /quit command and send messages.
author mikael
date Thu, 17 Mar 2005 21:30:14 +0000
parents da1fb510081e
children 582ef676a320
files mcabber/main.c mcabber/screen.c mcabber/screen.h
diffstat 3 files changed, 110 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- 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