[222] in BarnOwl Developers

home help back first fref pref prev next nref lref last post

[D-O-H] r399 - trunk/owl

daemon@ATHENA.MIT.EDU (nelhage@MIT.EDU)
Thu Oct 29 18:03:51 2009

Resent-From: nelhage@mit.edu
Resent-To: barnowl-dev-mtg@charon.mit.edu
Date: Tue, 24 Oct 2006 11:45:17 -0400
To: dirty-owl-hackers@MIT.EDU
From: nelhage@MIT.EDU
Reply-To: dirty-owl-hackers@MIT.EDU

Author: nelhage
Date: 2006-10-24 11:45:16 -0400 (Tue, 24 Oct 2006)
New Revision: 399

Modified:
   trunk/owl/commands.c
   trunk/owl/functions.c
   trunk/owl/global.c
   trunk/owl/owl.h
Log:
Refactoring the editwin code to use an explicit callback.

Modified: trunk/owl/commands.c
===================================================================
--- trunk/owl/commands.c	2006-10-24 15:43:28 UTC (rev 398)
+++ trunk/owl/commands.c	2006-10-24 15:45:16 UTC (rev 399)
@@ -2366,8 +2366,6 @@
 
 char *owl_command_aimlogin(int argc, char **argv, char *buff)
 {
-  int ret;
-  
   if ((argc<2) || (argc>3)) {
     owl_function_makemsg("Wrong number of arguments to aimlogin command");
     return(NULL);
@@ -2375,18 +2373,14 @@
 
   /* if we get two arguments, ask for the password */
   if (argc==2) {
-    owl_global_set_buffercommand(&g, buff);
+    owl_global_set_buffercommand(&g, argv[1]);
+    owl_global_set_buffercallback(&g, owl_function_aimlogin);
     owl_function_start_password("AIM Password: ");
     return(NULL);
+  } else {
+    owl_function_aimlogin(argv[1], argv[2]);
   }
 
-  /* clear the buddylist */
-  owl_buddylist_clear(owl_global_get_buddylist(&g));
-
-  /* try to login */
-  ret=owl_aim_login(argv[1], argv[2]);
-  if (ret) owl_function_makemsg("Warning: login for %s failed.\n", argv[1]);
-
   /* this is a test */
   return(NULL);
 }

Modified: trunk/owl/functions.c
===================================================================
--- trunk/owl/functions.c	2006-10-24 15:43:28 UTC (rev 398)
+++ trunk/owl/functions.c	2006-10-24 15:45:16 UTC (rev 399)
@@ -319,6 +319,7 @@
   owl_global_set_typwin_active(&g);
 
   owl_global_set_buffercommand(&g, line);
+  owl_global_set_buffercallback(&g, &owl_function_zwrite);
 }
 
 void owl_function_aimwrite_setup(char *line)
@@ -349,6 +350,7 @@
   owl_global_set_typwin_active(&g);
 
   owl_global_set_buffercommand(&g, line);
+  owl_global_set_buffercallback(&g, &owl_function_aimwrite);
 }
 
 void owl_function_loopwrite_setup()
@@ -373,6 +375,7 @@
   owl_global_set_typwin_active(&g);
 
   owl_global_set_buffercommand(&g, "loopwrite");
+  owl_global_set_buffercallback(&g, &owl_function_loopwrite);
 }
 
 /* send, log and display an outgoing zephyr.  If 'msg' is NULL
@@ -482,14 +485,15 @@
   owl_zwrite_free(&z);
 }
 
-void owl_function_aimwrite(char *to)
+void owl_function_aimwrite(char *line, char *msg)
 {
   int ret;
-  char *msg, *format_msg;
+  char *to, *format_msg;
   owl_message *m;
 
+  to = line + 9;
+
   /* make a formatted copy of the message */
-  msg=owl_editwin_get_text(owl_global_get_typwin(&g));
   format_msg=owl_strdup(msg);
   owl_text_wordunwrap(format_msg);
   
@@ -557,18 +561,18 @@
   owl_free(format_msg);
 }
 
