# Diag.pm
# Author: Noah Friedman <friedman@splode.com>
# Created: 1999-12-28
# Public domain.

# $Id: Diag.pm,v 1.4 2000/02/11 11:19:28 friedman Exp $

# Commentary:
# Code:

package NF::Diag;

use Timestamp qw(timestamp);
use strict;

use Exporter;
use vars qw($VERSION @ISA @EXPORT);
$VERSION     = 1.00;
@ISA         = qw(Exporter);
@EXPORT      = qw(diag_error diag_warning diag_info);


use vars qw($diag_timestamp);
$diag_timestamp = 1;

use vars qw($diag_error_minlevel $diag_error_fh);
$diag_error_minlevel = 0;
$diag_error_fh = *STDERR{IO};

sub diag_error ($$;@)
{
  my $level = shift;
  return unless ($level >= $diag_error_minlevel);
  my $msg = diag_message ("Error", @_);
  print $diag_error_fh $msg;
  return undef;
}

use vars qw($diag_warning_minlevel $diag_warning_fh);
$diag_warning_minlevel = 0;
$diag_warning_fh = *STDERR{IO};

sub diag_warning ($$;@)
{
  my $level = shift;
  return unless ($level >= $diag_warning_minlevel);
  my $msg = diag_message ("Warning", @_);
  print $diag_warning_fh $msg;
  return undef;
}

use vars qw($diag_info_minlevel $diag_info_fh);
$diag_info_minlevel = 0;
$diag_info_fh = *STDOUT{IO};

sub diag_info ($$;@)
{
  my $level = shift;
  return unless ($level >= $diag_info_minlevel);
  my $msg = diag_message (@_);
  print $diag_info_fh $msg;
  return undef;
}


sub diag_message (@)
{
  my $msg = "\n";
  my $prog = $0;
  $prog = diag_timestamp () . " " . $prog if ($diag_timestamp);
  $msg = diag_escape (join (": ", $prog, @_)) . "\n"
    if (scalar @_ > 0);
  $msg =~ s/[ \t]+$//o;
  return $msg;
}

sub diag_escape ($)
{
  my $s = $_[0];
  $s =~ s/\\/\\\\/go;
  $s =~ s/\n/\\n/go;
  return $s;
}

sub diag_timestamp ()
{
  my $date = timestamp (time, "HMS");
  return "[$date]";
}

1;

# Diag.pm ends here
