home *** CD-ROM | disk | FTP | other *** search
- package Tk::Event::IO;
- use strict;
- use Carp;
-
- use vars qw($VERSION @EXPORT_OK);
- $VERSION = sprintf '4.%03d', q$Revision: #8 $ =~ /\D(\d+)\s*$/;
-
- 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);
- unless ($obj && $obj->isa('Tk::Event::IO'))
- {
- $obj = tie *$file,'Tk::Event::IO', $file;
- }
- if (@_ == 3)
- {
- # query return the handler
- return $obj->handler($imode);
- }
- else
- {
- # set the handler
- my $h = $obj->handler($imode,$cb);
- undef $obj; # Prevent warnings about untie with ref to object
- unless ($h)
- {
- untie *$file;
- }
- }
- }
-
- 1;
- __END__
-