This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
new perldelta
[perl5.git] / dist / Net-Ping / Changes
1 CHANGES
2 -------
3 2.75  2022-09-01 12:44:03 rurban
4       Minor
5       - Modernized the synopsis (PR #31)
6       - Fixed a link in a comment (PR #25)
7       META Changes
8       - Remove some TEST_REQUIRES (PR #23)
9       Test fixes
10       - Support NO_NETWORK_TESTING=1 (PR #24)
11       - Fix non-routable addresses for negative tests (PR #24)
12 2.74  2020-09-09 09:21:39 rurban
13       Features
14       - Add ICMPv6_NI_REPLY support.
15       Bugfixes
16       - Fix icmp payload offset to match icmpv6 (JimC Leones GH #21)
17         Skip the 20 byte header to reliably find the various return types.
18         This unifies icmpv6 with icmp better.
19       - Fix $SOCKET::VERSION eval (Petr Pavlu, PR #22)
20       META Changes
21       - Fix and improve the META repository as hashref, license as arrayref
22         (Tom Hukins, PR #19)
23       - add TEST_REQUIRES
24       - sort MANIFEST
25       - add windows smokers: appveyor
26       Test fixes
27       - Improve the tcp test to localhost, when there is no route to localhost
28         (freebsd mostly)
29       - TODO a flaky 450_service.t on 127.0.0.1 on port 2 on Windows (analog to freebsd, ...)
30         (Christian Walde, PR #20)
31       - Skip 501_ping_icmpv6.t when icmpv6 cannot be initialized. Mostly due to missing
32         icmpv6 support. (GH #15)
33       - add more xt tests: t/602_kwalitee.t, t/603_meta.t, t/604_manifest.t
34
35 2.73  Thu Feb 27 14:32:25 CET 2020 (rurban)
36       Bugfixes
37        - Fix shadowing of hash options in constructor (Patrick Heesom, RT #131919)
38        - Fix icmp v4 length with given bytes/data_size option (Patrick Heesom, RT #131919)
39        - Call _resolv as class method (Marc Reissner, GH #16)
40
41 2.72  Thu 28 Mar 2019 09:01:39 AM CET (rurban)
42       Features
43       - add .cirrus.yml smoker https://cirrus-ci.com/github/rurban/Net-Ping
44       Test fixes
45       - Skip failing freebsd localhost resolver tests
46
47 2.71  Tue Oct 16 18:41:51 CEST 2018 (rurban)
48        Features
49        - Allow data_size > 1024, up to 65535, i.e. fragmented packets.
50          It is recommended to stay below 1472 though for the typical 1500 MTU.
51          Many simple devices do not allow fragmented ICMP packets (> 1472).
52          RT #17409
53        Bugfixes
54        - Fix the max_datasize documentation
55        Test fixes
56        - The 2 sudo tests on PERL_CORE with a shared perl lib
57
58 2.70  Tue Aug  7 10:33:24 CEST 2018 (rurban)
59        Test fixes
60        - Fix broken skip count on 510_ping_udp.t (windows only)
61
62 2.69  Mon Aug  6 15:13:25 CEST 2018 (rurban)
63        Test fixes
64        - Allow NET_PING_FAIL_IP override for testing an IP which should not exist,
65          RT #126006 hmbrand
66        META Changes
67        - Updated README
68
69 2.68  Wed Jun 27 11:55:06 CEST 2018 (rurban)
70        Bugfixes
71        - Fixed _resolv return value on failing DNS name lookup. (GH #12 nlv02636)
72        - Fixed installation dir from CPAN. Install into site, not perl there.
73          (GH #12 nlv02636)
74
75 2.67  Mon Jun 25 18:10:42 CEST 2018 (rurban)
76        Bugfixes
77        - Fixed non-core icmp ping test. PR #10 Guillaume Bougard
78        - Change croak on failing name lookup to return undef,
79          matching the documentation.
80          Fixes the regression from 2.43, RT #124830
81        - Stabilize Socket::VERSION comparisons, errored with Net::Socket
82          2.020_03, RT #125677 Smoot Carl-Mitchell
83        Features
84        - Added icmp message_type method with timestamp support.
85          PR #11 Guillaume Bougard
86
87 2.66  Thu Mar  8 16:44:03 CET 2018 (rurban)
88        Bugfixes
89        - Fixed icmpv6 ICMP_ECHOREPLY: nikolas@garofil.be RT 80479
90        - Fixed icmpv6 default family
91        - Simplify t/020_external.t
92        - Seperate timeout=0 and undef RT #97884
93        Features
94        - Added icmpv6 test.
95        - Added optional local tests hosts for the icmp tests:
96          TEST_PING_HOST and TEST_PING6_HOST
97        - allow sudo tests with local .git
98        - skip sudo test with asan leak detector on linux
99
100 2.65  Wed Mar  7 09:38:51 CET 2018 (rurban)
101        META Changes
102        - strip wrong Text::Template dependency and generation for the README
103          https://rt.cpan.org/Public/Bug/Display.html?id=124693
104          This is in core.
105        - Changed repo name from net-ping to Net-Ping.
106        - Changed bugtracker to https://github.com/rurban/Net-Ping/issues
107        - Made Makefile.PL more stable for the CPAN release, support older
108          perl + EUMM versions.
109        - Fixed up TODO for IPv6
110
111 2.64  Sat Mar  3 15:56:14 CET 2018 (rurban)
112        Bugfixes
113         - use NIx_NOSERV flag for windows (PR #6 by chorny)
114
115 2.63  Sun Nov 26 18:56:04 CET 2017 (rurban)
116        Bugfixes
117         - Keep v5.002 - v5.6 support
118         - Removed outdated demo/fping from the documentation
119           (RT #123750 by Steve Morris)
120         - Added t/420_ping_syn_port.t (#4 by Julio Fraire)
121           with fixes.
122        Features
123         - added indices and crosslinks to the documentation
124
125 2.62  Tue Sep 12 13:20:25 2017 -0600 (Nicholas R)
126        Limitations (not on CPAN)
127        - Removed support for v5.002 < v5.6 by introducing our
128
129 2.61  Sat Jun 17 13:12:58 CEST 2017 (rurban)
130        Bugfixes
131         - Fix ping_udp for a started udp echo server (PR#5 by Stephan Loyd)
132
133 2.60  Mon Jun 12 20:14:13 CEST 2017 (rurban)
134        Bugfixes
135         - Fix t/400_ping_syn.t phases
136         - Try to handle Windows Socket::getnameinfo errors
137         - Improve some tests on missing network connections
138
139 2.59  Tue Apr 18 08:46:48 2017 +0200 (rurban)
140        Bugfixes
141         - skip udp ping tests on more platforms: hpux, irix, aix.
142           also pingecho on os390.
143           (from perl5 core)
144        Features
145         - added a make release target
146
147 2.58  Wed Feb  1 19:34:03 CET 2017 (rurban)
148        Features
149         - return the port num as 5th return value with ack (jfraire)
150
151 2.57  Wed Feb  1 19:34:03 CET 2017 (rurban)
152        Bugfixes
153         - Resigned with new gpg key
154
155 2.56  Wed Jan 18 16:00:00  2017 -0700 (bbb)
156        Bugfixes
157         - Stabilize tests
158
159 2.55  Thu Oct 20 09:16:06  2016 +0200 (rurban)
160
161        Bugfixes
162        - Skip sudo for t/500_ping_icmp.t if a prompt is required
163          [RT #118451]
164
165 2.54  Thu Oct 20 09:16:06  2016 +0200 (rurban)
166
167        Bugfixes
168        - Fixed ping_external argument type, either packed ip or hostname.
169          [RT #113825]
170        - Fixed wrong skip message in t/020_external.t
171
172 2.53  Thu Oct 20 09:16:06  2016 +0200 (rurban)
173
174        Bugfixes
175        - Relax icmp tests on local firewalls, eg. as here on windows reported
176          by kmx. [RT #118441]
177
178        Internals
179        - Enhanced .travis.yml
180
181 2.52  Tue Oct 18 16:29:29 2016 +0200 (rurban)
182        version in cperl since 5.25.2c
183
184        Bugfixes
185        - Fixed _pack_sockaddr_in for a proper 2nd argument type, hash or packed address.
186        - Improved 500_ping_icmp.t to try sudo.
187        
188        Internals
189        - Converted all hash string keys to bare.
190
191 2.51  Mon Oct 17 16:11:03 2016 +0200 (rurban)
192        version in cperl since 5.25.2c
193  
194        Bugfixes
195        - Fixed missing _unpack_sockaddr_in family, which took AF_INET6 for
196          a AF_INET addr in t/500_ping_icmp.t and t/500_ping_icmp_ttl.t.
197          Use now a proper default.
198
199 2.50  Sat Apr 16 11:50:20 2016 +0200 (rurban)
200        version in cperl since 5.22.2c
201
202        Features
203        - Handle IPv6 addresses and the AF_INET6 family.
204        - Added the optional family argument to most methods.
205          valid values: 6, "v6", "ip6", "ipv6", AF_INET6
206        - new can take now named arguments, a hashref.
207        - Added the following named arguments to new:
208          gateway host port bind retrans pingstring source_verify econnrefused
209          IPV6_USE_MIN_MTU IPV6_RECVPATHMTU IPV6_HOPLIMIT
210        - Added a dontfrag option, setting IP_DONTFRAG and on linux
211          also IP_MTU_DISCOVER to IP_PMTUDISC_DO. Note that is ignored if
212          Socket does not export IP_DONTFRAG.
213        - Added the wakeonlan method
214        - Improve argument default handling
215        - Added missing documentation
216
217        Bugfixes
218        - Reapply tos with ping_udp, when the address is changed.
219          RT #6706 (Torgny.Hofstedt@sevenlevels.se)
220          ditto re-bind to a device.
221
222        Internals
223        - $ip is now a hash with {addr, addr_in, family} not the addr_in packed IP.
224        - added _resolv replacing inet_aton,
225          _pack_sockaddr_in and _unpack_sockaddr_in replacing sockaddr_in,
226          _inet_ntoa replacing inet_ntoa
227        - Use _isroot helper, with Win32 _IsAdminUser helper.
228        - added several new tests (Steve Peters)
229
230 2.43  Mon Apr 29 00:23:56 2013 -0300
231         version in perl core since 5.19.9
232         Bugfixes
233         - Handle getprotobyn{ame,umber} not being available
234 2.42  Sun May 26 19:08:46 2013 -0700
235         version in perl core since 5.19.1
236         Bugfixes
237         - Stabilize tests
238        Internals
239         - wrap long pod lines
240 2.41  Mar 17 09:35 2013
241         Bugfixes
242         - Windows Vista does not appear to support inet_ntop().  It seems to
243           have InetNtop() instead.  So, working around by using getnameinfo()
244           and passing in the NI_NUMERICHOST to get an IP address.
245         Features
246         - Change Net::Ping to use Time::HiRes::time() instead of CORE::time()
247           by default.  For most successful cases, CORE::time() returned zero. 
248 2.40  Mar 15 11:20 2013
249         Bugfixes
250         - several fixes to tests to stop the black smoke on Win32's 
251           and Cygwin since the core updated the module to Test::More.
252           I had planned a later release, but all the black smoke is
253           forcing a release.
254         - fixes to some skips in tests that were still using the 
255           Test style skip's.
256         - Documentation fix for https://rt.cpan.org/Ticket/Display.html?id=48014.
257           Thanks to Keith Taylor <keith@supanet.net.uk>
258         - Instead of using a hard-coded TOS value, import IP_TOS from 
259           Socket.  This fixes an outstanding bug on Solaris which uses a 
260           different value for IP_TOS in it headers than Linux.  I'm assuming
261           other OS's were fixed with this change as well.
262
263         Features
264         - added TTL handling for icmp pings to allow traceroute like 
265           applications to be built with Net::Ping.  Thanks to 
266           <rolek@bokxing.nl> for the patch and tests!
267
268        Internals
269         - replaced SOL_IP with IPPROTO_IP.  SOL_IP is not portable and was 
270           hard-coded anyway.
271         - added IPPROTO_IP, IP_TOS, IP_TTL, and AF_INET to the list of Socket 
272           constants imported.
273         - removed some hard-coded constants.
274         - converted all calls to inet_ntoa() to inet_ntop() in preparation
275           for further ipv6 updates.
276
277         Infrastructure
278         - Makefile.PL updated to require Test::More, Time::HiRes, and a
279           recent Socket
280         - several changes for github hosting
281           - add a .gitignore file
282           - added a .travis.yml file to allow CI testing with changes pushed
283             to github
284           - replaced the README with a README.md which displays the
285             Travis CI build status on github.
286
287
288 2.39  Mar 13 09:25 2013
289         - patch from Matthew Musgrove to resolve RT #45812.  Thanks!
290         - pulled in several changes from the Perl core
291
292 2.36  Jun 08 12:00 2009
293         - release to include a few fixes from the Perl core
294
295 2.35  Feb 08 14:42 2008
296         - Patch in Perl change #33242 by Nicholas Clark 
297                 <http://perl5.git.perl.org/perl.git/commit/5d6b07c5a4c042580b85248d570ee299fd102a79>
298
299 2.34  Dec 19 08:51 2007
300         - Release primarily to prevent problems with the Perl core in
301           preparation for the Perl 5.10 release.  No real bug fixes, but
302           text fixes are included.
303         - skip test t/510_ping_udp.t on Windows Vista.  Thanks to Jan
304           Dubois for the code to test for Vista.
305         - t/510_ping_udp.t should check for a udp echo port, not a tcp
306           echo port.
307
308 2.33  Jul 31 20:15 2007
309         - add new method port_number() rather than asking users to
310           twiddle with the internals of Net::Ping to probe a specific
311           port.  This should resolve a few bugs where the documentation
312           was lacking.
313         - apply patch from bergonz at labs.it.  This patch resolves
314           several problems logged regarding using Net::Ping in a multi-
315           threaded program.  Thanks so much!
316                 <http://rt.cpan.org/Ticket/Display.html?id=17408>
317
318 2.32  Jul 30 21:30 2007
319         - new co-maintainer Steve Peters
320         - integrate assorted bleadperl fixes from the past four years
321                 <http://rt.cpan.org/Public/Bug/Display.html?id=28348>
322
323 2.31  Jun 28 14:00 2003
324         - Win32 Compatibility fixes.
325           Patch by mhx-perl@gmx.net (Marcus Holland-Moritz)
326         - Apply bleadperl patch #22204
327         - Add ToS support.
328           Patch by martin@lorensen.dk (Martin Lorensen)
329
330 2.30  Apr 18 14:00 2003
331         - Fix select() bug for UDP and ICMP protocols
332           in case packet comes from wrong source or seq.
333         - Allow UDP ping to different IP addresses
334           without instantiating a new object.
335         - Add retrans() method to customize or disable
336           backoff factor for udp pings.
337           Thanks Torgny.Hofstedt@sevenlevels.se
338         - Let ECONNRESET be considered reachable for
339           UDP pings.  Now it works for cygwin.
340           Spot by jhi@iki.fi (Jarkko Hietaniemi).
341
342 2.29  Apr 12 15:00 2003
343         - Implement "double send()" concept for udp pings.
344           See: <http://perlmonks.thepen.com/42898.html>
345           Thanks to rdw @ perlmonks.
346         - Send multiple udp packets in case of loss.
347         - Exponential backoff code swiped from Net::DNS
348           Thanks to mike@fuhr.org (Michael Fuhr).
349         - Also allows to capture udp ECONNREFUSED condition.
350         - Rename tcp_service_check method to service_check.
351         - Allow demo/fping -s to force service check.
352           Idea by ralijani@yahoo.com (REZA Alijani)
353         - Fix return from ping to be compatible with wantarray
354           when the host doesn't even resolve.
355         - Add udp proto test to test suite.
356         - VMS patch from Craig Berry to pre-check echo.
357         - Apply bleadperl patch (change #18904)
358         - Apply bleadperl patch as explained:
359         http://www.xray.mpe.mpg.de/mailing-lists/perl5-
360         porters/2003-03/msg00992.html
361
362 2.28  Jan 23 18:00 2003
363         - No new features.  Bug fixes only.
364         - Fixed ICMP_STRUCT to work on Big Endian platforms.
365           Thanks to danb@thelittlemacshop.com (Dan Buettner)
366           for testing on Mac OS X 10.2.3 and many others
367           for testing on Big Endian boxes.
368         - Not do binmode(). Causes more problems than helps.
369         - Perl 5.004 compatibility fixes (Spot by Honza).
370
371 2.27  Jan 15 23:00 2003
372         - Patch by slebedev@iwl.net (Sergey Lebedev):
373         - 1) Fixed response packet parsing offsets in ping_icmp.
374         - 2) Added icmp_result method.
375         - Patch by radu@netsoft.ro (Radu Greab):
376         - 1) Changed ping_tcp() to use non-blocking connect
377           instead of alarm() interface in order to avoid
378           conflicts with user applications.
379         - 2) Also get rid of all eval {} code in ping_tcp
380           in order to avoid catching SIGALRM trigger and
381           to avoid conflicts with other evals.
382         - 3) Avoid ioctl() syscall for more accurate error
383           detection on non-blocking tcp connects.
384         - 4) Fix fcntl() syntax usage.
385         - Patch by adelton@fi.muni.cz (Honza Pazdziora):
386         - 1) Fix icmp request pack code to be more platform
387           independent regardless of Big/Little Endian.
388         - 2) Use binmode for filehandle in case perl 5.8.0
389           tries to dink with the data stream.
390         - Other changes by Rob Brown:
391         - Fixed ack() failures under certain rare conditions.
392         - Use more appropriate \z instead of $ in regex.
393         - Resolved Cygwin "make test" problems reported by
394           h.m.brand@hccnet.nl (H.Merijn Brand).
395         - Add sending a real ICMP packet in the test suite.
396         - Add Socket to PREREQ_PM (missing on some boxes?)
397         - Adjust syn_forking IPC pipe for fatter Win32 pids.
398         - Better handling of alarm() in test suite for Win32.
399         - Add a DESTROY method to reduce chances of
400           lingering connect-choking children.
401
402 2.26  Dec 02 12:00 2002
403         - More compatibility fixes.
404         - Thanks for Solaris bug reports:
405           Paul.Gaborit@enstimac.fr (Paul Gaborit)
406           Jost.Krieger@ruhr-uni-bochum.de (Jost Krieger)
407         - Thanks for Solaris testing box:
408           Gunther.Heintzen@rrze.uni-erlangen.de (Gunther Heintzen)
409         - Solaris ENOTCONN select() for write choke bug.
410         - Thanks for Cygwin bug reports:
411           h.m.brand@hccnet.nl (H.Merijn Brand)
412         - Cygwin "EAGAIN instead of ECONNREFUSED" buttwag.
413
414 2.25  Nov 19 12:00 2002
415         - Handle condition where O_NONBLOCK tcp connects
416           immediately fail without EINPROGRESS
417           (certain platforms or SMP optimizations).
418
419 2.24  Oct 21 22:00 2002
420         - Compatibility fixes.
421         - Avoid using 127.1.1.1 and 127.2.2.2 because
422           it breaks on some platforms (Irix).
423         - Handle condition where nonblocking tcp connects
424           immediately connect on some platforms
425           (solaris and freebsd) and to be SMP safer.
426         - Win32 $p->ack( $host ) method should now work.
427         - Add ack( $host ) test cases to test suite.
428
429 2.23  Oct 18 22:00 2002
430         - Fix ack() fd "each" detection bug.
431         - Add nack() method for OO interface to the
432           reason why the ack() failed.
433         - Fix premature "Timed out" side effect when a
434           different specified ack( $host ) fails.
435         - IO::Socket::INET ephemeral port buttwag
436           hack for the t/450_service.t test.
437         - Documental changes.
438
439 2.22  Oct 17 16:00 2002
440         - Add $p->tcp_service_check() method to enforce
441           remote tcp service availability checking.
442           Patch by jef@linuxbe.org (Jean-Francois Dive).
443         - Changed default behavior of "syn" protocol to
444           disabled tcp_service_check instead of enabled.
445         - Win32 compatibility changes ("syn" protocol).
446         - Increase timeouts for tests in case client or
447           server network(s) are busy.
448
449 2.21  Oct 14 12:00 2002
450         - Preserve/restore ALRM settings for tcp mode pings.
451           Spot by d@niel-berlin.de (Daniel Berlin)
452         - Can now select device for udp and icmp protocols.
453           Patch by sarfata@altern.org (Thomas Sarlandie).
454         - Add new "syn" protocol to allow for mass parallel
455           (synchronous) TCP service reachability checking.
456         - Add ack() method to utilize non-blocking connect
457           (SYN/ACK) feature of the "syn" protocol.
458         - Add demo/fping script as a "syn" demonstration.
459         - Compatibility patches for cygwin.
460           Spot by frazee.23@osu.edu (Joseph Frazee)
461
462 2.20  Jun 20 10:00 2002
463         - Perl 5.8.0 compatibility stuff.
464           Spot by dcd@tc.fluke.com (David Dyck).
465           And patch by jhi@iki.fi (Jarkko Hietaniemi).
466         - Move INSTALL doc into perldoc.
467         - Allow source_verify method to work
468           for icmp protocol as well as udp.
469           Spot by taner@taner.net (Taner Halicioglu)
470
471 2.19  Jun 03 19:00 2002
472         - Add $p->source_verify method to skip source
473           endpoint verification of udp protocol pings for
474           those remote destinations with multiple interfaces
475           that may have the "reverse telnet" bug.
476           Spot by dcd@tc.fluke.com (David Dyck)
477         - Moved files to more standard locations.
478         - Less common martian used for ping test
479           to reduce conflicts
480
481 2.18  May 06 12:00 2002
482         - More RPM spec generalizations.
483
484 2.17  May 03 18:00 2002
485         - RPM spec generalizations.
486           michael.mclagan@linux.org (Michael McLagan)
487         - Win32 compatibility changes.
488           (Didn't compile on Win32 since v2.11.)
489
490 2.16  Apr 11 14:00 2002
491         - Documentation changes.
492         - Added INSTALL doc.
493         - Added README to rpm %doc.
494         - Added neat MakeMaker constants routine.
495         - Buttwag around Makefile.PL warnings:
496           o "the following files are missing in your kit"
497           o "is not a known MakeMaker parameter name"
498
499 2.15  Apr 06 23:00 2002
500         - Added ABSTRACT info.
501         - Allow for smoother upgrade from
502           from older Net::Ping versions.
503         - Change default protocol from udp to tcp
504           so it will work on most default systems
505           without any arguments to new().
506
507 2.14  Apr 01 14:00 2002
508         - Added text ip lookup feature.
509           e@arix.com (Erick Calder)
510
511 2.13  Apr 01 14:00 2002
512         - Added ping time measuring feature.
513           e@arix.com (Erick Calder)
514         - Optionally allow for high resolution
515           precision for timeouts and measuring
516           using the Time::HiRes module (Erick).
517
518 2.12  Feb 17 19:00 2002
519         - More general error determination for
520           better cross platform consistency and
521           foreign language support.
522           Spotted by arnaud@romeconcept.com
523         - Test changes for VMS (Craig Berry)
524
525 2.11  Feb 02 12:00 2002
526         - Test changes in case echo port is not available.
527         - Fix 110_icmp_inst.t to use icmp protocol
528           Spotted by craigberry@mac.com (Craig Berry)
529
530 2.10  Dec 26 12:00 2001
531         - Added bind() function useful for clients with multiple
532           network interfaces performing the ping check thanks to
533           sethb@clarkhill.com (Seth Blumberg).
534         - Execution optimizations for several constants (Seth).
535         - More test changes in case Socket module is not available
536           (Jarkko Hietaniemi).
537
538 2.09  Dec 06 19:00 2001
539         - Documental and test changes only.
540         - No functional changes.
541
542 2.08  Dec 04 13:00 2001
543         - Faster response for Win32 tcp_connect.
544         - Better explanations in test comments.
545
546 2.07  Nov 28 13:00 2001
547         - Compatibility changes
548         - Works with UNIX and Win32 OS
549         - Works with Perl 5.005 5.6.x 5.7.x 5.8.x
550         - Applied several patches from distro
551         - External protocol added thanks to
552           colinm@cpan.org (Colin McMillen)
553         - Stream protocol added thanks to
554           bronson@trestle.com (Scott Bronson)
555
556 2.06  Nov 19 12:00 2001
557         - Added Net-Ping.spec for RPM to easily
558           utilize using "rpm -ta Net-Ping*tar.gz"
559         - Moved Copyright section to perldoc
560
561 2.05  Nov 18 20:00 2001
562         - Added test suite
563
564 2.04  Nov 16 16:00 2001
565         - Added CHANGES and README to tarball.
566         - No functional changes.
567
568 2.03  Nov 15 12:00 2001
569         - Portability adjustments to ping_tcp()
570           made by Rob Brown to work with most
571           default systems.
572
573 2.02  Sep 27 12:00 1996
574         - Magic version by Russell Mosemann from CPAN