[857] in BarnOwl Developers
[D-O-H] r847 - in branches/barnowl_unicode: . owl owl/perl/modules/IRC/lib/BarnOwl/Module
daemon@ATHENA.MIT.EDU (asedeno@MIT.EDU)
Thu Oct 29 18:10:28 2009
Resent-From: nelhage@mit.edu
Resent-To: barnowl-dev-mtg@charon.mit.edu
To: dirty-owl-hackers@mit.edu
From: asedeno@MIT.EDU
Reply-to: dirty-owl-hackers@MIT.EDU
Date: Sat, 12 Jan 2008 01:19:12 -0500 (EST)
Author: asedeno
Date: 2008-01-12 01:19:11 -0500 (Sat, 12 Jan 2008)
New Revision: 847
Modified:
branches/barnowl_unicode/
branches/barnowl_unicode/owl/
branches/barnowl_unicode/owl/owl.c
branches/barnowl_unicode/owl/owl.h
branches/barnowl_unicode/owl/perl/modules/IRC/lib/BarnOwl/Module/IRC.pm
branches/barnowl_unicode/owl/stylefunc.c
branches/barnowl_unicode/owl/zephyr.c
Log:
Merged revisions 831-846 via svnmerge from
file:///afs/sipb.mit.edu/project/barnowl/src/svn/trunk
........
r834 | chmrr | 2008-01-11 17:11:00 -0500 (Fri, 11 Jan 2008) | 3 lines
r1876@utwig: chmrr | 2008-01-11 17:08:47 -0500
* Default connections on a per-channel-name basis
........
r836 | nelhage | 2008-01-11 22:15:06 -0500 (Fri, 11 Jan 2008) | 2 lines
Nuke the stylefunc_default C code
........
r837 | nelhage | 2008-01-11 22:17:19 -0500 (Fri, 11 Jan 2008) | 1 line
Nuke the vt style as well
........
r841 | nelhage | 2008-01-11 22:40:17 -0500 (Fri, 11 Jan 2008) | 2 lines
Nuke a warning
........
r845 | nelhage | 2008-01-12 01:11:53 -0500 (Sat, 12 Jan 2008) | 2 lines
I'm tired of those stupid warning.
........
Property changes on: branches/barnowl_unicode
___________________________________________________________________
Name: svnmerge-integrated
- /trunk:1-830
+ /trunk:1-846
Property changes on: branches/barnowl_unicode/owl
___________________________________________________________________
Name: svk:merge
- 06e3988a-d725-0410-af47-c5dd11e74598:/local/barnowl:1823
8baf6839-b125-0410-9df9-922793c80423:/local/barnowl:20981
8baf6839-b125-0410-9df9-922793c80423:/local/owl:15641
bb873fd7-8e23-0410-944a-99ec44c633eb:/local/d-o-h/branches/par:19594
fe09232e-8620-0410-8e36-e6b4839e121d:/branches/par:688
+ 06e3988a-d725-0410-af47-c5dd11e74598:/local/barnowl:1876
8baf6839-b125-0410-9df9-922793c80423:/local/barnowl:20981
8baf6839-b125-0410-9df9-922793c80423:/local/owl:15641
bb873fd7-8e23-0410-944a-99ec44c633eb:/local/d-o-h/branches/par:19594
fe09232e-8620-0410-8e36-e6b4839e121d:/branches/par:688
Modified: branches/barnowl_unicode/owl/owl.c
===================================================================
--- branches/barnowl_unicode/owl/owl.c 2008-01-12 06:18:20 UTC (rev 846)
+++ branches/barnowl_unicode/owl/owl.c 2008-01-12 06:19:11 UTC (rev 847)
@@ -261,12 +261,7 @@
s=owl_malloc(sizeof(owl_style));
owl_style_create_internal(s, "basic", &owl_stylefunc_basic, "Basic message formatting.");
owl_global_add_style(&g, s);
-#if 0
s=owl_malloc(sizeof(owl_style));
- owl_style_create_internal(s, "vt", &owl_stylefunc_vt, "VT message formatting.");
- owl_global_add_style(&g, s);
-#endif
- s=owl_malloc(sizeof(owl_style));
owl_style_create_internal(s, "oneline", &owl_stylefunc_oneline, "Formats for one-line-per-message");
owl_global_add_style(&g, s);
Modified: branches/barnowl_unicode/owl/owl.h
===================================================================
--- branches/barnowl_unicode/owl/owl.h 2008-01-12 06:18:20 UTC (rev 846)
+++ branches/barnowl_unicode/owl/owl.h 2008-01-12 06:19:11 UTC (rev 847)
@@ -66,6 +66,8 @@
typedef void WINDOW;
/* logout is defined in FreeBSD. */
#define logout logout_
+/* aim.h defines bool */
+#define HAS_BOOL
#include <perl.h>
#undef logout
#include "XSUB.h"
@@ -75,14 +77,14 @@
static const char owl_h_fileIdent[] = "$Id$";
-#define STRINGIFY(x) _STRINGIFY(x)
+#define BARNOWL_STRINGIFY(x) _STRINGIFY(x)
#define _STRINGIFY(x) #x
#ifndef OWL_SVN_REVNO
#define OWL_SVN_REVNO ????
#endif
-#define OWL_VERSION_STRING "r" STRINGIFY(OWL_SVN_REVNO)
+#define OWL_VERSION_STRING "r" BARNOWL_STRINGIFY(OWL_SVN_REVNO)
/* Feature that is being tested to redirect stderr through a pipe.
Modified: branches/barnowl_unicode/owl/perl/modules/IRC/lib/BarnOwl/Module/IRC.pm
===================================================================
--- branches/barnowl_unicode/owl/perl/modules/IRC/lib/BarnOwl/Module/IRC.pm 2008-01-12 06:18:20 UTC (rev 846)
+++ branches/barnowl_unicode/owl/perl/modules/IRC/lib/BarnOwl/Module/IRC.pm 2008-01-12 06:19:11 UTC (rev 847)
@@ -27,6 +27,7 @@
# Hash alias -> BarnOwl::Module::IRC::Connection object
our %ircnets;
+our %channels;
sub startup {
BarnOwl::new_variable_string('irc:nick', {
@@ -209,6 +210,8 @@
my $cmd = shift;
my $conn = get_connection(\@_);
my $chan = shift or die("Usage: $cmd channel\n");
+ $channels{$chan} ||= [];
+ push @{$channels{$chan}}, $conn;
$conn->join($chan);
}
@@ -216,6 +219,7 @@
my $cmd = shift;
my $conn = get_connection(\@_);
my $chan = get_channel(\@_) || die("Usage: $cmd <channel>\n");
+ $channels{$chan} = [grep {$_ ne $conn} @{$channels{$chan} || []}];
$conn->part($chan);
}
@@ -250,6 +254,10 @@
shift @$args;
return get_connection_by_alias(shift @$args);
}
+ my $channel = $args->[-1];
+ if ($channel =~ /^#/ and $channels{$channel} and @{$channels{$channel}} == 1) {
+ return $channels{$channel}[0];
+ }
my $m = BarnOwl::getcurmsg();
if($m && $m->type eq 'IRC') {
return get_connection_by_alias($m->network);
Modified: branches/barnowl_unicode/owl/stylefunc.c
===================================================================
--- branches/barnowl_unicode/owl/stylefunc.c 2008-01-12 06:18:20 UTC (rev 846)
+++ branches/barnowl_unicode/owl/stylefunc.c 2008-01-12 06:19:11 UTC (rev 847)
@@ -220,182 +220,6 @@
}
}
-void owl_stylefunc_default(owl_fmtext *fm, owl_message *m)
-{
- char *shorttimestr;
-#ifdef HAVE_LIBZEPHYR
- char *ptr, *zsigbuff, frombuff[LINE];
- ZNotice_t *n;
-#endif
-
- shorttimestr=owl_message_get_shorttimestr(m);
-
- if (owl_message_is_type_zephyr(m) && owl_message_is_direction_in(m)) {
-#ifdef HAVE_LIBZEPHYR
- n=owl_message_get_notice(m);
-
- /* edit the from addr for printing */
- strcpy(frombuff, owl_message_get_sender(m));
- ptr=strchr(frombuff, '@');
- if (ptr && !strncmp(ptr+1, owl_zephyr_get_realm(), strlen(owl_zephyr_get_realm()))) {
- *ptr='\0';
- }
-
- /* set the message for printing */
- owl_fmtext_append_normal(fm, OWL_TABSTR);
-
- if (owl_message_is_ping(m) && owl_message_is_private(m)) {
- owl_fmtext_append_bold(fm, "PING");
- owl_fmtext_append_normal(fm, " from ");
- owl_fmtext_append_bold(fm, frombuff);
- owl_fmtext_append_normal(fm, "\n");
- } else if (owl_message_is_loginout(m)) {
- char *host, *tty;
-
- host=owl_message_get_attribute_value(m, "loginhost");
- tty=owl_message_get_attribute_value(m, "logintty");
-
- if (owl_message_is_login(m)) {
- owl_fmtext_append_bold(fm, "LOGIN");
- } else if (owl_message_is_logout(m)) {
- owl_fmtext_append_bold(fm, "LOGOUT");
- }
-
- if (owl_message_is_pseudo(m)) owl_fmtext_append_bold(fm, " (PSEUDO)");
-
- owl_fmtext_append_normal(fm, " for ");
- ptr=short_zuser(owl_message_get_instance(m));
- owl_fmtext_append_bold(fm, ptr);
- owl_free(ptr);
- owl_fmtext_append_normal(fm, " at ");
- owl_fmtext_append_normal(fm, host ? host : "");
- owl_fmtext_append_normal(fm, " ");
- owl_fmtext_append_normal(fm, tty ? tty : "");
- owl_fmtext_append_normal(fm, " ");
- owl_fmtext_append_normal(fm, shorttimestr);
- owl_fmtext_append_normal(fm, "\n");
- } else {
- owl_fmtext_append_normal(fm, owl_message_get_class(m));
- owl_fmtext_append_normal(fm, " / ");
- owl_fmtext_append_normal(fm, owl_message_get_instance(m));
- owl_fmtext_append_normal(fm, " / ");
- owl_fmtext_append_bold(fm, frombuff);
- if (strcasecmp(owl_message_get_realm(m), ZGetRealm())) {
- owl_fmtext_append_normal(fm, " {");
- owl_fmtext_append_normal(fm, owl_message_get_realm(m));
- owl_fmtext_append_normal(fm, "}");
- }
- if (strcmp(owl_message_get_opcode(m), "")) {
- owl_fmtext_append_normal(fm, " [");
- owl_fmtext_append_normal(fm, owl_message_get_opcode(m));
- owl_fmtext_append_normal(fm, "]");
- }
-
- owl_fmtext_append_normal(fm, " ");
- owl_fmtext_append_normal(fm, shorttimestr);
-
- /* stick on the zsig */
- zsigbuff=owl_malloc(strlen(owl_message_get_zsig(m))+30);
- owl_message_pretty_zsig(m, zsigbuff);
- owl_fmtext_append_normal(fm, " (");
- owl_fmtext_append_ztext(fm, zsigbuff);
- owl_fmtext_append_normal(fm, ")");
- owl_fmtext_append_normal(fm, "\n");
- owl_free(zsigbuff);
-
- owl_style_basic_format_body(fm, m);
-
- /* make private messages bold for smaat users */
- if (owl_global_is_userclue(&g, OWL_USERCLUE_CLASSES)) {
- if (owl_message_is_personal(m)) {
- owl_fmtext_addattr(fm, OWL_FMTEXT_ATTR_BOLD);
- }
- }
- }
-
-#endif
- } else if (owl_message_is_type_zephyr(m) && owl_message_is_direction_out(m)) {
- char *zsigbuff, *foo;
-
- owl_fmtext_append_normal(fm, OWL_TABSTR);
- owl_fmtext_append_normal(fm, "Zephyr sent to ");
- foo=short_zuser(owl_message_get_recipient(m));
- owl_fmtext_append_normal(fm, foo);
- owl_free(foo);
-
- owl_fmtext_append_normal(fm, " ");
- owl_fmtext_append_normal(fm, shorttimestr);
-
- owl_fmtext_append_normal(fm, " (Zsig: ");
-
- zsigbuff=owl_malloc(strlen(owl_message_get_zsig(m))+30);
- owl_message_pretty_zsig(m, zsigbuff);
- owl_fmtext_append_ztext(fm, zsigbuff);
- owl_free(zsigbuff);
-
- owl_fmtext_append_normal(fm, ")");
- owl_fmtext_append_normal(fm, "\n");
- owl_style_basic_format_body(fm, m);
- } else if (owl_message_is_type_aim(m)) {
- if (owl_message_is_loginout(m)) {
- owl_fmtext_append_normal(fm, OWL_TABSTR);
- if (owl_message_is_login(m)) {
- owl_fmtext_append_bold(fm, "AIM LOGIN");
- } else {
- owl_fmtext_append_bold(fm, "AIM LOGOUT");
- }
- owl_fmtext_append_normal(fm, " for ");
- owl_fmtext_append_normal(fm, owl_message_get_sender(m));
- owl_fmtext_append_normal(fm, " ");
- owl_fmtext_append_normal(fm, shorttimestr);
- owl_fmtext_append_normal(fm, "\n");
- } else if (owl_message_is_direction_in(m)) {
- owl_fmtext_append_bold(fm, OWL_TABSTR);
- owl_fmtext_append_bold(fm, "AIM from ");
- owl_fmtext_append_bold(fm, owl_message_get_sender(m));
-
- owl_fmtext_append_normal(fm, " ");
- owl_fmtext_append_normal(fm, shorttimestr);
-
- owl_fmtext_append_bold(fm, "\n");
- owl_style_basic_format_body(fm, m);
- } else if (owl_message_is_direction_out(m)) {
- owl_fmtext_append_normal(fm, OWL_TABSTR);
- owl_fmtext_append_normal(fm, "AIM sent to ");
- owl_fmtext_append_normal(fm, owl_message_get_recipient(m));
- owl_fmtext_append_normal(fm, " ");
- owl_fmtext_append_normal(fm, shorttimestr);
- owl_fmtext_append_normal(fm, "\n");
- owl_style_basic_format_body(fm, m);
- }
- } else if (owl_message_is_type_admin(m)) {
- char *header;
-
- header=owl_message_get_attribute_value(m, "adminheader");
-
- owl_fmtext_append_normal(fm, OWL_TABSTR);
- owl_fmtext_append_bold(fm, "OWL ADMIN ");
- owl_fmtext_append_ztext(fm, header);
- owl_fmtext_append_normal(fm, "\n");
- owl_style_basic_format_body(fm, m);
- } else {
- char *header;
-
- header=owl_sprintf("%s from: %s to: %s",
- owl_message_get_type(m),
- owl_message_get_sender(m),
- owl_message_get_recipient(m));
-
- owl_fmtext_append_normal(fm, OWL_TABSTR);
- owl_fmtext_append_normal(fm, header);
- owl_fmtext_append_normal(fm, " ");
- owl_fmtext_append_normal(fm, shorttimestr);
- owl_fmtext_append_normal(fm, "\n");
- owl_style_basic_format_body(fm, m);
- }
- owl_free(shorttimestr);
-}
-
void owl_stylefunc_oneline(owl_fmtext *fm, owl_message *m)
{
char *tmp;
@@ -525,205 +349,3 @@
}
}
-
-void owl_stylefunc_vt(owl_fmtext *fm, owl_message *m)
-{
-#ifdef HAVE_LIBZEPHYR
- char *body, *indent, *ptr, frombuff[LINE];
- owl_fmtext fm_first, fm_other, fm_tmp;
- ZNotice_t *n;
-#endif
- char *sender, *hostname, *timestr, *classinst1, *classinst2;
-
- if (owl_message_is_type_zephyr(m) && owl_message_is_direction_in(m)) {
-#ifdef HAVE_LIBZEPHYR
- n=owl_message_get_notice(m);
-
- /* get the body */
- body=owl_malloc(strlen(owl_message_get_body(m))+30);
- strcpy(body, owl_message_get_body(m));
-
- /* add a newline if we need to */
- if (body[0]!='\0' && body[strlen(body)-1]!='\n') {
- strcat(body, "\n");
- }
-
- owl_fmtext_init_null(&fm_tmp);
- owl_fmtext_append_ztext(&fm_tmp, body);
- owl_fmtext_init_null(&fm_first);
- owl_fmtext_truncate_lines(&fm_tmp, 0, 1, &fm_first);
-
- /* do the indenting into indent */
- indent=owl_malloc(strlen(body)+owl_text_num_lines(body)*OWL_MSGTAB+10);
- owl_text_indent(indent, body, 31);
-
- owl_fmtext_free(&fm_tmp);
- owl_fmtext_init_null(&fm_tmp);
- owl_fmtext_append_ztext(&fm_tmp, indent);
- owl_fmtext_init_null(&fm_other);
- owl_fmtext_truncate_lines(&fm_tmp, 1, owl_fmtext_num_lines(&fm_tmp)-1, &fm_other);
- owl_fmtext_free(&fm_tmp);
-
- /* edit the from addr for printing */
- strcpy(frombuff, owl_message_get_sender(m));
- ptr=strchr(frombuff, '@');
- if (ptr && !strncmp(ptr+1, owl_zephyr_get_realm(), strlen(owl_zephyr_get_realm()))) {
- *ptr='\0';
- }
- sender=owl_sprintf("%-9.9s", frombuff);
-
- hostname=owl_sprintf("%-9.9s", owl_message_get_hostname(m));
- timestr=owl_strdup("00:00");
- classinst1=owl_sprintf("<%s>[%s]", owl_message_get_class(m), owl_message_get_instance(m));
- classinst2=owl_sprintf("%-9.9s", classinst1);
-
- /* set the message for printing */
- owl_fmtext_append_normal(fm, OWL_TABSTR);
-
- if (owl_message_is_ping(m) && owl_message_is_private(m)) {
- owl_fmtext_append_bold(fm, "PING");
- owl_fmtext_append_normal(fm, " from ");
- owl_fmtext_append_bold(fm, frombuff);
- owl_fmtext_append_normal(fm, "\n");
- } else if (owl_message_is_loginout(m)) {
- char *host, *tty;
-
- host=owl_message_get_attribute_value(m, "loginhost");
- tty=owl_message_get_attribute_value(m, "logintty");
-
- if (owl_message_is_login(m)) {
- owl_fmtext_append_bold(fm, "LOGIN");
- } else if (owl_message_is_logout(m)) {
- owl_fmtext_append_bold(fm, "LOGOUT");
- }
- if (owl_message_is_pseudo(m)) owl_fmtext_append_bold(fm, " (PSEUDO)");
-
- owl_fmtext_append_normal(fm, " for ");
- ptr=short_zuser(owl_message_get_instance(m));
- owl_fmtext_append_bold(fm, ptr);
- owl_free(ptr);
- owl_fmtext_append_normal(fm, " at ");
- owl_fmtext_append_normal(fm, host ? host : "");
- owl_fmtext_append_normal(fm, " ");
- owl_fmtext_append_normal(fm, tty ? tty : "");
- owl_fmtext_append_normal(fm, "\n");
- } else {
- owl_fmtext_append_normal(fm, sender);
- owl_fmtext_append_normal(fm, "|");
- owl_fmtext_append_normal(fm, hostname);
- owl_fmtext_append_normal(fm, " ");
- owl_fmtext_append_normal(fm, timestr);
- owl_fmtext_append_normal(fm, " ");
- owl_fmtext_append_normal(fm, classinst2);
-
- owl_fmtext_append_normal(fm, " ");
- owl_fmtext_append_fmtext(fm, &fm_first);
- owl_fmtext_append_fmtext(fm, &fm_other);
-
- owl_fmtext_free(&fm_other);
- owl_fmtext_free(&fm_first);
-
- /* make private messages bold for smaat users */
- if (owl_global_is_userclue(&g, OWL_USERCLUE_CLASSES)) {
- if (owl_message_is_personal(m)) {
- owl_fmtext_addattr(fm, OWL_FMTEXT_ATTR_BOLD);
- }
- }
- }
-
- owl_free(sender);
- owl_free(hostname);
- owl_free(timestr);
- owl_free(classinst1);
- owl_free(classinst2);
-
- owl_free(body);
- owl_free(indent);
-#endif
- } else if (owl_message_is_type_zephyr(m) && owl_message_is_direction_out(m)) {
- char *indent, *text, *zsigbuff, *foo;
-
- text=owl_message_get_body(m);
-
- indent=owl_malloc(strlen(text)+owl_text_num_lines(text)*OWL_MSGTAB+10);
- owl_text_indent(indent, text, OWL_MSGTAB);
- owl_fmtext_append_normal(fm, OWL_TABSTR);
- owl_fmtext_append_normal(fm, "Zephyr sent to ");
- foo=short_zuser(owl_message_get_recipient(m));
- owl_fmtext_append_normal(fm, foo);
- owl_free(foo);
- owl_fmtext_append_normal(fm, " (Zsig: ");
-
- zsigbuff=owl_malloc(strlen(owl_message_get_zsig(m))+30);
- owl_message_pretty_zsig(m, zsigbuff);
- owl_fmtext_append_ztext(fm, zsigbuff);
- owl_free(zsigbuff);
-
- owl_fmtext_append_normal(fm, ")");
- owl_fmtext_append_normal(fm, "\n");
- owl_fmtext_append_ztext(fm, indent);
- if (text[strlen(text)-1]!='\n') {
- owl_fmtext_append_normal(fm, "\n");
- }
-
- owl_free(indent);
- } else if (owl_message_is_type_aim(m)) {
- char *indent;
-
- if (owl_message_is_loginout(m)) {
- owl_fmtext_append_normal(fm, OWL_TABSTR);
- if (owl_message_is_login(m)) {
- owl_fmtext_append_bold(fm, "AIM LOGIN");
- } else {
- owl_fmtext_append_bold(fm, "AIM LOGOUT");
- }
- owl_fmtext_append_normal(fm, " for ");
- owl_fmtext_append_normal(fm, owl_message_get_sender(m));
- owl_fmtext_append_normal(fm, "\n");
- } else if (owl_message_is_direction_in(m)) {
- indent=owl_malloc(strlen(owl_message_get_body(m))+owl_text_num_lines(owl_message_get_body(m))*OWL_MSGTAB+10);
- owl_text_indent(indent, owl_message_get_body(m), OWL_MSGTAB);
- owl_fmtext_append_bold(fm, OWL_TABSTR);
- owl_fmtext_append_bold(fm, "AIM from ");
- owl_fmtext_append_bold(fm, owl_message_get_sender(m));
- owl_fmtext_append_bold(fm, "\n");
- owl_fmtext_append_bold(fm, indent);
- if (indent[strlen(indent)-1]!='\n') {
- owl_fmtext_append_normal(fm, "\n");
- }
- owl_free(indent);
- } else if (owl_message_is_direction_out(m)) {
- indent=owl_malloc(strlen(owl_message_get_body(m))+owl_text_num_lines(owl_message_get_body(m))*OWL_MSGTAB+10);
- owl_text_indent(indent, owl_message_get_body(m), OWL_MSGTAB);
- owl_fmtext_append_normal(fm, OWL_TABSTR);
- owl_fmtext_append_normal(fm, "AIM sent to ");
- owl_fmtext_append_normal(fm, owl_message_get_recipient(m));
- owl_fmtext_append_normal(fm, "\n");
- owl_fmtext_append_ztext(fm, indent);
- if (indent[strlen(indent)-1]!='\n') {
- owl_fmtext_append_normal(fm, "\n");
- }
- owl_free(indent);
- }
- } else if (owl_message_is_type_admin(m)) {
- char *text, *header, *indent;
-
- text=owl_message_get_body(m);
- header=owl_message_get_attribute_value(m, "adminheader");
-
- indent=owl_malloc(strlen(text)+owl_text_num_lines(text)*OWL_MSGTAB+10);
- owl_text_indent(indent, text, OWL_MSGTAB);
- owl_fmtext_append_normal(fm, OWL_TABSTR);
- owl_fmtext_append_bold(fm, "OWL ADMIN ");
- owl_fmtext_append_ztext(fm, header);
- owl_fmtext_append_normal(fm, "\n");
- owl_fmtext_append_ztext(fm, indent);
- if (text[strlen(text)-1]!='\n') {
- owl_fmtext_append_normal(fm, "\n");
- }
-
- owl_free(indent);
- } else {
-
- }
-}
Modified: branches/barnowl_unicode/owl/zephyr.c
===================================================================
--- branches/barnowl_unicode/owl/zephyr.c 2008-01-12 06:18:20 UTC (rev 846)
+++ branches/barnowl_unicode/owl/zephyr.c 2008-01-12 06:19:11 UTC (rev 847)
@@ -602,7 +602,7 @@
} else if (!strcmp(retnotice->z_message, ZSRVACK_NOTSENT)) {
#define BUFFLEN 1024
if (retnotice->z_recipient == NULL
- || *retnotice->z_recipient == NULL
+ || *retnotice->z_recipient == 0
|| *retnotice->z_recipient == '@') {
char buff[BUFFLEN];
owl_function_error("No one subscribed to class %s", retnotice->z_class);