home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 May / Chip_2000-05_cd1.bin / zkuste / Perl / ActivePerl-5.6.0.613.msi / 䆊䌷䈹䈙䏵-䞅䞆䞀㡆䞃䄦䠥 / _848f27d1856486ea62f6059154f6cec8 < prev    next >
Text File  |  2000-03-15  |  5KB  |  187 lines

  1. #---------------------------------------------------------------------
  2. package Win32::ChangeNotify;
  3. #
  4. # Copyright 1998 Christopher J. Madsen
  5. #
  6. # Created: 3 Feb 1998 from the ActiveWare version
  7. #   (c) 1995 Microsoft Corporation. All rights reserved.
  8. #       Developed by ActiveWare Internet Corp., http://www.ActiveWare.com
  9. #
  10. #   Other modifications (c) 1997 by Gurusamy Sarathy <gsar@activestate.com>
  11. #
  12. # Author: Christopher J. Madsen <chris_madsen@geocities.com>
  13. # Version: 1.02 (13-Jun-1999)
  14. #
  15. # This program is free software; you can redistribute it and/or modify
  16. # it under the same terms as Perl itself.
  17. #
  18. # This program is distributed in the hope that it will be useful,
  19. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  20. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See either the
  21. # GNU General Public License or the Artistic License for more details.
  22. #
  23. # Monitor directory for changes
  24. #---------------------------------------------------------------------
  25.  
  26. $VERSION = '1.02';
  27.  
  28. use Carp;
  29. use Win32::IPC 1.00 '/./';      # Import everything
  30. require Exporter;
  31. require DynaLoader;
  32.  
  33. @ISA = qw(Exporter DynaLoader Win32::IPC);
  34. # Items to export into callers namespace by default. Note: do not export
  35. # names by default without a very good reason. Use EXPORT_OK instead.
  36. # Do not simply export all your public functions/methods/constants.
  37. @EXPORT = qw(
  38.     FILE_NOTIFY_CHANGE_ATTRIBUTES
  39.     FILE_NOTIFY_CHANGE_DIR_NAME
  40.     FILE_NOTIFY_CHANGE_FILE_NAME
  41.     FILE_NOTIFY_CHANGE_LAST_WRITE
  42.     FILE_NOTIFY_CHANGE_SECURITY
  43.     FILE_NOTIFY_CHANGE_SIZE
  44.     INFINITE
  45. );
  46. @EXPORT_OK = qw(
  47.   wait_all wait_any
  48. );
  49.  
  50. sub AUTOLOAD {
  51.     # This AUTOLOAD is used to 'autoload' constants from the constant()
  52.     # XS function.
  53.  
  54.     my $constname;
  55.     ($constname = $AUTOLOAD) =~ s/.*:://;
  56.     if ($constname =~ /^(?:FILE_NOTIFY_CHANGE_|INFINITE)/) {
  57.         my $val = constant($constname);
  58.         croak("$constname is not defined by Win32::ChangeNotify") if $! != 0;
  59.         eval "sub $AUTOLOAD { $val }";
  60.         goto &$AUTOLOAD;
  61.     }
  62. } # end AUTOLOAD
  63.  
  64. bootstrap Win32::ChangeNotify;
  65.  
  66. sub new {
  67.     my ($class,$path,$subtree,$filter) = @_;
  68.  
  69.     if ($filter =~ /\A[\s|A-Z_]+\Z/i) {
  70.         $filter = 0;
  71.         foreach (split(/[\s|]+/, $_[3])) {
  72.             $filter |= constant("FILE_NOTIFY_CHANGE_" . uc $_);
  73.             carp "Invalid filter $_" if $!;
  74.         }
  75.     }
  76.     _new($class,$path,$subtree,$filter);
  77. } # end new
  78.  
  79. sub Close { &close }
  80.  
  81. sub FindFirst { $_[0] = Win32::ChangeNotify->_new(@_[1..3]); }
  82.  
  83. sub FindNext { &reset }
  84.  
  85. 1;
  86. __END__
  87.  
  88. =head1 NAME
  89.  
  90. Win32::ChangeNotify - Monitor events related to files and directories
  91.  
  92. =head1 SYNOPSIS
  93.  
  94.     require Win32::ChangeNotify;
  95.  
  96.     $notify = Win32::ChangeNotify->new($Path,$WatchSubTree,$Events);
  97.     $notify->wait or warn "Something failed: $!\n";
  98.     # There has been a change.
  99.  
  100. =head1 DESCRIPTION
  101.  
  102. This module allows the user to use a Win32 change notification event
  103. object from Perl.  This allows the Perl program to monitor events
  104. relating to files and directory trees.
  105.  
  106. The C<wait> method and C<wait_all> & C<wait_any> functions are
  107. inherited from the L<"Win32::IPC"> module.
  108.  
  109. =head2 Methods
  110.  
  111. =over 4
  112.  
  113. =item $notify = Win32::ChangeNotify->new($path, $subtree, $filter)
  114.  
  115. Constructor for a new ChangeNotification object.  C<$path> is the
  116. directory to monitor.  If C<$subtree> is true, then all directories
  117. under C<$path> will be monitored.  C<$filter> indicates what events
  118. should trigger a notification.  It should be a string containing any
  119. of the following flags (separated by whitespace and/or C<|>).
  120.  
  121.    ATTRIBUTES    Any attribute change
  122.    DIR_NAME     Any directory name change
  123.    FILE_NAME    Any file name change (creating/deleting/renaming)
  124.    LAST_WRITE   Any change to a file's last write time
  125.    SECURITY     Any security descriptor change
  126.    SIZE         Any change in a file's size
  127.  
  128. (C<$filter> can also be an integer composed from the
  129. C<FILE_NOTIFY_CHANGE_*> constants.)
  130.  
  131. =item $notify->close
  132.  
  133. Shut down monitoring.  You could just C<undef $notify> instead (but
  134. C<close> works even if there are other copies of the object).  This
  135. happens automatically when your program exits.
  136.  
  137. =item $notify->reset
  138.  
  139. Resets the ChangeNotification object after a change has been detected.
  140. The object will become signalled again after the next change.  (It is
  141. OK to call this immediately after C<new>, but it is not required.)
  142.  
  143. =item $notify->wait
  144.  
  145. See L<"Win32::IPC">.  Remember to call C<reset> afterwards if you want
  146. to continue monitoring.
  147.  
  148. =back
  149.  
  150. =head2 Deprecated Functions and Methods
  151.  
  152. B<Win32::ChangeNotify> still supports the ActiveWare syntax, but its
  153. use is deprecated.
  154.  
  155. =over 4
  156.  
  157. =item FindFirst($Obj,$PathName,$WatchSubTree,$Filter)
  158.  
  159. Use
  160.  
  161.   $Obj = Win32::ChangeNotify->new($PathName,$WatchSubTree,$Filter)
  162.  
  163. instead.
  164.  
  165. =item $obj->FindNext()
  166.  
  167. Use C<$obj-E<gt>reset> instead.
  168.  
  169. =item $obj->Close()
  170.  
  171. Use C<$obj-E<gt>close> instead.
  172.  
  173. =back
  174.  
  175. =head1 AUTHOR
  176.  
  177. Christopher J. Madsen E<lt>F<chris_madsen@geocities.com>E<gt>
  178.  
  179. Loosely based on the original module by ActiveWare Internet Corp.,
  180. F<http://www.ActiveWare.com>
  181.  
  182. =cut
  183.  
  184. # Local Variables:
  185. # tmtrack-file-task: "Win32::ChangeNotify"
  186. # End:
  187.