summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlperl/lib/Win32/ChangeNotify.pm
diff options
context:
space:
mode:
authorReinhard Kotucha <reinhard.kotucha@web.de>2008-01-05 21:23:03 +0000
committerReinhard Kotucha <reinhard.kotucha@web.de>2008-01-05 21:23:03 +0000
commit61700e8be90ff6f495c0b1a9835fe07e9848de8d (patch)
treeba85dbc1413d5f834a501a8828e3b67678ba8524 /Master/tlpkg/tlperl/lib/Win32/ChangeNotify.pm
parent270728c6f3efcac6728d2c335c79824c356f428d (diff)
tlperl: Perl for scripts provided by TeX Live.
git-svn-id: svn://tug.org/texlive/trunk@6046 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/tlpkg/tlperl/lib/Win32/ChangeNotify.pm')
-rw-r--r--Master/tlpkg/tlperl/lib/Win32/ChangeNotify.pm198
1 files changed, 198 insertions, 0 deletions
diff --git a/Master/tlpkg/tlperl/lib/Win32/ChangeNotify.pm b/Master/tlpkg/tlperl/lib/Win32/ChangeNotify.pm
new file mode 100644
index 00000000000..a86682da376
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Win32/ChangeNotify.pm
@@ -0,0 +1,198 @@
+#---------------------------------------------------------------------
+package Win32::ChangeNotify;
+#
+# Copyright 1998 Christopher J. Madsen
+#
+# Created: 3 Feb 1998 from the ActiveWare version
+# (c) 1995 Microsoft Corporation. All rights reserved.
+# Developed by ActiveWare Internet Corp., http://www.ActiveWare.com
+#
+# Other modifications (c) 1997 by Gurusamy Sarathy <gsar@activestate.com>
+#
+# Author: Christopher J. Madsen <cjm@pobox.com>
+# Version: 1.02 (13-Jun-1999)
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the same terms as Perl itself.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See either the
+# GNU General Public License or the Artistic License for more details.
+#
+# Monitor directory for changes
+#---------------------------------------------------------------------
+# 1.04 -Minor changes by Yves Orton to fix the trueness of $subtree (Dec 2002)
+
+$VERSION = '1.05';
+
+use Carp;
+use Win32::IPC 1.00 '/./'; # Import everything
+require Exporter;
+require DynaLoader;
+
+@ISA = qw(Exporter DynaLoader Win32::IPC);
+# Items to export into callers namespace by default. Note: do not export
+# names by default without a very good reason. Use EXPORT_OK instead.
+# Do not simply export all your public functions/methods/constants.
+@EXPORT = qw(
+ FILE_NOTIFY_CHANGE_ATTRIBUTES
+ FILE_NOTIFY_CHANGE_DIR_NAME
+ FILE_NOTIFY_CHANGE_FILE_NAME
+ FILE_NOTIFY_CHANGE_LAST_WRITE
+ FILE_NOTIFY_CHANGE_SECURITY
+ FILE_NOTIFY_CHANGE_SIZE
+ INFINITE
+);
+@EXPORT_OK = qw(
+ wait_all wait_any
+);
+
+sub AUTOLOAD {
+ # This AUTOLOAD is used to 'autoload' constants from the constant()
+ # XS function.
+
+ my $constname;
+ ($constname = $AUTOLOAD) =~ s/.*:://;
+ if ($constname =~ /^(?:FILE_NOTIFY_CHANGE_|INFINITE)/) {
+ local $! = 0;
+ my $val = constant($constname);
+ croak("$constname is not defined by Win32::ChangeNotify") if $! != 0;
+ eval "sub $AUTOLOAD { $val }";
+ goto &$AUTOLOAD;
+ }
+} # end AUTOLOAD
+
+bootstrap Win32::ChangeNotify;
+
+sub new {
+ my ($class,$path,$subtree,$filter) = @_;
+
+ if ($filter =~ /\A[\s|A-Z_]+\Z/i) {
+ $filter = 0;
+ foreach (split(/[\s|]+/, $_[3])) {
+ $filter |= constant("FILE_NOTIFY_CHANGE_" . uc $_);
+ carp "Invalid filter $_" if $!;
+ }
+ }
+ _new($class,$path,$subtree,$filter);
+} # end new
+
+sub Close { &close }
+
+sub FindFirst { $_[0] = Win32::ChangeNotify->_new(@_[1..3]); }
+
+sub FindNext { &reset }
+
+1;
+__END__
+
+=head1 NAME
+
+Win32::ChangeNotify - Monitor events related to files and directories
+
+=head1 SYNOPSIS
+
+ require Win32::ChangeNotify;
+
+ $notify = Win32::ChangeNotify->new($Path,$WatchSubTree,$Events);
+ $notify->wait or warn "Something failed: $!\n";
+ # There has been a change.
+
+=head1 DESCRIPTION
+
+This module allows the user to use a Win32 change notification event
+object from Perl. This allows the Perl program to monitor events
+relating to files and directory trees.
+
+Unfortunately, the Win32 API which implements this feature does not
+provide any indication of I<what> triggered the notification (as far
+as I know). If you're monitoring a directory for file changes, and
+you need to know I<which> file changed, you'll have to find some other
+way of determining that. Depending on exactly what you're trying to
+do, you may be able to check file timestamps to find recently changed
+files. Or, you may need to cache the directory contents somewhere and
+compare the current contents to your cached copy when you receive a
+change notification.
+
+The C<wait> method and C<wait_all> & C<wait_any> functions are
+inherited from the L<"Win32::IPC"> module.
+
+=head2 Methods
+
+=over 4
+
+=item $notify = Win32::ChangeNotify->new($path, $subtree, $filter)
+
+Constructor for a new ChangeNotification object. C<$path> is the
+directory to monitor. If C<$subtree> is true, then all directories
+under C<$path> will be monitored. C<$filter> indicates what events
+should trigger a notification. It should be a string containing any
+of the following flags (separated by whitespace and/or C<|>).
+
+ ATTRIBUTES Any attribute change
+ DIR_NAME Any directory name change
+ FILE_NAME Any file name change (creating/deleting/renaming)
+ LAST_WRITE Any change to a file's last write time
+ SECURITY Any security descriptor change
+ SIZE Any change in a file's size
+
+(C<$filter> can also be an integer composed from the
+C<FILE_NOTIFY_CHANGE_*> constants.)
+
+=item $notify->close
+
+Shut down monitoring. You could just C<undef $notify> instead (but
+C<close> works even if there are other copies of the object). This
+happens automatically when your program exits.
+
+=item $notify->reset
+
+Resets the ChangeNotification object after a change has been detected.
+The object will become signalled again after the next change. (It is
+OK to call this immediately after C<new>, but it is not required.)
+
+=item $notify->wait
+
+See L<"Win32::IPC">. Remember to call C<reset> afterwards if you want
+to continue monitoring.
+
+=back
+
+=head2 Deprecated Functions and Methods
+
+B<Win32::ChangeNotify> still supports the ActiveWare syntax, but its
+use is deprecated.
+
+=over 4
+
+=item FindFirst($Obj,$PathName,$WatchSubTree,$Filter)
+
+Use
+
+ $Obj = Win32::ChangeNotify->new($PathName,$WatchSubTree,$Filter)
+
+instead.
+
+=item $obj->FindNext()
+
+Use C<$obj-E<gt>reset> instead.
+
+=item $obj->Close()
+
+Use C<$obj-E<gt>close> instead.
+
+=back
+
+=head1 AUTHOR
+
+Christopher J. Madsen E<lt>F<cjm@pobox.com>E<gt>
+
+Loosely based on the original module by ActiveWare Internet Corp.,
+F<http://www.ActiveWare.com>
+
+=cut
+
+# Local Variables:
+# tmtrack-file-task: "Win32::ChangeNotify"
+# End: