[222] in BarnOwl Developers
[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;