]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
.del-stats.ulrich.patches~3aed0663, README, lr.pl, ntp.pl, ntploopstat:
authorHarlan Stenn <stenn@ntp.org>
Thu, 10 Feb 2000 06:57:08 +0000 (06:57 -0000)
committerHarlan Stenn <stenn@ntp.org>
Thu, 10 Feb 2000 06:57:08 +0000 (06:57 -0000)
  Applied Ulrich's patches.

bk: 38a26144fAupDdFfVwo1V6cXLQOXrA

scripts/monitoring/README
scripts/monitoring/lr.pl
scripts/monitoring/ntp.pl
scripts/monitoring/ntploopstat
scripts/stats.ulrich.patches [deleted file]

index fa8ad8bb958522969e288ef638ae206b858f5378..f8eb0a9544f678b384cd31108a5261cfc3178c97 100644 (file)
@@ -1,14 +1,14 @@
 This directory contains support for monitoring the local clock of xntp daemons.
 
-WARNING: The scripts and routines contained in this directory are bete realease!
-        Do not depend on their correct operation. They are, however, in regular
-        use at University of Erlangen-Nuernberg. No severe problems are known
-        for this code.
+WARNING: The scripts and routines contained in this directory are beta
+        release!  Do not depend on their correct operation. They are,
+        however, in regular use at University of Erlangen-Nuernberg.
+        No severe problems are known for this code.
 
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 PLEASE THINK TWICE BEFORE STARTING MONITORING REMOTE XNTP DEAMONS !!!!
 MONITORING MAY INCREASE THE LOAD OF THE DEAMON MONITORED AND MAY
-INCREASE THE NETWORK LOAD SIGNIFICANTLY 
+INCREASE THE NETWORK LOAD SIGNIFICANTLY
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 
@@ -23,8 +23,8 @@ ntptrap:
        It sends a set_trap request to each server given and dumps the
        trap messages received. It handles refresh of set_trap.
        Currently it handles only NTP V2, however the NTP V3 servers
-       also accept v2 requests. It will not interpret v3 system and peer
-       stati correctly.
+       also accept v2 requests. It will not interpret v3 system and
+       peer stati correctly.
 
        usage:
          ntptrap [-n] [-p <port>] [-l <debug-output>] servers...
@@ -72,7 +72,9 @@ ntploopstat:
        
        if a timeout occurs the next sample is tried after delay/2 seconds
 
-       The script will terminate after MAX_FAIL (currently 60) consecutive errors.
+       The script will terminate after MAX_FAIL (currently 60)
+       consecutive errors.
+
        Errors are counted for:
                - error on send call
                - error on select call
@@ -114,10 +116,10 @@ ntploopwatch:
        command line values would be replaced by settings from the config file.
 
        printer:        specify printer to print plot
-                       BSD print systems semantics apply; if printer is omitted
-                       the name "ps" is used; plots are prepared using
-                       PostScript, thus the printer should best accept
-                       postscript input
+                       BSD print systems semantics apply; if printer
+                       is omitted the name "ps" is used; plots are
+                       prepared using PostScript, thus the printer
+                       should best accept postscript input
 
        For the following see also the comments in loopwatch.config.SAMPLE
 
@@ -139,8 +141,10 @@ lr.pl:
        within display range
 
 timelocal.pl:
-       used during conversion of ISO_DATE_TIME values specified in loopwatch
-       config files to unix epoch values (seconds since 1970-01-01_00:00_00 UTC)
+
+       used during conversion of ISO_DATE_TIME values specified in
+       loopwatch config files to unix epoch values (seconds since
+       1970-01-01_00:00_00 UTC)
 
        A version of this file is distributed with perl-4.x, however,
        it has a bug related to dates crossing 1970, causing endless loops..
index 02c7550ec3ad74ea0ea31d37b904f9047b551a7a..7980d225840801c6e5afcbad950ac62687a2fe4e 100644 (file)
@@ -9,9 +9,14 @@
 ;#  Frank Kardel, Rainer Pruy
 ;#  Friedrich-Alexander Universitaet Erlangen-Nuernberg
 ;#
+;#  Copyright (c) 1997 by
+;#  Ulrich Windl <Ulrich.Windl@rz.uni-regensburg.de>
+;#  (Converted to a PERL 5.004 package)
 ;#
 ;#############################################################
 
+package lr;
+
 ##
 ## y = A + Bx
 ##
 ##
 ## interface
 ##
-*lr_init   = *lr'lr_init;      #';# &lr_init(tag); initialize data set for tag
-*lr_sample = *lr'lr_sample;    #';# &lr_sample(x,y,tag); enter sample
-*lr_Y      = *lr'lr_Y;         #';# &lr_Y(x,tag); compute y for given x 
-*lr_X      = *lr'lr_X;         #';# &lr_X(y,tag); compute x for given y
-*lr_r      = *lr'lr_r;         #';# &lr_r(tag);   regression coeffizient
-*lr_cov    = *lr'lr_cov;       #';# &lr_cov(tag); covariance
-*lr_A      = *lr'lr_A;         #';# &lr_A(tag);   
-*lr_B      = *lr'lr_B;         #';# &lr_B(tag);
-*lr_sigma  = *lr'lr_sigma;     #';# &lr_sigma(tag); standard deviation
-*lr_mean   = *lr'lr_mean;      #';# &lr_mean(tag);
+;# init(tag);          initialize data set for tag
+;# sample(x, y, tag);  enter sample
+;# Y(x, tag);          compute y for given x 
+;# X(y, tag);          compute x for given y
+;# r(tag);             regression coefficient
+;# cov(tag);           covariance
+;# A(tag);   
+;# B(tag);
+;# sigma(tag);         standard deviation
+;# mean(tag);
 #########################
 
-package lr;
-
-sub tagify
+sub init
 {
-    local($tag) = @_;
-    if (defined($tag))
-    {
-      *lr_n   = eval "*${tag}_n";
-      *lr_sx  = eval "*${tag}_sx";
-      *lr_sx2 = eval "*${tag}_sx2";
-      *lr_sxy = eval "*${tag}_sxy";
-      *lr_sy  = eval "*${tag}_sy";
-      *lr_sy2 = eval "*${tag}_sy2";
-    }
+    my $self = shift;
+
+    $self->{n}   = 0;
+    $self->{sx}  = 0.0;
+    $self->{sx2} = 0.0;
+    $self->{sxy} = 0.0;
+    $self->{sy}  = 0.0;
+    $self->{sy2} = 0.0;
 }
 
