package Ovid::Redirect;

sub new
{
  my $self = bless {}, __PACKAGE__;
  open(TMPOUT,  ">&STDOUT");
  open(TMPERR,  ">&STDERR");
  
  open(STDERR, ">&TMPOUT");
  open(STDOUT, ">&TMPERR");      

  $self->{stdout} = *TMPOUT{IO};
  $self->{stderr} = *TMPERR{IO};
  return $self;
}

sub restore  {
  my $self = shift;
  open(STDERR, ">&$self->{stderr}");
  open(STDOUT, ">&$self->{stdout}");
}

package Ovid::RunQuiet;

use strict;

use Ovid::Common;
use Ovid::Error;

@Ovid::RunQuiet::ISA = qw(Ovid::Common Ovid::Error);

sub accessors { return { scalar => [qw()]}; }


sub run
  {
    my ($routine) = @_;
    my $io = Ovid::Redirect->new;
    &$routine;
    $io->restore;
  }


1;