-void owl_function_loopwrite()
+void owl_function_loopwrite(char *line, char *msg)
 {
   owl_message *min, *mout;
 
   /* create a message and put it on the message queue.  This simulates
    * an incoming message */
   min=owl_malloc(sizeof(owl_message));
-  owl_message_create_loopback(min, owl_editwin_get_text(owl_global_get_typwin(&g)));
+  owl_message_create_loopback(min, msg);
   owl_message_set_direction_in(min);
   owl_global_messagequeue_addmsg(&g, min);
 
-  mout=owl_function_make_outgoing_loopback(owl_editwin_get_text(owl_global_get_typwin(&g)));
+  mout=owl_function_make_outgoing_loopback(msg);
   owl_log_message(mout);
   if (owl_global_is_displayoutgoing(&g)) {
     owl_function_add_message(mout);
@@ -929,6 +933,17 @@
   }
 }
 
+void owl_function_aimlogin(char *user, char *passwd) {
+  int ret;
+
+  /* clear the buddylist */
+  owl_buddylist_clear(owl_global_get_buddylist(&g));
+
+  /* try to login */
+  ret=owl_aim_login(user, passwd);
+  if (ret) owl_function_makemsg("Warning: login for %s failed.\n", user);
+}
+
 void owl_function_suspend()
 {
   endwin();
@@ -1308,23 +1323,15 @@
 
 void owl_function_run_buffercommand()
 {
-  char *buff, *ptr;
+  char *buff;
+  void (*cb)(char*, char*);
 
   buff=owl_global_get_buffercommand(&g);
-  if (!strncmp(buff, "zwrite ", 7)) {
-    owl_function_zwrite(buff, owl_editwin_get_text(owl_global_get_typwin(&g)));
-  } else if (!strncmp(buff, "zcrypt ", 7)) {
-    owl_function_zcrypt(buff, owl_editwin_get_text(owl_global_get_typwin(&g)));
-  } else if (!strncmp(buff, "aimwrite ", 9)) {
-    owl_function_aimwrite(buff+9);
-  } else if (!strncmp(buff, "loopwrite", 9) || !strncmp(buff, "loopwrite ", 10)) {
-    owl_function_loopwrite();
-  } else if (!strncmp(buff, "aimlogin ", 9)) {
-    ptr=owl_sprintf("%s %s", buff, owl_global_get_response(&g));
-    owl_function_command(ptr);
-    owl_free(ptr);
+  cb=owl_global_get_buffercallback(&g);
+  if(!cb) {
+    owl_function_error("Internal error: No callback for buffercommand %s", buff);
   } else {
-    owl_function_error("Internal error: invalid buffercommand %s", buff);
+    cb(buff, owl_editwin_get_text(owl_global_get_typwin(&g)));
   }
 }
 

Modified: trunk/owl/global.c
===================================================================
--- trunk/owl/global.c	2006-10-24 15:43:28 UTC (rev 398)
+++ trunk/owl/global.c	2006-10-24 15:45:16 UTC (rev 399)
@@ -249,6 +249,14 @@
   return("");
 }
 
+void owl_global_set_buffercallback(owl_global *g, void (*cb)(char*,char*)) {
+  g->buffercallback = cb;
+}
+
+void (*owl_global_get_buffercallback(owl_global *g))(char*,char*) {
+  return g->buffercallback;
+}
+
 /* refresh */
 
 int owl_global_is_needrefresh(owl_global *g) {

Modified: trunk/owl/owl.h
===================================================================
--- trunk/owl/owl.h	2006-10-24 15:43:28 UTC (rev 398)
+++ trunk/owl/owl.h	2006-10-24 15:45:16 UTC (rev 399)
@@ -532,6 +532,7 @@
   int haveconfig;
   int config_format;
   char *buffercommand;
+  void (*buffercallback)(char *cmd, char *msg);
   owl_editwin tw;
   owl_viewwin vw;
   void *perl;


home help back first fref pref prev next nref lref last post