package Tk::Event::IO; use vars qw($VERSION @EXPORT_OK); $VERSION = '3.036'; # $Id: //depot/Tk8/Event/Event/IO.pm#12 $ +24 use base qw(Exporter); use Symbol (); @EXPORT_OK = qw(READABLE WRITABLE); sub PrintArgs { my $func = (caller(1))[3]; print "$func(",join(',',@_),")\n"; } sub PRINT { my $obj = shift; $obj->wait(WRITABLE); my $h = $obj->handle; return print $h @_; } sub PRINTF { my $obj = shift; $obj->wait(WRITABLE); my $h = $obj->handle; return printf $h @_; } sub WRITE { my $obj = $_[0]; $obj->wait(WRITABLE); return syswrite($obj->handle,$_[1],$_[2]); } my $depth = 0; sub READLINE { my $obj = shift; $obj->wait(READABLE); my $h = $obj->handle; my $w = <$h>; return $w; } sub READ { my $obj = $_[0]; $obj->wait(READABLE); my $h = $obj->handle; return sysread($h,$_[1],$_[2],defined $_[3] ? $_[3] : 0); } sub GETC { my $obj = $_[0]; $obj->wait(READABLE); my $h = $obj->handle; return getc($h); } sub CLOSE { my $obj = shift; $obj->unwatch; my $h = $obj->handle; return close($h); } sub EOF { my $obj = shift; my $h = $obj->handle; return eof($h); } sub FILENO { my $obj = shift; my $h = $obj->handle; return fileno($h); } sub imode { my $mode = shift; my $imode = ${{'readable' => READABLE(), 'writable' => WRITABLE()}}{$mode}; croak("Invalid handler type '$mode'") unless (defined $imode); return $imode; } sub fileevent { my ($widget,$file,$mode,$cb) = @_; my $imode = imode($mode); unless (ref $file) { no strict 'refs'; $file = Symbol::qualify($file,(caller)[0]); $file = \*{$file}; } my $obj = tied(*$file); $obj = tie *$file,'Tk::Event::IO', $file unless $obj && $obj->isa('Tk::Event::IO'); if (@_ == 3) { return $obj->handler($imode); } else { my $h = $obj->handler($imode,$cb); undef $obj; untie *$file unless $h; } } 1; __END__