[370] in BarnOwl Developers
[D-O-H] r512 - in trunk: . owl
daemon@ATHENA.MIT.EDU (nelhage@MIT.EDU)
Thu Oct 29 18:05:25 2009
Resent-From: nelhage@mit.edu
Resent-To: barnowl-dev-mtg@charon.mit.edu
To: dirty-owl-hackers@mit.edu
From: nelhage@MIT.EDU
Reply-to: dirty-owl-hackers@MIT.EDU
Date: Tue, 9 Jan 2007 23:33:44 -0500 (EST)
Author: nelhage
Date: 2007-01-09 23:33:44 -0500 (Tue, 09 Jan 2007)
New Revision: 512
Modified:
trunk/
trunk/owl/functions.c
trunk/owl/owl.c
trunk/owl/perlconfig.c
trunk/owl/perlglue.xs
trunk/owl/perlwrap.pm
Log:
r17902@phanatique: nelhage | 2007-01-09 18:50:40 -0500
* Renaming package owl to BarnOwl::
* Moving hooks into the BarnOwl::Hooks package, and restoring support
for .owlconf files that use sub startup {} and so on.
Property changes on: trunk
___________________________________________________________________
Name: svk:merge
- bb873fd7-8e23-0410-944a-99ec44c633eb:/branches/owl/filter-rewrite:15925
bb873fd7-8e23-0410-944a-99ec44c633eb:/local/d-o-h/trunk:17901
+ bb873fd7-8e23-0410-944a-99ec44c633eb:/branches/owl/filter-rewrite:15925
bb873fd7-8e23-0410-944a-99ec44c633eb:/local/d-o-h/trunk:17902
Modified: trunk/owl/functions.c
===================================================================
--- trunk/owl/functions.c 2007-01-10 04:33:42 UTC (rev 511)
+++ trunk/owl/functions.c 2007-01-10 04:33:44 UTC (rev 512)
@@ -1029,7 +1029,7 @@
}
/* execute the commands in shutdown */
- ret = owl_perlconfig_execute("owl::shutdown();");
+ ret = owl_perlconfig_execute("BarnOwl::Hooks::shutdown();");
if (ret) owl_free(ret);
/* signal our child process, if any */
@@ -3315,8 +3315,8 @@
#endif
if(aim && zephyr) {
- if(owl_perlconfig_is_function("owl::get_blist")) {
- char * perlblist = owl_perlconfig_execute("owl::get_blist()");
+ if(owl_perlconfig_is_function("BarnOwl::Hooks::get_blist")) {
+ char * perlblist = owl_perlconfig_execute("BarnOwl::Hooks::get_blist()");
if(perlblist) {
owl_fmtext_append_ztext(&fm, perlblist);
owl_free(perlblist);
Modified: trunk/owl/owl.c
===================================================================
--- trunk/owl/owl.c 2007-01-10 04:33:42 UTC (rev 511)
+++ trunk/owl/owl.c 2007-01-10 04:33:44 UTC (rev 512)
@@ -318,8 +318,8 @@
if (owl_global_is_config_format(&g)) {
owl_function_debugmsg("Found perl formatting");
s=owl_malloc(sizeof(owl_style));
- owl_style_create_perl(s, "perl", "owl::_format_msg_legacy_wrap",
- "User-defined perl style that calls owl::format_msg"
+ owl_style_create_perl(s, "perl", "BarnOwl::_format_msg_legacy_wrap",
+ "User-defined perl style that calls BarnOwl::format_msg"
"with legacy global variable support");
owl_global_add_style(&g, s);
owl_global_set_default_style(&g, "perl");
@@ -327,7 +327,7 @@
/* execute the startup function in the configfile */
owl_function_debugmsg("startup: executing perl startup, if applicable");
- perlout = owl_perlconfig_execute("owl::startup();");
+ perlout = owl_perlconfig_execute("BarnOwl::Hooks::startup();");
if (perlout) owl_free(perlout);
/* hold on to the window names for convenience */
@@ -438,10 +438,7 @@
}
}
- /* Hook perl into the loop */
- if (owl_perlconfig_is_function("owl::mainloop_hook")) {
- owl_perlconfig_mainloop();
- }
+ owl_perlconfig_mainloop();
/* little hack */
now=time(NULL);
Modified: trunk/owl/perlconfig.c
===================================================================
--- trunk/owl/perlconfig.c 2007-01-10 04:33:42 UTC (rev 511)
+++ trunk/owl/perlconfig.c 2007-01-10 04:33:44 UTC (rev 512)
@@ -11,7 +11,7 @@
extern char *owl_perlwrap_codebuff;
-extern XS(boot_owl);
+extern XS(boot_BarnOwl);
extern XS(boot_DynaLoader);
// extern XS(boot_DBI);
@@ -20,7 +20,7 @@
char *file = __FILE__;
dXSUB_SYS;
{
- newXS("owl::bootstrap", boot_owl, file);
+ newXS("BarnOwl::bootstrap", boot_BarnOwl, file);
newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file);
}
}
@@ -85,12 +85,12 @@
hv_store(h, "deleted", strlen("deleted"), newSViv(owl_message_is_delete(m)),0);
hv_store(h, "private", strlen("private"), newSViv(owl_message_is_private(m)),0);
- if (owl_message_is_type_zephyr(m)) blessas = "owl::Message::Zephyr";
- else if (owl_message_is_type_aim(m)) blessas = "owl::Message::AIM";
- else if (owl_message_is_type_jabber(m)) blessas = "owl::Message::Jabber";
- else if (owl_message_is_type_admin(m)) blessas = "owl::Message::Admin";
- else if (owl_message_is_type_generic(m)) blessas = "owl::Message::Generic";
- else blessas = "owl::Message";
+ if (owl_message_is_type_zephyr(m)) blessas = "BarnOwl::Message::Zephyr";
+ else if (owl_message_is_type_aim(m)) blessas = "BarnOwl::Message::AIM";
+ else if (owl_message_is_type_jabber(m)) blessas = "BarnOwl::Message::Jabber";
+ else if (owl_message_is_type_admin(m)) blessas = "BarnOwl::Message::Admin";
+ else if (owl_message_is_type_generic(m)) blessas = "BarnOwl::Message::Generic";
+ else blessas = "BarnOwl::Message";
hr = sv_2mortal(newRV_noinc((SV*)h));
return sv_bless(hr, gv_stashpv(blessas,0));
@@ -254,21 +254,21 @@
owl_global_set_have_config(&g);
/* create legacy variables */
- perl_get_sv("owl::id", TRUE);
- perl_get_sv("owl::class", TRUE);
- perl_get_sv("owl::instance", TRUE);
- perl_get_sv("owl::recipient", TRUE);
- perl_get_sv("owl::sender", TRUE);
- perl_get_sv("owl::realm", TRUE);
- perl_get_sv("owl::opcode", TRUE);
- perl_get_sv("owl::zsig", TRUE);
- perl_get_sv("owl::msg", TRUE);
- perl_get_sv("owl::time", TRUE);
- perl_get_sv("owl::host", TRUE);
- perl_get_av("owl::fields", TRUE);
+ perl_get_sv("BarnOwl::id", TRUE);
+ perl_get_sv("BarnOwl::class", TRUE);
+ perl_get_sv("BarnOwl::instance", TRUE);
+ perl_get_sv("BarnOwl::recipient", TRUE);
+ perl_get_sv("BarnOwl::sender", TRUE);
+ perl_get_sv("BarnOwl::realm", TRUE);
+ perl_get_sv("BarnOwl::opcode", TRUE);
+ perl_get_sv("BarnOwl::zsig", TRUE);
+ perl_get_sv("BarnOwl::msg", TRUE);
+ perl_get_sv("BarnOwl::time", TRUE);
+ perl_get_sv("BarnOwl::host", TRUE);
+ perl_get_av("BarnOwl::fields", TRUE);
if(file) {
- SV * cfg = get_sv("owl::configfile", TRUE);
+ SV * cfg = get_sv("BarnOwl::configfile", TRUE);
sv_setpv(cfg, file);
}
@@ -282,7 +282,7 @@
}
/* check if we have the formatting function */
- if (owl_perlconfig_is_function("owl::format_msg")) {
+ if (owl_perlconfig_is_function("BarnOwl::format_msg")) {
owl_global_set_config_format(&g, 1);
}
@@ -360,16 +360,16 @@
if (mode==1) {
char *ret = NULL;
ret = owl_perlconfig_call_with_message(subname?subname
- :"owl::_format_msg_legacy_wrap", m);
+ :"BarnOwl::_format_msg_legacy_wrap", m);
if (!ret) {
ret = owl_sprintf("@b([Perl Message Formatting Failed!])\n");
}
return ret;
} else {
char *ptr = NULL;
- if (owl_perlconfig_is_function("owl::receive_msg")) {
+ if (owl_perlconfig_is_function("BarnOwl::Hooks::receive_msg")) {
ptr = owl_perlconfig_call_with_message(subname?subname
- :"owl::_receive_msg_legacy_wrap", m);
+ :"BarnOwl::_receive_msg_legacy_wrap", m);
}
if (ptr) owl_free(ptr);
return(NULL);
@@ -451,9 +451,11 @@
void owl_perlconfig_mainloop()
{
+ if (!owl_perlconfig_is_function("BarnOwl::Hooks::mainloop_hook"))
+ return;
dSP ;
PUSHMARK(SP) ;
- call_pv("owl::mainloop_hook", G_DISCARD|G_EVAL);
+ call_pv("BarnOwl::Hooks::mainloop_hook", G_DISCARD|G_EVAL);
if(SvTRUE(ERRSV)) {
STRLEN n_a;
owl_function_error("%s", SvPV(ERRSV, n_a));
Modified: trunk/owl/perlglue.xs
===================================================================
--- trunk/owl/perlglue.xs 2007-01-10 04:33:42 UTC (rev 511)
+++ trunk/owl/perlglue.xs 2007-01-10 04:33:44 UTC (rev 512)
@@ -12,7 +12,7 @@
#define SV_IS_CODEREF(sv) (SvROK((sv)) && SvTYPE(SvRV((sv))) == SVt_PVCV)
-MODULE = owl PACKAGE = owl
+MODULE = BarnOwl PACKAGE = BarnOwl
char *
command(cmd)
Modified: trunk/owl/perlwrap.pm
===================================================================
--- trunk/owl/perlwrap.pm 2007-01-10 04:33:42 UTC (rev 511)
+++ trunk/owl/perlwrap.pm 2007-01-10 04:33:44 UTC (rev 512)
@@ -8,12 +8,13 @@
use strict;
use warnings;
-package owl;
+package BarnOwl;
BEGIN {
# bootstrap in C bindings and glue
- bootstrap owl 1.2;
+ *owl:: = \*BarnOwl::;
+ bootstrap BarnOwl 1.2;
};
use lib(get_data_dir()."/lib");
@@ -27,23 +28,23 @@
sub _format_msg_legacy_wrap {
my ($m) = @_;
$m->legacy_populate_global();
- return &owl::format_msg($m);
+ return &BarnOwl::format_msg($m);
}
# populate global variable space for legacy owlconf files
sub _receive_msg_legacy_wrap {
my ($m) = @_;
$m->legacy_populate_global();
- return &owl::receive_msg($m);
+ return &BarnOwl::Hooks::receive_msg($m);
}
-# make owl::<command>("foo") be aliases to owl::command("<command> foo");
+# make BarnOwl::<command>("foo") be aliases to BarnOwl::command("<command> foo");
sub AUTOLOAD {
our $AUTOLOAD;
my $called = $AUTOLOAD;
$called =~ s/.*:://;
$called =~ s/_/-/g;
- return &owl::command("$called ".join(" ",@_));
+ return &BarnOwl::command("$called ".join(" ",@_));
}
=head2 new_command NAME FUNC [{ARGS}]
@@ -69,19 +70,19 @@
);
no warnings 'uninitialized';
- owl::new_command_internal($name, $func, $args{summary}, $args{usage}, $args{description});
+ BarnOwl::new_command_internal($name, $func, $args{summary}, $args{usage}, $args{description});
}
#####################################################################
#####################################################################
-package owl::Message;
+package BarnOwl::Message;
sub new {
my $class = shift;
my %args = (@_);
if($class eq __PACKAGE__ && $args{type}) {
- $class = "owl::Message::" . ucfirst $args{type};
+ $class = "BarnOwl::Message::" . ucfirst $args{type};
}
return bless {%args}, $class;
}
@@ -136,12 +137,12 @@
sub delete {
my ($m) = @_;
- &owl::command("delete --id ".$m->id);
+ &BarnOwl::command("delete --id ".$m->id);
}
sub undelete {
my ($m) = @_;
- &owl::command("undelete --id ".$m->id);
+ &BarnOwl::command("undelete --id ".$m->id);
}
# Serializes the message into something similar to the zwgc->vt format
@@ -168,26 +169,26 @@
# Populate the annoying legacy global variables
sub legacy_populate_global {
my ($m) = @_;
- $owl::direction = $m->direction ;
- $owl::type = $m->type ;
- $owl::id = $m->id ;
- $owl::class = $m->class ;
- $owl::instance = $m->instance ;
- $owl::recipient = $m->recipient ;
- $owl::sender = $m->sender ;
- $owl::realm = $m->realm ;
- $owl::opcode = $m->opcode ;
- $owl::zsig = $m->zsig ;
- $owl::msg = $m->body ;
- $owl::time = $m->time ;
- $owl::host = $m->host ;
- $owl::login = $m->login ;
- $owl::auth = $m->auth ;
+ $BarnOwl::direction = $m->direction ;
+ $BarnOwl::type = $m->type ;
+ $BarnOwl::id = $m->id ;
+ $BarnOwl::class = $m->class ;
+ $BarnOwl::instance = $m->instance ;
+ $BarnOwl::recipient = $m->recipient ;
+ $BarnOwl::sender = $m->sender ;
+ $BarnOwl::realm = $m->realm ;
+ $BarnOwl::opcode = $m->opcode ;
+ $BarnOwl::zsig = $m->zsig ;
+ $BarnOwl::msg = $m->body ;
+ $BarnOwl::time = $m->time ;
+ $BarnOwl::host = $m->host ;
+ $BarnOwl::login = $m->login ;
+ $BarnOwl::auth = $m->auth ;
if ($m->fields) {
- @owl::fields = @{$m->fields};
+ @BarnOwl::fields = @{$m->fields};
@main::fields = @{$m->fields};
} else {
- @owl::fields = undef;
+ @BarnOwl::fields = undef;
@main::fields = undef;
}
}
@@ -199,25 +200,25 @@
#####################################################################
#####################################################################
-package owl::Message::Admin;
+package BarnOwl::Message::Admin;
-use base qw( owl::Message );
+use base qw( BarnOwl::Message );
sub header { return shift->{"header"}; }
#####################################################################
#####################################################################
-package owl::Message::Generic;
+package BarnOwl::Message::Generic;
-use base qw( owl::Message );
+use base qw( BarnOwl::Message );
#####################################################################
#####################################################################
-package owl::Message::AIM;
+package BarnOwl::Message::AIM;
-use base qw( owl::Message );
+use base qw( BarnOwl::Message );
# all non-loginout AIM messages are personal for now...
sub is_personal {
@@ -227,9 +228,9 @@
#####################################################################
#####################################################################
-package owl::Message::Zephyr;
+package BarnOwl::Message::Zephyr;
-use base qw( owl::Message );
+use base qw( BarnOwl::Message );
sub login_tty {
my ($m) = @_;
@@ -262,7 +263,7 @@
sub pretty_sender {
my ($m) = @_;
my $sender = $m->sender;
- my $realm = owl::zephyr_getrealm();
+ my $realm = BarnOwl::zephyr_getrealm();
$sender =~ s/\@$realm$//;
return $sender;
}
@@ -284,12 +285,6 @@
################################################################################
package owl;
-# Arrays of subrefs to be called at specific times.
-our @onStartSubs = ();
-our @onReceiveMsg = ();
-our @onMainLoop = ();
-our @onGetBuddyList = ();
-
################################################################################
# Mainloop hook
################################################################################
@@ -299,94 +294,49 @@
our $reload;
$reload = 0;
-# Functions to call hook lists
-sub runHook($@)
-{
- my $hook = shift;
- my @args = @_;
- $_->(@args) for (@$hook);
-}
-
-sub runHook_accumulate($@)
-{
- my $hook = shift;
- my @args = @_;
- return join("\n", map {$_->(@args)} @$hook);
-}
-
-sub mainloop_hook
-{
- runHook(\@onMainLoop);
-}
-
-################################################################################
-# Startup and Shutdown code
-################################################################################
-sub startup
-{
-# Modern versions of owl provides a great place to have startup stuff.
-# Put things in ~/.owl/startup
- onStart();
-}
-
-sub shutdown
-{
-# Modern versions of owl provides a great place to have shutdown stuff.
-# Put things in ~/.owl/shutdown
-
- # use $shutdown to tell modules that that's what we're doing.
- $shutdown = 1;
- mainloop_hook();
-}
-
-#Run this on start and reload. Adds modules and runs their startup functions.
+#Run this on start and reload. Adds modules
sub onStart
{
reload_init();
- #So that the user's .owlconf can have startsubs, we don't clear
- #onStartSubs; reload does however
- @onReceiveMsg = ();
- @onMainLoop = ();
- @onGetBuddyList = ();
-
loadModules();
- runHook(\@onStartSubs);
}
################################################################################
# Reload Code, taken from /afs/sipb/user/jdaniel/project/owl/perl
################################################################################
sub reload_hook (@)
{
- onStart();
+ BarnOwl::Hooks::startup();
return 1;
}
sub reload
{
# Use $reload to tell modules that we're performing a reload.
- $reload = 1;
- owl::mainloop_hook();
- $reload = 0;
- @onMainLoop = ();
- @onStartSubs = ();
+ {
+ local $reload = 1;
+ BarnOwl::mainloop_hook();
+ }
+
+ @BarnOwl::Hooks::onMainLoop = ();
+ @BarnOwl::Hooks::onStartSubs = ();
- # Do reload
- package main;
- if (do "$ENV{HOME}/.owlconf" && owl::reload_hook(@_))
- {
- return "owlconf reloaded";
- }
- else
- {
- return "$ENV{HOME}/.owlconf load attempted, but error encountered:\n$@";
- }
- package owl;
+ # Do reload
+ package main;
+ if (do "$ENV{HOME}/.owlconf" && BarnOwl::reload_hook(@_))
+ {
+ return "owlconf reloaded";
+ }
+ else
+ {
+ return "$ENV{HOME}/.owlconf load attempted, but error encountered:\n$@";
+ }
+ package owl;
}
sub reload_init ()
{
- owl::command('alias reload perl owl::reload()');
- owl::command('bindkey global "C-x C-r" command reload');
+ BarnOwl::command('alias reload perl BarnOwl::reload()');
+ BarnOwl::command('bindkey global "C-x C-r" command reload');
}
################################################################################
@@ -396,7 +346,7 @@
sub loadModules () {
my @modules;
my $rv;
- foreach my $dir ( owl::get_data_dir() . "/modules",
+ foreach my $dir ( BarnOwl::get_data_dir() . "/modules",
$ENV{HOME} . "/.owl/modules" )
{
opendir( MODULES, $dir );
@@ -405,18 +355,79 @@
@modules = grep( /\.pl$/, readdir(MODULES) );
foreach my $mod (@modules) {
+ owl::error("Loading $dir/$mod...");
unless ($rv = do "$dir/$mod") {
- owl::error("Couldn't load $dir/$mod:\n $@") if $@;
- owl::error("Couldn't run $dir/$mod:\n $!") unless defined $rv;
+ BarnOwl::error("Couldn't load $dir/$mod:\n $@") if $@;
+ BarnOwl::error("Couldn't run $dir/$mod:\n $!") unless defined $rv;
}
}
closedir(MODULES);
}
}
+package BarnOwl::Hooks;
+# Arrays of subrefs to be called at specific times.
+our @onStartSubs = ();
+our @onReceiveMsg = ();
+our @onMainLoop = ();
+our @onGetBuddyList = ();
+# Functions to call hook lists
+sub runHook($@)
+{
+ my $hook = shift;
+ my @args = @_;
+ $_->(@args) for (@$hook);
+}
+
+sub runHook_accumulate($@)
+{
+ my $hook = shift;
+ my @args = @_;
+ return join("\n", map {$_->(@args)} @$hook);
+}
+
################################################################################
+# Startup and Shutdown code
+################################################################################
+sub startup
+{
+ # Modern versions of owl provides a great place to have startup stuff.
+ # Put things in ~/.owl/startup
+
+ #So that the user's .owlconf can have startsubs, we don't clear
+ #onStartSubs; reload does however
+ @onReceiveMsg = ();
+ @onMainLoop = ();
+ @onGetBuddyList = ();
+
+ BarnOwl::onStart();
+
+ runHook(\@onStartSubs);
+
+ BarnOwl::startup() if *BarnOwl::startup{CODE};
+}
+
+sub shutdown
+{
+# Modern versions of owl provides a great place to have shutdown stuff.
+# Put things in ~/.owl/shutdown
+
+ # use $shutdown to tell modules that that's what we're doing.
+ $BarnOwl::shutdown = 1;
+ BarnOwl::mainloop_hook();
+
+ BarnOwl::shutdown() if *BarnOwl::shutdown{CODE};
+}
+
+sub mainloop_hook
+{
+ runHook(\@onMainLoop);
+ BarnOwl::mainlook_hook() if *BarnOwl::mainloop_hook{CODE};
+}
+
+################################################################################
# Hooks into receive_msg()
################################################################################
@@ -424,6 +435,7 @@
{
my $m = shift;
runHook(\@onReceiveMsg, $m);
+ BarnOwl::receive_msg($m) if *BarnOwl::receive_msg{CODE};
}
################################################################################
@@ -432,8 +444,7 @@
sub get_blist
{
- my $m = shift;
- return runHook_accumulate(\@onGetBuddyList, $m);
+ return runHook_accumulate(\@onGetBuddyList);
}
# switch to package main when we're done
@@ -445,14 +456,15 @@
onReceiveMsg
onMainLoop
onGetBuddyList ) {
- *{"main::".$hook} = \*{"owl::".$hook};
+ *{"main::".$hook} = \*{"BarnOwl::Hooks::".$hook};
+ *{"owl::".$hook} = \*{"BarnOwl::Hooks::".$hook};
}
}
# load the config file
-if (-r $owl::configfile) {
+if (-r $BarnOwl::configfile) {
undef $@;
- do $owl::configfile;
+ do $BarnOwl::configfile;
die $@ if $@;
}