-sub lr_init
+sub sample($$$)
 {
-    &tagify($_[$[]) if defined($_[$[]);
-
-    $lr_n   = 0;
-    $lr_sx  = 0.0;
-    $lr_sx2 = 0.0;
-    $lr_sxy = 0.0;
-    $lr_sy  = 0.0;
-    $lr_sy2 = 0.0;
+    my $self = shift;
+    my($_x, $_y) = @_;
+
+    ++($self->{n});
+    $self->{sx}  += $_x;
+    $self->{sy}  += $_y;
+    $self->{sxy} += $_x * $_y;
+    $self->{sx2} += $_x**2;
+    $self->{sy2} += $_y**2;
 }
 
-sub lr_sample
+sub B($)
 {
-    local($_x, $_y) = @_;
-
-    &tagify($_[$[+2]) if defined($_[$[+2]);
+    my $self = shift;
 
-    $lr_n++;
-    $lr_sx  += $_x;
-    $lr_sy  += $_y;
-    $lr_sxy += $_x * $_y;
-    $lr_sx2 += $_x**2;
-    $lr_sy2 += $_y**2;
+    return 1 unless ($self->{n} * $self->{sx2} - $self->{sx}**2);
+    return ($self->{n} * $self->{sxy} - $self->{sx} * $self->{sy})
+       / ($self->{n} * $self->{sx2} - $self->{sx}**2);
 }
 
-sub lr_B
+sub A($)
 {
-    &tagify($_[$[]) if defined($_[$[]);
+    my $self = shift;
 
-    return 1 unless ($lr_n * $lr_sx2 - $lr_sx**2);
-    return ($lr_n * $lr_sxy - $lr_sx * $lr_sy) / ($lr_n * $lr_sx2 - $lr_sx**2);
+    return ($self->{sy} - B($self) * $self->{sx}) / $self->{n};
 }
 
-sub lr_A
+sub Y($$)
 {
-    &tagify($_[$[]) if defined($_[$[]);
+    my $self = shift;
 
-    return ($lr_sy - &lr_B * $lr_sx) / $lr_n;
+    return A($self) + B($self) * $_[$[];
 }
 
-sub lr_Y
+sub X($$)
 {
-    &tagify($_[$[]) if defined($_[$[]);
+    my $self = shift;
 
-    return &lr_A + &lr_B * $_[$[];
+    return ($_[$[] - A($self)) / B($self);
 }
 
-sub lr_X
+sub r($)
 {
-    &tagify($_[$[]) if defined($_[$[]);
+    my $self = shift;
 
-    return ($_[$[] - &lr_A) / &lr_B;
-}
-
-sub lr_r
-{
-    &tagify($_[$[]) if defined($_[$[]);
-
-    local($s) = ($lr_n * $lr_sx2 - $lr_sx**2) * ($lr_n * $lr_sy2 - $lr_sy**2);
+    my $s = ($self->{n} * $self->{sx2} - $self->{sx}**2)
+         * ($self->{n} * $self->{sy2} - $self->{sy}**2);
 
     return 1 unless $s;
     
-    return ($lr_n * $lr_sxy - $lr_sx * $lr_sy) / sqrt($s);
+    return ($self->{n} * $self->{sxy} - $self->{sx} * $self->{sy}) / sqrt($s);
 }
 
-sub lr_cov
+sub cov($)
 {
-    &tagify($_[$[]) if defined($_[$[]);
+    my $self = shift;
 
-    return ($lr_sxy - $lr_sx * $lr_sy / $lr_n) / ($lr_n - 1);
+    return ($self->{sxy} - $self->{sx} * $self->{sy} / $self->{n})
+       / ($self->{n} - 1);
 }
 
-sub lr_sigma
+sub sigma($)
 {
-    &tagify($_[$[]) if defined($_[$[]);
+    my $self = shift;
 
-    return 0 if $lr_n <= 1;
-    return sqrt(($lr_sy2 - ($lr_sy * $lr_sy) / $lr_n) / ($lr_n));
+    return 0 if $self->{n} <= 1;
+    return sqrt(($self->{sy2} - ($self->{sy} * $self->{sy}) / $self->{n})
+               / ($self->{n}));
 }
 
-sub lr_mean
+sub mean($)
 {
-    &tagify($_[$[]) if defined($_[$[]);
+    my $self = shift;
 
-    return 0 if $lr_n <= 0;
-    return $lr_sy / $lr_n;
+    return 0 if $self->{n} <= 0;
+    return $self->{sy} / $self->{n};
 }
 
-&lr_init();
+sub new
+{
+    my $class = shift;
+    my $self = {
+       (n => undef,
+        sx => undef,
+        sx2 => undef,
+        sxy => undef,
+        sy => undef,
+        sy2 => undef)
+    };
+    bless $self, $class;
+    init($self);
+    return $self;
+}
 
 1;
index ea9e69c2022a3865b99ee9ef5a876c0443ce0f8a..b23f396ee0247b6ec438a7226e371cd6cd9e1d35 100644 (file)
@@ -1,4 +1,4 @@
-#!/local/bin/perl
+#!/usr/bin/perl -w
 ;#
 ;# ntp.pl,v 3.1 1993/07/06 01:09:09 jbj Exp
 ;#
@@ -43,7 +43,7 @@ $keyid=0;
     ;#  N  key
     ;#  N2 checksum
     
-;# first bye of packet
+;# first byte of packet
 sub pkt_LI   { return ($_[$[] >> 6) & 0x3; }
 sub pkt_VN   { return ($_[$[] >> 3) & 0x7; }
 sub pkt_MODE { return ($_[$[]     ) & 0x7; }
@@ -223,6 +223,7 @@ sub PeerSelection
 {
     &getval(&psw_PSel($_[$[]),*PeerSelection);
 }
+
 sub PeerEvent
 {
     &getval(&psw_PCode($_[$[]),*PeerEvent);
@@ -394,14 +395,14 @@ sub handle_packet
        $lastseen = 1 if !&pkt_M($r_e_m_op);
        if (!defined(%FRAGS))
        {
-           # (&pkt_M($r_e_m_op) ? " more" : "")."\n";
+           print((&pkt_M($r_e_m_op) ? " more" : "")."\n");
            $FRAGS{$offset} = $data;
            ;# save other info
            @FRAGS = ($status,$associd,&pkt_OP($r_e_m_op),$seq,$auth_keyid,$r_e_m_op);
        }
        else
        {
-           # (&pkt_M($r_e_m_op) ? " more" : "")."\n";
+           print((&pkt_M($r_e_m_op) ? " more" : "")."\n");
            ;# add frag to previous - combine on the fly
            if (defined($FRAGS{$offset}))
            {
index 75cdff227b27c0c3f739b3696685b24339db1cd9..7583c7cca018fa24510620013d811eb6102f03bb 100644 (file)
@@ -1,4 +1,5 @@
-#!/local/bin/perl -w--*-perl-*-
+#!/usr/bin/perl -w
+# --*-perl-*-
 ;#
 ;# ntploopstat,v 3.1 1993/07/06 01:09:11 jbj Exp
 ;# 
@@ -22,7 +23,7 @@
 ;#              (Should have implemented &gettimeofday()..)
 ;#
 
-$0 =~ s!^.*/([^/]+)$!\1!;              # beautify script name
+$0 =~ s!^.*/([^/]+)$!$1!;              # beautify script name
 
 $ntpserver = 'localhost';              # default host to poll
 $delay = 60;                           # default sampling rate
diff --git a/scripts/stats.ulrich.patches b/scripts/stats.ulrich.patches
deleted file mode 100644 (file)
index fe642f6..0000000
+++ /dev/null
@@ -1,1003 +0,0 @@
-\ 1\ 1\ 1\ 1
-Received: from huey2.ee.udel.edu by mail.eecis.udel.edu id aa25207;
-          10 Dec 1997 10:39 EST
-Received: from copland.udel.edu by huey.udel.edu id aa16958;
-          10 Dec 1997 10:39 EST
-Received: from rrzs2.rz.uni-regensburg.de (rrzs2.rz.uni-regensburg.de [132.199.1.2]) by copland.udel.edu (8.8.5/8.7.3) with ESMTP id KAA21293 for <mills@udel.edu>; Wed, 10 Dec 1997 10:39:12 -0500 (EST)
-Received: from ngate.ngate.uni-regensburg.de (ngate.rz.uni-regensburg.de [132.199.3.13])
-       by rrzs2.rz.uni-regensburg.de (8.8.5/8.8.5) with SMTP id QAA19974
-       for <mills@udel.edu>; Wed, 10 Dec 1997 16:38:42 +0100 (MET)
-Received: from rkdvmks1.ngate.uni-regensburg.de by ngate.ngate.uni-regensburg.de; Wed, 10 Dec 97 16:39 MET
-Received: from rkdvmks1.ngate.uni-regensburg.de by kgate.ngate.uni-regensburg.de; Wed, 10 Dec 97 15:38 GMT
-Received: from RKDVMKS1/SpoolDir by rkdvmks1.ngate.uni-regensburg.de (Mercury 1.32);
-    10 Dec 97 16:38:34 +0100
-Received: from SpoolDir by RKDVMKS1 (Mercury 1.32); 10 Dec 97 16:38:06 +0100
-From: Ulrich Windl <ulrich.windl@rz.uni-regensburg.de>
-Organization: Universitaet Regensburg, Klinikum
-To: mills@udel.edu
-Date: Wed, 10 Dec 1997 16:38:04 +0100
-MIME-Version: 1.0
-Content-Type: text/plain; charset=US-ASCII
-Content-transfer-encoding: 7BIT
-Subject: Big patch to scripts/monitoring
-Priority: normal
-X-mailer: Pegasus Mail for Windows (v2.53/R1)
-Message-ID: <103AB9D209F5@rkdvmks1.ngate.uni-regensburg.de>
-
-Dave, there's another big patch against scripts/monitoring. The Perl 
-programs in there are rather old. As they are quite nice thogh, I 
-decided to update them for the latest version of Perl, namely 5.004.
-
-I'll include the description of changes and the patch.
-
-Ulrich
-
-Here is a description of changes made in ntploopwatch:
-
-Corrected most warnings that PERL 5.004 might emit.  Corrected signal
-handlers to make them work again. Corrected scaling (at least I
-think). Supported case when output is sent to file or printer and
-there is no X11 available. Fixed number of month in xlabels of the
-plot.
-
-Added the ability to specify printer for GNUplot other that
-PostScript. Use hostname if $STATHOST is not given in configuration
-file. Corrected verbosity level for some messages. Added ability to
-specify a non-standard print command.
-
-Perl 5.004_04 does no longer ignore ``-w--*-perl-*-''. Made some
-cosmetic changes and added a timescale of 10 minutes.
-
-(Other programs are functionally unchanged. lr.pl is a PERL module now.)
-
-
-Index: README
-===================================================================
-RCS file: /home/windl/NTP/mon-REP/monitoring/README,v
-retrieving revision 1.1.1.1
-retrieving revision 1.2
-diff -u -r1.1.1.1 -r1.2
---- README     1993/08/24 19:29:34     1.1.1.1
-+++ README     1997/10/23 17:51:37     1.2
-@@ -1,14 +1,14 @@
- This directory contains support for monitoring the local clock of xntp daemons.
--WARNING: The scripts and routines contained in this directory are bete realease!
--       Do not depend on their correct operation. They are, however, in regular
--       use at University of Erlangen-Nuernberg. No severe problems are known
--       for this code.
-+WARNING: The scripts and routines contained in this directory are beta
-+       release!  Do not depend on their correct operation. They are,
-+       however, in regular use at University of Erlangen-Nuernberg.
-+       No severe problems are known for this code.
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- PLEASE THINK TWICE BEFORE STARTING MONITORING REMOTE XNTP DEAMONS !!!!
- MONITORING MAY INCREASE THE LOAD OF THE DEAMON MONITORED AND MAY
--INCREASE THE NETWORK LOAD SIGNIFICANTLY 
-+INCREASE THE NETWORK LOAD SIGNIFICANTLY
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-@@ -23,8 +23,8 @@
-       It sends a set_trap request to each server given and dumps the
-       trap messages received. It handles refresh of set_trap.
-       Currently it handles only NTP V2, however the NTP V3 servers
--      also accept v2 requests. It will not interpret v3 system and peer
--      stati correctly.
-+      also accept v2 requests. It will not interpret v3 system and
-+      peer stati correctly.
-       usage:
-         ntptrap [-n] [-p <port>] [-l <debug-output>] servers...
-@@ -72,7 +72,9 @@
-       
-       if a timeout occurs the next sample is tried after delay/2 seconds
--      The script will terminate after MAX_FAIL (currently 60) consecutive errors.
-+      The script will terminate after MAX_FAIL (currently 60)
-+      consecutive errors.
-+
-       Errors are counted for:
-               - error on send call
-               - error on select call
-@@ -114,10 +116,10 @@
-       command line values would be replaced by settings from the config file.
-       printer:        specify printer to print plot
--                      BSD print systems semantics apply; if printer is omitted
--                      the name "ps" is used; plots are prepared using
--                      PostScript, thus the printer should best accept
--                      postscript input
-+                      BSD print systems semantics apply; if printer
-+                      is omitted the name "ps" is used; plots are
-+                      prepared using PostScript, thus the printer
-+                      should best accept postscript input
-       For the following see also the comments in loopwatch.config.SAMPLE
-@@ -139,8 +141,10 @@
-       within display range
- timelocal.pl:
--      used during conversion of ISO_DATE_TIME values specified in loopwatch
--      config files to unix epoch values (seconds since 1970-01-01_00:00_00 UTC)
-+
-+      used during conversion of ISO_DATE_TIME values specified in
-+      loopwatch config files to unix epoch values (seconds since
-+      1970-01-01_00:00_00 UTC)
-       A version of this file is distributed with perl-4.x, however,
-       it has a bug related to dates crossing 1970, causing endless loops..
-Index: lr.pl
-===================================================================
-RCS file: /home/windl/NTP/mon-REP/monitoring/lr.pl,v
-retrieving revision 1.1.1.1
-retrieving revision 1.4
-diff -u -r1.1.1.1 -r1.4
---- lr.pl      1993/08/24 19:29:33     1.1.1.1
-+++ lr.pl      1997/10/23 17:51:37     1.4
-@@ -9,9 +9,14 @@
- ;#  Frank Kardel, Rainer Pruy
- ;#  Friedrich-Alexander Universitaet Erlangen-Nuernberg
- ;#
-+;#  Copyright (c) 1997 by
-+;#  Ulrich Windl <Ulrich.Windl@rz.uni-regensburg.de>
-+;#  (Converted to a PERL 5.004 package)
- ;#
- ;#############################################################
-+package lr;
-+
- ##
- ## y = A + Bx
- ##
-@@ -23,123 +28,124 @@
- ##
- ## interface
- ##
--*lr_init   = *lr'lr_init;     #';# &lr_init(tag); initialize data set for tag
--*lr_sample = *lr'lr_sample;   #';# &lr_sample(x,y,tag); enter sample
--*lr_Y      = *lr'lr_Y;                #';# &lr_Y(x,tag); compute y for given x 
--*lr_X      = *lr'lr_X;                #';# &lr_X(y,tag); compute x for given y
--*lr_r      = *lr'lr_r;                #';# &lr_r(tag);   regression coeffizient
--*lr_cov    = *lr'lr_cov;      #';# &lr_cov(tag); covariance
--*lr_A      = *lr'lr_A;                #';# &lr_A(tag);   
--*lr_B      = *lr'lr_B;                #';# &lr_B(tag);
--*lr_sigma  = *lr'lr_sigma;    #';# &lr_sigma(tag); standard deviation
--*lr_mean   = *lr'lr_mean;     #';# &lr_mean(tag);
-+;# init(tag);         initialize data set for tag
-+;# sample(x, y, tag); enter sample
-+;# Y(x, tag);         compute y for given x 
-+;# X(y, tag);         compute x for given y
-+;# r(tag);            regression coefficient
-+;# cov(tag);          covariance
-+;# A(tag);   
-+;# B(tag);
-+;# sigma(tag);                standard deviation
-+;# mean(tag);
- #########################
--package lr;
--
--sub tagify
--{
--    local($tag) = @_;
--    if (defined($tag))
--    {
--      *lr_n   = eval "*${tag}_n";
--      *lr_sx  = eval "*${tag}_sx";
--      *lr_sx2 = eval "*${tag}_sx2";
--      *lr_sxy = eval "*${tag}_sxy";
--      *lr_sy  = eval "*${tag}_sy";
--      *lr_sy2 = eval "*${tag}_sy2";
--    }
--}
--
--sub lr_init
-+sub init
- {
--    &tagify($_[$[]) if defined($_[$[]);
-+    my $self = shift;
--    $lr_n   = 0;
--    $lr_sx  = 0.0;
--    $lr_sx2 = 0.0;
--    $lr_sxy = 0.0;
--    $lr_sy  = 0.0;
--    $lr_sy2 = 0.0;
-+    $self->{n}   = 0;
-+    $self->{sx}  = 0.0;
-+    $self->{sx2} = 0.0;
-+    $self->{sxy} = 0.0;
-+    $self->{sy}  = 0.0;
-+    $self->{sy2} = 0.0;
- }
--sub lr_sample
-+sub sample($$$)
- {
--    local($_x, $_y) = @_;
--
--    &tagify($_[$[+2]) if defined($_[$[+2]);
-+    my $self = shift;
-+    my($_x, $_y) = @_;
--    $lr_n++;
--    $lr_sx  += $_x;
--    $lr_sy  += $_y;
--    $lr_sxy += $_x * $_y;
--    $lr_sx2 += $_x**2;
--    $lr_sy2 += $_y**2;
-+    ++($self->{n});
-+    $self->{sx}  += $_x;
-+    $self->{sy}  += $_y;
-+    $self->{sxy} += $_x * $_y;
-+    $self->{sx2} += $_x**2;
-+    $self->{sy2} += $_y**2;
- }
--sub lr_B
-+sub B($)
- {
--    &tagify($_[$[]) if defined($_[$[]);
-+    my $self = shift;
--    return 1 unless ($lr_n * $lr_sx2 - $lr_sx**2);
--    return ($lr_n * $lr_sxy - $lr_sx * $lr_sy) / ($lr_n * $lr_sx2 - $lr_sx**2);
-+    return 1 unless ($self->{n} * $self->{sx2} - $self->{sx}**2);
-+    return ($self->{n} * $self->{sxy} - $self->{sx} * $self->{sy})
-+      / ($self->{n} * $self->{sx2} - $self->{sx}**2);
- }
--sub lr_A
-+sub A($)
- {
--    &tagify($_[$[]) if defined($_[$[]);
-+    my $self = shift;
--    return ($lr_sy - &lr_B * $lr_sx) / $lr_n;
-+    return ($self->{sy} - B($self) * $self->{sx}) / $self->{n};
- }
--sub lr_Y
-+sub Y($$)
- {
--    &tagify($_[$[]) if defined($_[$[]);
-+    my $self = shift;
--    return &lr_A + &lr_B * $_[$[];
-+    return A($self) + B($self) * $_[$[];
- }
--sub lr_X
-+sub X($$)
- {
--    &tagify($_[$[]) if defined($_[$[]);
-+    my $self = shift;
--    return ($_[$[] - &lr_A) / &lr_B;
-+    return ($_[$[] - A($self)) / B($self);
- }
--sub lr_r
-+sub r($)
- {
--    &tagify($_[$[]) if defined($_[$[]);
-+    my $self = shift;
--    local($s) = ($lr_n * $lr_sx2 - $lr_sx**2) * ($lr_n * $lr_sy2 - $lr_sy**2);
-+    my $s = ($self->{n} * $self->{sx2} - $self->{sx}**2)
-+        * ($self->{n} * $self->{sy2} - $self->{sy}**2);
-     return 1 unless $s;
-     
--    return ($lr_n * $lr_sxy - $lr_sx * $lr_sy) / sqrt($s);
-+    return ($self->{n} * $self->{sxy} - $self->{sx} * $self->{sy}) / sqrt($s);
- }
--sub lr_cov
-+sub cov($)
- {
--    &tagify($_[$[]) if defined($_[$[]);
-+    my $self = shift;
--    return ($lr_sxy - $lr_sx * $lr_sy / $lr_n) / ($lr_n - 1);
-+    return ($self->{sxy} - $self->{sx} * $self->{sy} / $self->{n})
-+      / ($self->{n} - 1);
- }
--sub lr_sigma
-+sub sigma($)
- {
--    &tagify($_[$[]) if defined($_[$[]);
-+    my $self = shift;
--    return 0 if $lr_n <= 1;
--    return sqrt(($lr_sy2 - ($lr_sy * $lr_sy) / $lr_n) / ($lr_n));
-+    return 0 if $self->{n} <= 1;
-+    return sqrt(($self->{sy2} - ($self->{sy} * $self->{sy}) / $self->{n})
-+              / ($self->{n}));
- }
--sub lr_mean
-+sub mean($)
- {
--    &tagify($_[$[]) if defined($_[$[]);
-+    my $self = shift;
--    return 0 if $lr_n <= 0;
--    return $lr_sy / $lr_n;
-+    return 0 if $self->{n} <= 0;
-+    return $self->{sy} / $self->{n};
- }
--&lr_init();
-+sub new
-+{
-+    my $class = shift;
-+    my $self = {
-+      (n => undef,
-+       sx => undef,
-+       sx2 => undef,
-+       sxy => undef,
-+       sy => undef,
-+       sy2 => undef)
-+    };
-+    bless $self, $class;
-+    init($self);
-+    return $self;
-+}
- 1;
-Index: ntp.pl
-===================================================================
-RCS file: /home/windl/NTP/mon-REP/monitoring/ntp.pl,v
-retrieving revision 1.1.1.1
-retrieving revision 1.3
-diff -u -r1.1.1.1 -r1.3
---- ntp.pl     1993/08/24 19:29:34     1.1.1.1
-+++ ntp.pl     1997/10/23 18:19:41     1.3
-@@ -1,4 +1,4 @@
--#!/local/bin/perl
-+#!/usr/bin/perl -w
- ;#
- ;# ntp.pl,v 3.1 1993/07/06 01:09:09 jbj Exp
- ;#
-@@ -43,7 +43,7 @@
-     ;#  N  key
-     ;#  N2 checksum
-     
--;# first bye of packet
-+;# first byte of packet
- sub pkt_LI   { return ($_[$[] >> 6) & 0x3; }
- sub pkt_VN   { return ($_[$[] >> 3) & 0x7; }
- sub pkt_MODE { return ($_[$[]     ) & 0x7; }
-@@ -223,6 +223,7 @@
- {
-     &getval(&psw_PSel($_[$[]),*PeerSelection);
- }
-+
- sub PeerEvent
- {
-     &getval(&psw_PCode($_[$[]),*PeerEvent);
-@@ -394,14 +395,14 @@
-       $lastseen = 1 if !&pkt_M($r_e_m_op);
-       if (!defined(%FRAGS))
-       {
--          (&pkt_M($r_e_m_op) ? " more" : "")."\n";
-+          print((&pkt_M($r_e_m_op) ? " more" : "")."\n");
-           $FRAGS{$offset} = $data;
-           ;# save other info
-           @FRAGS = ($status,$associd,&pkt_OP($r_e_m_op),$seq,$auth_keyid,$r_e_m_op);
-       }
-       else
-       {
--          (&pkt_M($r_e_m_op) ? " more" : "")."\n";
-+          print((&pkt_M($r_e_m_op) ? " more" : "")."\n");
-           ;# add frag to previous - combine on the fly
-           if (defined($FRAGS{$offset}))
-           {
-Index: ntploopstat
-===================================================================
-RCS file: /home/windl/NTP/mon-REP/monitoring/ntploopstat,v
-retrieving revision 1.1.1.1
-retrieving revision 1.3
-diff -u -r1.1.1.1 -r1.3
---- ntploopstat        1993/08/24 19:29:32     1.1.1.1
-+++ ntploopstat        1997/11/23 19:07:12     1.3
-@@ -1,4 +1,5 @@
--#!/local/bin/perl -w--*-perl-*-
-+#!/usr/bin/perl -w
-+# --*-perl-*-
- ;#
- ;# ntploopstat,v 3.1 1993/07/06 01:09:11 jbj Exp
- ;# 
-@@ -22,7 +23,7 @@
- ;#              (Should have implemented &gettimeofday()..)
- ;#
--$0 =~ s!^.*/([^/]+)$!\1!;             # beautify script name
-+$0 =~ s!^.*/([^/]+)$!$1!;             # beautify script name
- $ntpserver = 'localhost';             # default host to poll
- $delay = 60;                          # default sampling rate
-Index: ntploopwatch
-===================================================================
-RCS file: /home/windl/NTP/mon-REP/monitoring/ntploopwatch,v
-retrieving revision 1.1.1.1
-retrieving revision 1.14
-diff -u -r1.1.1.1 -r1.14
---- ntploopwatch       1993/10/22 14:28:18     1.1.1.1
-+++ ntploopwatch       1997/12/07 17:06:36     1.14
-@@ -1,4 +1,5 @@
--#!/local/bin/perl -w--*-perl-*-
-+#!/usr/bin/perl -w
-+#--*-perl-*-
- ;#
- ;# ntploopwatch,v 3.1 1993/07/06 01:09:13 jbj Exp
- ;#
-@@ -9,12 +10,17 @@
- ;#  Copyright (c) 1992 
- ;#  Rainer Pruy Friedrich-Alexander Universitaet Erlangen-Nuernberg
- ;#
-+;#  Copyright (c) 1997
-+;#  Ulrich Windl <Ulrich.Windl@rz.uni-regensburg.de>
-+;#  (Corrections for Perl5 and other fixes)
- ;#
- ;#############################################################
--$0 =~ s!^.*/([^/]+)$!\1!;
-+$0 =~ s!^.*/([^/]+)$!$1!;
- $F = ' ' x length($0);
- $|=1;
-+use 5.004;    # require 5.004
-+
- $ENV{'SHELL'} = '/bin/sh'; # use bourne shell
- undef($config);
-@@ -23,17 +29,17 @@
- undef($samples);
- undef($StartTime);
- undef($EndTime);
--($a,$b) if 0;                 # keep -w happy
-+
- $usage = <<"E-O-P";
- usage:
--  to watch statistics permanently:
-+  to watch statistics periodically:
-      $0 [-v[<level>]] [-c <config-file>] [-d <working-dir>]
-      $F [-h <hostname>]
-   to get a single print out specify also
--     $F -P[<printer>] [-s<samples>]
--     $F               [-S <start-time>] [-E <end-time>]
--     $F               [-Y <MaxOffs>] [-y <MinOffs>]
-+     $F -P[[<term_type:>]<printer>]
-+     $F [-s<samples>] [-S <start-time>] [-E <end-time>]
-+     $F [-Y <MaxOffs>] [-y <MinOffs>]
- If You like long option names, You can use:
-     -help
-@@ -41,21 +47,28 @@
-     -d    +directory
-     -h    +host
-     -v    +verbose[=<level>]
--    -P    +printer[=<printer>]
-+    -P    +printer[=[<term_type>:]<printer>[:<print_cmd>]]
-     -s    +samples[=<samples>]
-     -S    +starttime
-     -E    +endtime
-     -Y    +maxy
-     -y    +miny
-+If <printer> is prefixed with a <term_type> and a colon, the <term_type>
-+given is used as terminal fpr gnuplot.
- If <printer> contains a '/' (slash character) output is directed to 
- a file of this name instead of delivered to a printer.
-+If suffix :<print_cmd> is given, the suffix is used as the print command,
-+and <printer> is ignored.  If blanks are needed inside <term_type> or
-+<print_cmd>, just use underscores instead.
- E-O-P
- ;# add directory to look for lr.pl and timelocal.pl (in front of current list)
- unshift(@INC,"/src/NTP/v3/xntp/monitoring");
- require "lr.pl";      # linear regresion routines
-+my $lr_offs = new lr;
-+my $lr_freq = new lr;
- $MJD_1970 = 40587;            # from ntp.h (V3)
- $RecordSize = 48;             # usually a line fits into 42 bytes
-@@ -171,16 +184,20 @@
- ;# configuration file
- $config = "loopwatch.config" unless defined($config);
--($STATHOST = $config) =~ s!.*loopwatch\.config.([^/\.]*)$!\1!
-+($STATHOST = $config) =~ s!.*loopwatch\.config.([^/\.]+)$!$1!
-     unless defined($STATHOST);
--($STATTAG = $STATHOST) =~ s/^([^\.\*\s]+)\..*$/\1/;
-+if ($STATHOST eq $config) {
-+    require "hostname.pl";
-+    $STATHOST = hostname();
-+}
-+($STATTAG = $STATHOST) =~ s/^([^\.\*\s]+)\..*$/$1/;
- $srcprefix =~ s/\$STATHOST/$STATHOST/g;
- ;# plot command 
--@plotcmd=("gnuplot",
--        '-title', "Ntp loop filter statistics $STATHOST",
--        '-name', "NtpLoopWatch_$STATTAG");
-+@plotcmd=("gnuplot");
-+push(@plotcmd, '-title', "NTP loop filter statistics for $STATHOST",
-+     '-name', "NtpLoopWatch_$STATTAG") unless $PrintIt;
- $tmpfile = "/tmp/ntpstat.$$";
- ;# other variables
-@@ -211,9 +228,8 @@
-              $?>>8,$? & 0xff)) if $?;
-   exit(1) if $? && defined($Plotpid) && $pid == $Plotpid;
- }
--&sigchld if 0;
--$SIG{'CHLD'} = "sigchld";
--$SIG{'CLD'} = "sigchld";
-+$SIG{'CHLD'} = \&sigchld;
-+$SIG{'CLD'} = \&sigchld;
- sub abort
- {
-@@ -221,8 +237,7 @@
-   defined($Plotpid) && kill('TERM',$Plotpid);
-   die("$0: received signal SIG$_[$[] - exiting\n");
- }
--&abort if 0;  # make -w happy - &abort IS used
--$SIG{'INT'} = $SIG{'HUP'} = $SIG{'QUIT'} = $SIG{'TERM'} = $SIG{'PIPE'} = "abort";
-+$SIG{'INT'} = $SIG{'HUP'} = $SIG{'QUIT'} = $SIG{'TERM'} = $SIG{'PIPE'} = \&abort;
- ;#
- sub abs
-@@ -248,7 +263,7 @@
-    open(STDOUT,">&STDERR") ||
-        die("$0: failed to redirect STDOUT of plot command: $!\n");
-    
--   print STDOUT "plot command running as $$\n";
-+   print STDOUT "plot command has PID $$\n";
-    exec @plotcmd;
-    die("$0: failed to exec (@plotcmd): $!\n");
-@@ -275,128 +290,83 @@
-     s/^([^\#]*[^\#\s]?)\s*\#.*$//;
-     next if /^\s*$/;
--    s/^\s*([^=\s]*)\s*=\s*(.*\S)\s*$/\1=\2/;
-+    s/^\s*([^=\s]*)\s*=\s*(.*\S)\s*$/$1=$2/;
--    ($c,$v) = split(/=/,$_,2);
-+    ($c,$v) = ($1, $2);
-     print "processing \"$c=$v\"\n" if $verbose > 3;
--    ($c eq "delay") && ($delay = $v,1) && next;
--    ($c eq 'samples') && (!defined($PrintIt) || !defined($samples)) &&
--      ($samples = $v,1) && next;
--    ($c eq 'srcprefix') && (($srcprefix=$v)=~s/\$STATHOST/$STATHOST/g,1)
--      && next;
--    ($c eq 'showoffs') &&
--      ($showoffs = ($v eq 'yes' || $v eq 'y' || $v != 0),1) && next;
--    ($c eq 'showfreq') &&
--      ($showfreq = ($v eq 'yes' || $v eq 'y' || $v != 0),1) && next;
--    ($c eq 'showcmpl') &&
--      ($showcmpl = ($v eq 'yes' || $v eq 'y' || $v != 0),1) && next;
--    ($c eq 'showoreg') &&
--      ($showoreg = ($v eq 'yes' || $v eq 'y' || $v != 0),1) && next;
--    ($c eq 'showfreg') &&
--      ($showfreg = ($v eq 'yes' || $v eq 'y' || $v != 0),1) && next;
--
--    ($c eq 'exit') && (unlink($tmpfile),die("$0: exit by config request\n"));
--
--    ($c eq 'freqbase' ||
--     $c eq 'cmplscale') &&
--      do {
--          if (! defined($v) || $v eq "" || $v eq 'dynamic')
--          {
--            eval "undef(\$$c);";
--          }
--          else
--          {
--            eval "\$$c = \$v;";
--          }
--          next;
--      };
--    ($c eq 'timebase') &&
--      do {
--          if (! defined($v) || $v eq "" || $v eq "dynamic")
--          {
--            undef($timebase);
--          }
--          else
--          {
--            $timebase=&date_time_spec2seconds($v);
--          }
--      };
--    ($c eq 'EndTime') &&
--      do {
--          next if defined($EndTime) && defined($PrintIt);
--          if (! defined($v) || $v eq "" || $v eq "none")
--          {
--            undef($EndTime);
--          }
--          else
--          {
--            $EndTime=&date_time_spec2seconds($v);
--          }
--      };
--    ($c eq 'StartTime') &&
--      do {
--          next if defined($StartTime) && defined($PrintIt);
--          if (! defined($v) || $v eq "" || $v eq "none")
--          {
--            undef($StartTime);
--          }
--          else
--          {
--            $StartTime=&date_time_spec2seconds($v);
--          }
--      };
--
--    ($c eq 'MaxY') &&
--      do {
--          next if defined($MaxY) && defined($PrintIt);
--          if (! defined($v) || $v eq "" || $v eq "none")
--          {
--            undef($MaxY);
--          }
--          else
--          {
--            $MaxY=$v;
--          }
--      };
--
--    ($c eq 'MinY') &&
--      do {
--          next if defined($MinY) && defined($PrintIt);
--          if (! defined($v) || $v eq "" || $v eq "none")
--          {
--            undef($MinY);
--          }
--          else
--          {
--            $MinY=$v;
--          }
--      };
--
--    ($c eq 'deltaT') &&
--      do {
--          if (!defined($v) || $v eq "")
--          {
--            undef($deltaT);
--          }
--          else
--          {
--            $deltaT = $v;
--          }
--          next;
--      };
--    ($c eq 'verbose') && ! defined($PrintIt) &&
--      do {
--           if (!defined($v) || $v == 0)
--           {
--             $verbose = 0;
--           }
--           else
--           {
--             $verbose = $v;
--           }
--           next;
--      };
--    ;# otherwise: silently ignore unrecognized config line
-+    if ($c eq "delay") {
-+      $delay = $v;
-+    } elsif ($c eq 'samples') {
-+      $samples = $v if (!defined($PrintIt) || !defined($samples));
-+    } elsif ($c eq 'srcprefix') {
-+      ($srcprefix = $v) =~ s/\$STATHOST/$STATHOST/g;
-+    } elsif ($c eq 'showoffs') {
-+      $showoffs = ($v =~ /^yes$|^y$|^1$/);
-+    } elsif ($c eq 'showfreq') {
-+      $showfreq = ($v =~ /^yes$|^y$|^1$/);
-+    } elsif ($c eq 'showcmpl') {
-+      $showcmpl = ($v =~ /^yes$|^y$|^1$/);
-+    } elsif ($c eq 'showoreg') {
-+      $showoreg = ($v =~ /^yes$|^y$|^1$/);
-+    } elsif ($c eq 'showfreg') {
-+      $showfreg = ($v =~ /^yes$|^y$|^1$/);
-+    } elsif ($c eq 'exit') {
-+      unlink($tmpfile); die("$0: exit by config request\n");
-+    } elsif ($c eq 'freqbase' || $c eq 'cmplscale') {
-+      if (! defined($v) || $v eq "" || $v eq 'dynamic') {
-+          eval "undef(\$$c);";
-+      } else {
-+          eval "\$$c = \$v;";
-+      }
-+    } elsif ($c eq 'timebase') {
-+      if (! defined($v) || $v eq "" || $v eq "dynamic") {
-+          undef($timebase);
-+      } else {
-+          $timebase=&date_time_spec2seconds($v);
-+      }
-+    } elsif ($c eq 'EndTime') {
-+      next if defined($EndTime) && defined($PrintIt);
-+      if (! defined($v) || $v eq "" || $v eq "none") {
-+          undef($EndTime);
-+      } else {
-+          $EndTime=&date_time_spec2seconds($v);
-+      }
-+    } elsif ($c eq 'StartTime') {
-+      next if defined($StartTime) && defined($PrintIt);
-+      if (! defined($v) || $v eq "" || $v eq "none") {
-+          undef($StartTime);
-+      } else {
-+          $StartTime=&date_time_spec2seconds($v);
-+      }
-+    } elsif ($c eq 'MaxY') {
-+      next if defined($MaxY) && defined($PrintIt);
-+      if (! defined($v) || $v eq "" || $v eq "none") {
-+          undef($MaxY);
-+      } else {
-+          $MaxY=$v;
-+      }
-+    } elsif ($c eq 'MinY') {
-+      next if defined($MinY) && defined($PrintIt);
-+      if (! defined($v) || $v eq "" || $v eq "none") {
-+          undef($MinY);
-+      } else {
-+          $MinY=$v;
-+      }
-+    } elsif ($c eq 'deltaT') {
-+      if (!defined($v) || $v eq "") {
-+          undef($deltaT);
-+      } else {
-+          $deltaT = $v;
-+      }
-+    } elsif ($c eq 'verbose' && ! defined($PrintIt)) {
-+      if (!defined($v) || $v == 0) {
-+          $verbose = 0;
-+      } else {
-+          $verbose = $v;
-+      }
-+    } else {
-+      ;# otherwise: silently ignore unrecognized config line
-+    }
-   }
-   close(CF);
-   ;# set show defaults when nothing selected
-@@ -413,16 +383,16 @@
-     print  "   showcmpl\t= $showcmpl\n";
-     print  "   showoreg\t= $showoreg\n";
-     print  "   showfreg\t= $showfreg\n";
--    printf "   timebase\t= %s",defined($timebase)?&ctime($timebase):"dynamic\n";
--    printf "   freqbase\t= %s\n",defined($freqbase)  ?"$freqbase":"dynamic";
--    printf "   cmplscale\t= %s\n",defined($cmplscale)?"$cmplscale":"dynamic";
--    printf "   StartTime\t= %s",defined($StartTime)?&ctime($StartTime):"none\n";
--    printf "   EndTime\t= %s",  defined($EndTime) ?  &ctime($EndTime):"none\n";
--    printf "   MaxY\t= %s",defined($MaxY)? $MaxY      :"none\n";
--    printf "   MinY\t= %s",defined($MinY)? $MinY      :"none\n";
-+    printf "   timebase\t= %s", defined($timebase) ? &ctime($timebase) : "dynamic\n";
-+    printf "   freqbase\t= %s\n", defined($freqbase) ? "$freqbase" : "dynamic";
-+    printf "   cmplscale\t= %s\n", defined($cmplscale) ? "$cmplscale" : "dynamic";
-+    printf "   StartTime\t= %s", defined($StartTime) ? &ctime($StartTime) : "none\n";
-+    printf "   EndTime\t= %s", defined($EndTime) ? &ctime($EndTime):"none\n";
-+    printf "   MaxY\t= %s", defined($MaxY) ? $MaxY : "none\n";
-+    printf "   MinY\t= %s", defined($MinY) ? $MinY : "none\n";
-     print  "   verbose\t= $verbose\n";
-   }
--print "configuration file read\n" if $verbose > 2;
-+  print "configuration file read\n" if $verbose > 2;
- }
- sub make_doplot
-@@ -443,10 +413,9 @@
-     ;# number of integral seconds to get at least 12 tic marks on x axis
-     $t = int(($maxtime - $mintime) / 12 + 0.5);
-     $t = 1 unless $t;         # prevent $t to be zero
--    foreach $i (30,
--              60,5*60,15*60,30*60,
--              60*60,2*60*60,6*60*60,12*60*60,
--              24*60*60,48*60*60)
-+    foreach $i (30, 60,
-+              5*60, 10*60, 15*60, 30*60, 60*60,
-+              2*60*60, 6*60*60, 12*60*60, 24*60*60, 48*60*60)
-     {
-       last if $t < $i;
-       $t = $t - ($t % $i);
-@@ -458,31 +427,30 @@
-        $i <= $maxtime + $t;
-        $i += $t, $c=",")
-     {
-+      my ($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime($i);
-+
-       $s .= $c;
-       ((int($i / $t) % 2) &&
-        ($s .= sprintf("'' %lf",($i - $LastTimeBase)/3600))) ||
-            (($t <= 60) &&
-             ($s .= sprintf("'%d:%02d:%02d' %lf",
--                           (localtime($i))[$[+2,$[+1,$[+0],
--                           ($i - $LastTimeBase)/3600))) 
-+                           $hour, $min, $sec, ($i - $LastTimeBase) / 3600))) 
-                || (($t <= 2*60*60) &&
-                    ($s .= sprintf("'%d:%02d' %lf",
--                                  (localtime($i))[$[+2,$[+1],
--                                  ($i - $LastTimeBase)/3600)))
-+                                  $hour, $min, ($i - $LastTimeBase) / 3600)))
-                    || (($t <= 12*60*60) &&
-                        ($s .= sprintf("'%s %d:00' %lf",
--                                      $Day[(localtime($i))[$[+6]],
--                                      (localtime($i))[$[+2],
--                                      ($i - $LastTimeBase)/3600)))
-+                                      $Day[$wday], $hour,
-+                                      ($i - $LastTimeBase) / 3600)))
-                        || ($s .= sprintf("'%d.%d-%d:00' %lf",
--                                         (localtime($i))[$[+3,$[+4,$[+2],
--                                         ($i - $LastTimeBase)/3600));
-+                                         $mday, $mon + 1, $hour,
-+                                         ($i - $LastTimeBase) / 3600));
-     }
-     $doplot .= "set xtics ($s)\n";
-     
-     chop($xts = &ctime($mintime));
-     chop($xte = &ctime($maxtime));
--    $doplot .= "set xlabel 'Start:  $xts    --   Time Scale   --    End:  $xte'\n";
-+    $doplot .= "set xlabel 'Start: $xts   -- Time Scale --   End: $xte'\n";
-     $doplot .= "set yrange [" ;
-     $doplot .= defined($MinY) ? sprintf("%lf", $MinY) : $miny;
-     $doplot .= ':';
-@@ -518,22 +486,22 @@
-        $c = ",");
-     $showoreg && $showoffs &&
-       ($doplot .= sprintf($regfmt, $c,
--                          &lr_B('offs'),&lr_A('offs'),
--                          "offset   ",
--                          &lr_B('offs'),
--                          ((&lr_A('offs')) < 0 ? '-' : '+'),
--                          &abs(&lr_A('offs')), &lr_r('offs'),
-+                          $lr_offs->B(),$lr_offs->A(),
-+                          "offset",
-+                          $lr_offs->B(),
-+                          (($lr_offs->A()) < 0 ? '-' : '+'),
-+                          &abs($lr_offs->A()), $lr_offs->r(),
-                           "[ms]"),
-        $c = ",");
-     $showfreg && $showfreq &&
-       ($doplot .= sprintf($regfmt, $c,
--                          &lr_B('freq') * $FreqScale,
--                          (&lr_A('freq') + $minfreq) * $FreqScale - $LastFreqBase,
-+                          $lr_freq->B() * $FreqScale,
-+                          ($lr_freq->A() + $minfreq) * $FreqScale - $LastFreqBase,
-                           "frequency",
--                          &lr_B('freq') * $FreqScale,
--                          ((&lr_A('freq') + $minfreq) * $FreqScale - $LastFreqBase) < 0 ? '-' : '+',
--                          &abs((&lr_A('freq') + $minfreq) * $FreqScale - $LastFreqBase),
--                          &lr_r('freq'),
-+                          $lr_freq->B() * $FreqScale,
-+                          (($lr_freq->A() + $minfreq) * $FreqScale - $LastFreqBase) < 0 ? '-' : '+',
-+                          &abs(($lr_freq->A() + $minfreq) * $FreqScale - $LastFreqBase),
-+                          $lr_freq->r(),
-                           "[${FreqScaleInv}ppm]"),
-        $c = ",");
-     $doplot .= "\n";
-@@ -583,7 +551,7 @@
-     $#loffset = $[ - 1;
-     $#filekey = $[ - 1;
-     print "memory allocation ready\n" if $verbose > 2;
--    sleep(3) if $verbose > 1;
-+    sleep(3) if $verbose > 2;
-     if (index($in,"/") < $[)
-     {
-@@ -606,7 +574,6 @@
-       ;# rescan directory on changes
-       $Lsdir = $sdir;
-       $Ltime = (stat($sdir))[$[+9];
--      </X{> if 0;             # dummy line - calm down my formatter
-       local(@newfiles) = < ${in}*[0-9] >;
-       local($st_dev,$st_ino,$st_mtime,$st_size,$name,$key,$modified);
-@@ -626,7 +593,7 @@
-               $F_key{$name} = $key;
-               $modified++;
-           }
--          if (!defined($F_name{$key}) || $F_name{$key} != $name)
-+          if (!defined($F_name{$key}) || $F_name{$key} ne $name)
-           {
-               $F_name{$key} = $name;
-               $modified++;
-@@ -643,9 +610,9 @@
-           }
-           if ($modified)
-           {
--              print "new data \"$name\" key: $key;\n" if $verbose > 1;
-+              print "new data \"$name\" key: $key;\n" if $verbose > 2;
-               print "             size: $st_size; mtime: $st_mtime;\n"
--                  if $verbose > 1;
-+                  if $verbose > 2;
-               $F_last{$key} = $F_first{$key} = $st_mtime;
-               $F_first{$key}--; # prevent zero divide later on
-               ;# now compute derivated attributes
-@@ -692,7 +659,7 @@
-               }
-               close(IN);
-               print("             first: ",$F_first{$key},
--                    " last: ",$F_last{$key},"\n") if $verbose > 1;
-+                    " last: ",$F_last{$key},"\n") if $verbose > 2;
-           }
-       }
-       ;# now reclaim memory used for files no longer referenced ...
-@@ -739,7 +706,7 @@
-       }
-       ;# create list sorted by time
-       @F_files = sort {$F_first{$a} <=> $F_first{$b}; } keys(%F_name);
--      if ($verbose > 1)
-+      if ($verbose > 2)
-       {
-           print "Resulting file list:\n";
-           foreach (@F_files)
-@@ -797,7 +764,7 @@
-           print "guess start according to StartTime ($StartTime)\n"
-               if $verbose > 3;
--          if ($fpos[$[] eq 'start')
-+          if (defined $fpos[$[] && $fpos[$[] eq 'start')
-           {
-               if (grep($_ eq $fpos[$[+1],@f))
-               {
-@@ -1001,9 +968,9 @@
-           $t += $F[$[+1];     # add seconds + fraction
-           
-           ;# multiply offset by 1000 to get ms - try to avoid float op
--          (($F[$[+2] =~ s/(\d*)\.(\d{3})(\d*)/\1\2.\3/) &&
-+          (($F[$[+2] =~ s/(\d*)\.(\d{3})(\d*)/$1$2.$3/) &&
-            $F[$[+2] =~ s/0+([\d\.])/($1 eq '.') ? '0.' : $1/e) # strip leading zeros
--              || $F[$[+2] *= 1000;
-+              || ($F[$[+2] *= 1000);
-           
-           ;# skip samples out of specified time range
-@@ -1036,8 +1003,8 @@
-     print "input scanned ($l lines/",scalar(@time)," samples)\n"
-       if $verbose > 1;
-     
--    &lr_init('offs');
--    &lr_init('freq');
-+    $lr_offs->init();
-+    $lr_freq->init();
-     
-     if (@time)
-     {
-@@ -1047,17 +1014,17 @@
-       local($freqbase) unless defined($freqbase);
-       local($cmplscale) unless defined($cmplscale);
-       
--      undef($mintime,$maxtime,$minoffs,$maxoffs,
--            $minfreq,$maxfreq,$mincmpl,$maxcmpl,
--            $miny,$maxy);
-+      undef $mintime; undef $maxtime; undef $minoffs; undef $maxoffs;
-+      undef $minfreq; undef $maxfreq; undef $mincmpl; undef $maxcmpl;
-+      undef $miny; undef $maxy;
-       
-       print "computing ranges\n" if $verbose > 2;
-       
-       $LastCnt = @time;
-       ;# @time is in ascending order (;-)
--      $mintime = @time[$[];
--      $maxtime = @time[$#time];
-+      $mintime = $time[$[];
-+      $maxtime = $time[$#time];
-       unless (defined($timebase))
-       {
-           local($time,@X) = (time);
-@@ -1081,24 +1048,24 @@
-           ;# (otherwise a (shift(@a1),shift(a2)) would do),
-           ;# I dont like to make copies of these arrays as they may be huge
-           $i = $[;
--          &lr_sample(($time[$i]-$timebase)/3600,$offs[$
-\ 1\ 1\ 1\ 1