----- Forwarded message from [EMAIL PROTECTED] -----
Date: Mon, 24 Apr 2000 22:28:34 +0200
Subject: CPAN Upload: JPRIT/Event-0.75.tar.gz
From: [EMAIL PROTECTED]
To: [EMAIL PROTECTED],
[EMAIL PROTECTED]
Reply-To: [EMAIL PROTECTED]
The uploaded file
Event-0.75.tar.gz
has entered CPAN as
file: $CPAN/authors/id/JPRIT/Event-0.75.tar.gz
size: 148243 bytes
md5: 36ffe7bc32b983ce512b877987d54158
No action is required on your part
Request entered by: JPRIT (Joshua N. Pritikin)
Request entered on: Mon, 24 Apr 2000 20:27:43 GMT
Request completed: Mon, 24 Apr 2000 20:28:34 GMT
Virtually Yours,
Id: paused,v 1.68 1999/10/22 14:39:12 k Exp k
----- End forwarded message -----
# This is a patch for Event-0.74 to update it to Event-0.75
#
# To apply this patch:
# STEP 1: Chdir to the source directory.
# STEP 2: Run the 'applypatch' program with this patch file as input.
#
# If you do not have 'applypatch', it is part of the 'makepatch' package
# that you can fetch from the Comprehensive Perl Archive Network:
# http://www.perl.com/CPAN/authors/Johan_Vromans/makepatch-x.y.tar.gz
# In the above URL, 'x' should be 2 or higher.
#
# To apply this patch without the use of 'applypatch':
# STEP 1: Chdir to the source directory.
# STEP 2: Run the 'patch' program with this file as input.
#
#### End of Preamble ####
#### Patch data follows ####
gdiff -up '/usr/tmp/mp2253.d/old/Event-0.74/ChangeLog'
'/usr/tmp/mp2253.d/new/Event-0.75/ChangeLog'
Index: ./ChangeLog
--- ./ChangeLog Wed Apr 19 12:43:42 2000
+++ ./ChangeLog Mon Apr 24 09:43:08 2000
@@ -1,3 +1,12 @@
+2000-04-24 Joshua Pritikin <[EMAIL PROTECTED]>
+
+ * Release 0.75.
+
+ * Attributes called in "set" mode now return the new value.
+
+ * Renamed data() to private() and added back the old data().
+ Added tests & updated the pod.
+
2000-04-19 Joshua Pritikin <[EMAIL PROTECTED]>
* Release 0.74.
gdiff -up '/usr/tmp/mp2253.d/old/Event-0.74/TODO'
'/usr/tmp/mp2253.d/new/Event-0.75/TODO'
Index: ./TODO
--- ./TODO Tue Mar 14 16:53:26 2000
+++ ./TODO Mon Apr 24 09:42:25 2000
@@ -4,8 +4,6 @@ finish up lexical warnings
omitting parked=>1 should be a warning, not an error?
-attribute set methods should return the new value?
-
demo/tail-f
see File::Tail or GNU textutils for implementation examples
gdiff -up '/usr/tmp/mp2253.d/old/Event-0.74/c/group.c'
'/usr/tmp/mp2253.d/new/Event-0.75/c/group.c'
Index: ./c/group.c
--- ./c/group.c Tue Feb 15 15:17:22 2000
+++ ./c/group.c Mon Apr 24 09:38:14 2000
@@ -117,16 +117,17 @@ static void pe_group_del(pe_group *gp, p
WKEYMETH(_group_timeout) {
pe_group *gp = (pe_group*)ev;
- if (!nval) {
- dSP;
- XPUSHs(gp->timeout);
- PUTBACK;
- } else {
+ if (nval) {
SV *old = gp->timeout;
gp->timeout = SvREFCNT_inc(nval);
SvREFCNT_dec(old);
VERIFYINTERVAL("group", gp->timeout);
/* recalc expiration XXX */
+ }
+ {
+ dSP;
+ XPUSHs(gp->timeout);
+ PUTBACK;
}
}
gdiff -up '/usr/tmp/mp2253.d/old/Event-0.74/c/idle.c'
'/usr/tmp/mp2253.d/new/Event-0.75/c/idle.c'
Index: ./c/idle.c
--- ./c/idle.c Tue Feb 15 15:17:55 2000
+++ ./c/idle.c Mon Apr 24 09:38:47 2000
@@ -100,29 +100,31 @@ static void pe_idle_stop(pe_watcher *ev)
WKEYMETH(_idle_max_interval) {
pe_idle *ip = (pe_idle*) ev;
- if (!nval) {
- dSP;
- XPUSHs(ip->max_interval);
- PUTBACK;
- } else {
+ if (nval) {
SV *old = ip->max_interval;
ip->max_interval = SvREFCNT_inc(nval);
if (old) SvREFCNT_dec(old);
VERIFYINTERVAL("max", ip->max_interval);
}
+ {
+ dSP;
+ XPUSHs(ip->max_interval);
+ PUTBACK;
+ }
}
WKEYMETH(_idle_min_interval) {
pe_idle *ip = (pe_idle*) ev;
- if (!nval) {
- dSP;
- XPUSHs(ip->min_interval);
- PUTBACK;
- } else {
+ if (nval) {
SV *old = ip->min_interval;
ip->min_interval = SvREFCNT_inc(nval);
if (old) SvREFCNT_dec(old);
VERIFYINTERVAL("min", ip->min_interval);
+ }
+ {
+ dSP;
+ XPUSHs(ip->min_interval);
+ PUTBACK;
}
}
gdiff -up '/usr/tmp/mp2253.d/old/Event-0.74/c/io.c'
'/usr/tmp/mp2253.d/new/Event-0.75/c/io.c'
Index: ./c/io.c
--- ./c/io.c Thu Feb 10 08:27:22 2000
+++ ./c/io.c Mon Apr 24 09:39:34 2000
@@ -127,11 +127,7 @@ static void pe_io_reset_handle(pe_watche
WKEYMETH(_io_poll) {
pe_io *io = (pe_io*)ev;
- if (!nval) {
- dSP;
- XPUSHs(sv_2mortal(events_mask_2sv(io->poll)));
- PUTBACK;
- } else {
+ if (nval) {
int nev = sv_2events_mask(nval, PE_R|PE_W|PE_E);
if (io->timeout) nev |= PE_T;
else nev &= ~PE_T;
@@ -140,48 +136,45 @@ WKEYMETH(_io_poll) {
_io_restart(ev);
}
}
+ {
+ dSP;
+ XPUSHs(sv_2mortal(events_mask_2sv(io->poll)));
+ PUTBACK;
+ }
}
WKEYMETH(_io_handle) {
pe_io *io = (pe_io*)ev;
- if (!nval) {
- dSP;
- XPUSHs(io->handle);
- PUTBACK;
- } else {
+ if (nval) {
SV *old = io->handle;
io->handle = SvREFCNT_inc(nval);
SvREFCNT_dec(old);
io->fd = -1;
_io_restart(ev);
}
+ {
+ dSP;
+ XPUSHs(io->handle);
+ PUTBACK;
+ }
}
WKEYMETH(_io_timeout) {
pe_io *io = (pe_io*)ev;
- if (!nval) {
+ if (nval) {
+ io->timeout = SvOK(nval)? SvNV(nval) : 0; /*undef is ok*/
+ _io_restart(ev);
+ }
+ {
dSP;
XPUSHs(sv_2mortal(newSVnv(io->timeout)));
PUTBACK;
- } else {
- io->timeout = SvOK(nval)? SvNV(nval) : 0; /*undef is ok*/
- _io_restart(ev);
}
}
WKEYMETH(_io_timeout_cb) {
pe_io *io = (pe_io*)ev;
- if (!nval) {
- SV *ret = (WaTMPERLCB(ev)?
- (SV*) io->tm_callback :
- (io->tm_callback?
- sv_2mortal(newSVpvf("<FPTR=0x%x EXT=0x%x>",
- io->tm_callback, io->tm_ext_data)) :
- &PL_sv_undef));
- dSP;
- XPUSHs(ret);
- PUTBACK;
- } else {
+ if (nval) {
AV *av;
SV *sv;
SV *old=0;
@@ -207,6 +200,17 @@ WKEYMETH(_io_timeout_cb) {
}
if (old)
SvREFCNT_dec(old);
+ }
+ {
+ SV *ret = (WaTMPERLCB(ev)?
+ (SV*) io->tm_callback :
+ (io->tm_callback?
+ sv_2mortal(newSVpvf("<FPTR=0x%x EXT=0x%x>",
+ io->tm_callback, io->tm_ext_data)) :
+ &PL_sv_undef));
+ dSP;
+ XPUSHs(ret);
+ PUTBACK;
}
}
gdiff -up '/usr/tmp/mp2253.d/old/Event-0.74/c/signal.c'
'/usr/tmp/mp2253.d/new/Event-0.75/c/signal.c'
Index: ./c/signal.c
--- ./c/signal.c Tue Feb 8 17:24:47 2000
+++ ./c/signal.c Mon Apr 24 09:40:05 2000
@@ -69,12 +69,7 @@ static void pe_signal_stop(pe_watcher *_
WKEYMETH(_signal_signal) {
pe_signal *sg = (pe_signal*) ev;
- if (!nval) {
- dSP;
- XPUSHs(sg->signal > 0?
- sv_2mortal(newSVpv(PL_sig_name[sg->signal],0)) : &PL_sv_undef);
- PUTBACK;
- } else {
+ if (nval) {
STRLEN n_a;
int active = WaPOLLING(ev);
int sig = whichsig(SvPV(nval, n_a));
@@ -86,6 +81,12 @@ WKEYMETH(_signal_signal) {
if (active) pe_watcher_off(ev);
sg->signal = sig;
if (active) pe_watcher_on(ev, 0);
+ }
+ {
+ dSP;
+ XPUSHs(sg->signal > 0?
+ sv_2mortal(newSVpv(PL_sig_name[sg->signal],0)) : &PL_sv_undef);
+ PUTBACK;
}
}
gdiff -up '/usr/tmp/mp2253.d/old/Event-0.74/c/tied.c'
'/usr/tmp/mp2253.d/new/Event-0.75/c/tied.c'
Index: ./c/tied.c
--- ./c/tied.c Wed Mar 8 11:46:43 2000
+++ ./c/tied.c Mon Apr 24 09:40:32 2000
@@ -60,25 +60,22 @@ static void pe_tied_alarm(pe_watcher *ev
WKEYMETH(_tied_at) {
pe_tied *tp = (pe_tied*) ev;
- if (!nval) {
- dSP;
- XPUSHs(sv_2mortal(newSVnv(tp->tm.at)));
- PUTBACK;
- } else {
+ if (nval) {
pe_timeable_stop(&tp->tm);
if (SvOK(nval)) {
tp->tm.at = SvNV(nval);
pe_timeable_start(&tp->tm);
}
}
+ {
+ dSP;
+ XPUSHs(sv_2mortal(newSVnv(tp->tm.at)));
+ PUTBACK;
+ }
}
WKEYMETH(_tied_flags) {
- if (!nval) {
- dSP;
- XPUSHs(sv_2mortal(newSViv(ev->flags & PE_VISIBLE_FLAGS)));
- PUTBACK;
- } else {
+ if (nval) {
IV nflags = SvIV(nval);
IV flip = nflags ^ ev->flags;
IV other = flip & ~(PE_CBTIME|PE_INVOKE1);
@@ -90,6 +87,11 @@ WKEYMETH(_tied_flags) {
}
if (other)
warn("Other flags (0x%x) cannot be changed", other);
+ }
+ {
+ dSP;
+ XPUSHs(sv_2mortal(newSViv(ev->flags & PE_VISIBLE_FLAGS)));
+ PUTBACK;
}
}
gdiff -up '/usr/tmp/mp2253.d/old/Event-0.74/c/timeable.c'
'/usr/tmp/mp2253.d/new/Event-0.75/c/timeable.c'
Index: ./c/timeable.c
--- ./c/timeable.c Wed Dec 22 17:00:06 1999
+++ ./c/timeable.c Mon Apr 24 09:40:53 2000
@@ -90,12 +90,13 @@ static void pe_timeable_adjust(double de
}
WKEYMETH(_timeable_hard) { /* applies to all timers in a watcher; is ok? */
- if (!nval) {
+ if (nval) {
+ if (sv_true(nval)) WaHARD_on(ev); else WaHARD_off(ev);
+ }
+ {
dSP;
XPUSHs(boolSV(WaHARD(ev)));
PUTBACK;
- } else {
- if (sv_true(nval)) WaHARD_on(ev); else WaHARD_off(ev);
}
}
gdiff -up '/usr/tmp/mp2253.d/old/Event-0.74/c/timer.c'
'/usr/tmp/mp2253.d/new/Event-0.75/c/timer.c'
Index: ./c/timer.c
--- ./c/timer.c Tue Feb 15 15:16:56 2000
+++ ./c/timer.c Mon Apr 24 09:41:17 2000
@@ -52,30 +52,32 @@ static void pe_timer_alarm(pe_watcher *w
WKEYMETH(_timer_at) {
pe_timer *tp = (pe_timer*)ev;
- if (!nval) {
- dSP;
- XPUSHs(sv_2mortal(newSVnv(tp->tm.at)));
- PUTBACK;
- } else {
+ if (nval) {
int active = WaPOLLING(ev);
if (active) pe_watcher_off(ev);
tp->tm.at = SvNV(nval);
if (active) pe_watcher_on(ev, 0);
}
+ {
+ dSP;
+ XPUSHs(sv_2mortal(newSVnv(tp->tm.at)));
+ PUTBACK;
+ }
}
WKEYMETH(_timer_interval) {
pe_timer *tp = (pe_timer*)ev;
- if (!nval) {
- dSP;
- XPUSHs(tp->interval);
- PUTBACK;
- } else {
+ if (nval) {
SV *old = tp->interval;
tp->interval = SvREFCNT_inc(nval);
SvREFCNT_dec(old);
VERIFYINTERVAL("timer", tp->interval);
/* recalc expiration XXX */
+ }
+ {
+ dSP;
+ XPUSHs(tp->interval);
+ PUTBACK;
}
}
gdiff -up '/usr/tmp/mp2253.d/old/Event-0.74/c/var.c'
'/usr/tmp/mp2253.d/new/Event-0.75/c/var.c'
Index: ./c/var.c
--- ./c/var.c Tue Feb 8 17:24:51 2000
+++ ./c/var.c Mon Apr 24 09:41:58 2000
@@ -134,23 +134,20 @@ static void _var_restart(pe_watcher *ev)
WKEYMETH(_var_events) {
pe_var *vp = (pe_var*)ev;
- if (!nval) {
+ if (nval) {
+ vp->events = sv_2events_mask(nval, PE_R|PE_W);
+ _var_restart(ev);
+ }
+ {
dSP;
XPUSHs(sv_2mortal(events_mask_2sv(vp->events)));
PUTBACK;
- } else {
- vp->events = sv_2events_mask(nval, PE_R|PE_W);
- _var_restart(ev);
}
}
WKEYMETH(_var_variable) {
pe_var *vp = (pe_var*)ev;
- if (!nval) {
- dSP;
- XPUSHs(vp->variable);
- PUTBACK;
- } else {
+ if (nval) {
SV *old = vp->variable;
int active = WaPOLLING(ev);
if (!SvROK(nval))
@@ -161,6 +158,11 @@ WKEYMETH(_var_variable) {
vp->variable = SvREFCNT_inc(nval);
if (active) pe_watcher_on(ev, 0);
SvREFCNT_dec(old);
+ }
+ {
+ dSP;
+ XPUSHs(vp->variable);
+ PUTBACK;
}
}
gdiff -up '/usr/tmp/mp2253.d/old/Event-0.74/c/watcher.c'
'/usr/tmp/mp2253.d/new/Event-0.75/c/watcher.c'
Index: ./c/watcher.c
--- ./c/watcher.c Wed Mar 8 11:45:45 2000
+++ ./c/watcher.c Mon Apr 24 09:37:24 2000
@@ -80,17 +80,7 @@ static void pe_watcher_dtor(pe_watcher *
/********************************** *******************************/
WKEYMETH(_watcher_callback) {
- if (!nval) {
- SV *ret = (WaPERLCB(ev)?
- (SV*) ev->callback :
- (ev->callback?
- sv_2mortal(newSVpvf("<FPTR=0x%x EXT=0x%x>",
- ev->callback, ev->ext_data)) :
- &PL_sv_undef));
- dSP;
- XPUSHs(ret);
- PUTBACK;
- } else {
+ if (nval) {
AV *av;
SV *sv;
SV *old=0;
@@ -140,6 +130,17 @@ WKEYMETH(_watcher_callback) {
if (old)
SvREFCNT_dec(old);
}
+ {
+ SV *ret = (WaPERLCB(ev)?
+ (SV*) ev->callback :
+ (ev->callback?
+ sv_2mortal(newSVpvf("<FPTR=0x%x EXT=0x%x>",
+ ev->callback, ev->ext_data)) :
+ &PL_sv_undef));
+ dSP;
+ XPUSHs(ret);
+ PUTBACK;
+ }
}
WKEYMETH(_watcher_cbtime) {
@@ -152,40 +153,40 @@ WKEYMETH(_watcher_cbtime) {
}
WKEYMETH(_watcher_desc) {
- if (!nval) {
+ if (nval) {
+ sv_setsv(ev->desc, nval);
+ }
+ {
dSP;
XPUSHs(ev->desc);
PUTBACK;
- } else {
- sv_setsv(ev->desc, nval);
}
}
WKEYMETH(_watcher_debug) {
- if (!nval) {
+ if (nval) {
+ if (sv_true(nval)) WaDEBUG_on(ev); else WaDEBUG_off(ev);
+ }
+ {
dSP;
XPUSHs(boolSV(WaDEBUG(ev)));
PUTBACK;
- } else {
- if (sv_true(nval)) WaDEBUG_on(ev); else WaDEBUG_off(ev);
}
}
WKEYMETH(_watcher_priority) {
- if (!nval) {
+ if (nval) {
+ ev->prio = SvIV(nval);
+ }
+ {
dSP;
XPUSHs(sv_2mortal(newSViv(ev->prio)));
PUTBACK;
- } else
- ev->prio = SvIV(nval);
+ }
}
WKEYMETH(_watcher_reentrant) {
- if (!nval) {
- dSP;
- XPUSHs(boolSV(WaREENTRANT(ev)));
- PUTBACK;
- } else {
+ if (nval) {
if (sv_true(nval))
WaREENTRANT_on(ev);
else {
@@ -195,43 +196,51 @@ WKEYMETH(_watcher_reentrant) {
WaREENTRANT_off(ev);
}
}
+ {
+ dSP;
+ XPUSHs(boolSV(WaREENTRANT(ev)));
+ PUTBACK;
+ }
}
WKEYMETH(_watcher_repeat) {
- if (!nval) {
+ if (nval) {
+ if (sv_true(nval)) WaREPEAT_on(ev); else WaREPEAT_off(ev);
+ }
+ {
dSP;
XPUSHs(boolSV(WaREPEAT(ev)));
PUTBACK;
- } else {
- if (sv_true(nval)) WaREPEAT_on(ev); else WaREPEAT_off(ev);
}
}
WKEYMETH(_watcher_suspend) {
- if (!nval) {
- dSP;
- XPUSHs(boolSV(WaSUSPEND(ev)));
- PUTBACK;
- } else {
+ if (nval) {
if (sv_true(nval))
pe_watcher_suspend(ev);
else
pe_watcher_resume(ev);
}
+ {
+ dSP;
+ XPUSHs(boolSV(WaSUSPEND(ev)));
+ PUTBACK;
+ }
}
WKEYMETH(_watcher_max_cb_tm) {
- if (!nval) {
- dSP;
- XPUSHs(sv_2mortal(newSViv(ev->max_cb_tm)));
- PUTBACK;
- } else {
+ if (nval) {
int tm = SvIOK(nval)? SvIV(nval) : 0;
if (tm < 0) {
warn("e_max_cb_tm must be non-negative");
tm=0;
}
ev->max_cb_tm = tm;
+ }
+ {
+ dSP;
+ XPUSHs(sv_2mortal(newSViv(ev->max_cb_tm)));
+ PUTBACK;
}
}
gdiff -up '/usr/tmp/mp2253.d/old/Event-0.74/lib/Event.pm'
'/usr/tmp/mp2253.d/new/Event-0.75/lib/Event.pm'
Index: ./lib/Event.pm
--- ./lib/Event.pm Wed Apr 19 12:43:26 2000
+++ ./lib/Event.pm Mon Apr 24 09:43:21 2000
@@ -13,7 +13,7 @@ use Carp;
eval { require Carp::Heavy; }; # work around perl_call_pv bug XXX
use vars qw($VERSION @EXPORT_OK
$API $DebugLevel $Eval $DIED $Now);
-$VERSION = '0.74';
+$VERSION = '0.75';
# If we inherit DynaLoader then we inherit AutoLoader; Bletch!
require DynaLoader;
gdiff -up '/usr/tmp/mp2253.d/old/Event-0.74/lib/Event.pod'
'/usr/tmp/mp2253.d/new/Event-0.75/lib/Event.pod'
Index: ./lib/Event.pod
--- ./lib/Event.pod Wed Apr 19 08:17:47 2000
+++ ./lib/Event.pod Mon Apr 24 09:26:26 2000
@@ -374,8 +374,11 @@ When the callback was invoked most recen
=item data => $anything
-Use the C<data()> method to associate arbitrary data with a watcher.
-Each caller's package accesses its own private data attribute.
+The C<data()> method associates arbitrary data with a watcher.
+
+This method is not intended for implementers of watchers. If you are
+subclassing or implementing a watcher, consider the C<private()>
+method.
=item debug => $bool
@@ -448,6 +451,13 @@ events.
Changes the watcher's priority to the given level. Events generated
by a watcher usually inherit the priority of the watcher.
+
+=item private => $anything
+
+Use the C<private()> method to associate arbitrary data with a
+watcher. This method is intended for implementers of watchers or
+watcher subclasses. Each caller's package accesses its own private
+attribute.
=item reentrant => $bool
gdiff -up '/usr/tmp/mp2253.d/old/Event-0.74/lib/Event/Watcher.pm'
'/usr/tmp/mp2253.d/new/Event-0.75/lib/Event/Watcher.pm'
Index: ./lib/Event/Watcher.pm
--- ./lib/Event/Watcher.pm Wed Apr 19 08:12:03 2000
+++ ./lib/Event/Watcher.pm Mon Apr 24 09:20:05 2000
@@ -97,13 +97,22 @@ sub configure {
}
}
-sub data { # assumes $self is a HASH ref
+sub private { # assumes $self is a HASH ref
my $self = shift;
my $pkg = caller;
if (@_) {
$self->{$pkg} = shift
} else {
$self->{$pkg};
+ }
+}
+
+sub data { # assumes $self is a HASH ref
+ my $self = shift;
+ if (@_) {
+ $self->{_user_data_} = shift
+ } else {
+ $self->{_user_data_};
}
}
gdiff -up '/usr/tmp/mp2253.d/old/Event-0.74/t/data.t'
'/usr/tmp/mp2253.d/new/Event-0.75/t/data.t'
Index: ./t/data.t
--- ./t/data.t Wed Apr 19 12:42:13 2000
+++ ./t/data.t Mon Apr 24 09:27:17 2000
@@ -1,20 +1,22 @@
#!./perl -w
-use Test; plan tests => 6;
+use Test; plan tests => 8;
use Event;
-my $w = Event->idle(parked => 1);
+my $w = Event->idle(parked => 1, data => 'data');
-ok !$w->data;
-ok $w->data(1);
-ok $w->data;
+ok $w->data, 'data';
+ok !$w->private;
+ok $w->private(1);
+ok $w->private;
package Grapes;
use Test;
-ok !$w->data;
-ok $w->data(2), 2;
+ok $w->data, 'data';
+ok !$w->private;
+ok $w->private(2), 2;
package main;
-ok $w->data, 1;
+ok $w->private, 1;
#### End of Patch data ####
#### ApplyPatch data follows ####
# Data version : 1.0
# Date generated : Mon Apr 24 16:25:11 2000
# Generated by : makepatch 2.00 (2.0BETA)
# Recurse directories : Yes
# p 'ChangeLog' 24884 956583788 0100444
# p 'TODO' 1827 956583745 0100444
# p 'c/group.c' 3766 956583494 0100444
# p 'c/idle.c' 3685 956583527 0100444
# p 'c/io.c' 5389 956583574 0100444
# p 'c/signal.c' 3845 956583605 0100444
# p 'c/tied.c' 2674 956583632 0100444
# p 'c/timeable.c' 2636 956583653 0100444
# p 'c/timer.c' 2222 956583677 0100444
# p 'c/var.c' 4240 956583718 0100444
# p 'c/watcher.c' 9408 956583444 0100444
# p 'lib/Event.pm' 4074 956583801 0100444
# p 'lib/Event.pod' 24666 956582786 0100444
# p 'lib/Event/Watcher.pm' 2399 956582405 0100444
# p 't/data.t' 223 956582837 0100444
#### End of ApplyPatch data ####
#### End of Patch kit [created: Mon Apr 24 16:25:11 2000] ####
#### Checksum: 710 16958 58763 ####
--
"Never ascribe to malice that which can be explained by stupidity."
via, but not speaking for Deutsche Bank