#!/usr/bin/perl

my %ConfArray ;

require Cwd ;

my $home ;
findhome() ;


my $CONFFILE =  convPath("~/.sixpack.rc") ;
my $globalCONFFILE = "/etc/sixpack.rc" ;

$ConfArray{"PIDFILE"} = "$ENV{'HOME'}/.sixpack.pid" ;
$ConfArray{"WC"} = "/usr/bin/wc";
$ConfArray{"AWK"} = "/usr/bin/awk";
$ConfArray{"CAT"} = "/bin/cat";
$ConfArray{"TMP"} = "/tmp/$ENV{'USER'}";
$ConfArray{"CONV"} = "/usr/local/bin/bibconv";
$ConfArray{"DATE"} = "/bin/date";
$ConfArray{"EDIT"} = "/usr/bin/vim -f";
$ConfArray{"GREP"} = "/bin/grep";
$ConfArray{"LESS"} = "/usr/bin/less";
$ConfArray{"MV"} = "/bin/mv";
$ConfArray{"RM"} = "/bin/rm";
$ConfArray{"MISCHANDLE"} = '/bin/echo no handler for file %s' ;
$ConfArray{"PICSDIR"} = "/usr/local/lib/sixpack/Pics";
$ConfArray{"PAPERS"} = "$ENV{'HOME'}/papers";
$ConfArray{'BACKUPEXT'} = ".bak" ;
$ConfArray{'BPHOME'} = "/usr/local/lib/bp" ;

$ConfArray{'CITEID'} = "LACHMANN,98" ;

$ConfArray{'TITLEIGNORE'} = "the a of in and from on" ;

$SIG{'USR1'} = 'usrSignal' ;
$SIG{'USR2'} = 'usrSignal' ;
$SIG{'INT'} = 'intSignal' ;


if( !(-e $CONFFILE) ) { $CONFFILE = $globalCONFFILE ; }      

if( -e $CONFFILE ) {
   my ($name,$value,$line) ;
   open(CONF,$CONFFILE) || die "Can't open $CONFFILE\n" ;
   while( <CONF> ) {
       $_ =~ /([^#]*)#?.*/ ;
       $line = $1 ;
       if(!( $line =~ /^\s*$/ )) {
         ($name,$value) = split( /\s*=\s*/, $line, 2) ;
         $value =~ s/\n//g ;
         $ConfArray{$name} = $value ;
       }
   }
   close CONF ;
}

my $TMP = $ConfArray{"TMP"} ;

   
open(PIDF,"<".$ConfArray{"PIDFILE"}) ;
my $sixpackid = <PIDF> ;
close PIDF ;

open(FTELL,">".$TMP."-sig-".$sixpackid) ;
print FTELL join ("\#\#",@ARGV)  ;
print FTELL "\#\#$$" ;
close FTELL ;

if( !defined($sixpackid) || ($sixpackid =~ /^\s*$/) || kill ('USR1', $sixpackid) == 0 ) {
  unlink $TMP."-sig-".$sixpackid ;
  die "sixpack does not seem to be running!\n" ;
}

my $seconds = 0 ;
my $working=0 ;
my $s ;

# Wait for 30 seconds, and quit if sixpack hasn't started yet,
# Or wait for half an hour if it has.
# When sixpack finishes, it deletes the -sig- file.
#
# We need to wait, because netscape will delete the file once we
# quit.
while( (-e $TMP."-sig-".$sixpackid) && (-e $ConfArray{"PIDFILE"}) && ($seconds < 30 || $working) && ($seconds < 1800) ) {
  sleep(1) ; $seconds++ ;
  if( !$working ) {
    open(FTELL,$TMP."-sig-".$sixpackid) ;
    $s = <FTELL> ;
    close FTELL ;
    if( $s =~ /working/ ) { 
      $working = 1 ;
    }
  }
}

if( -e $TMP."-sig-".$sixpackid ) {
  unlink $TMP."-sig-".$sixpackid ;
}

exit ;


sub convPath
{
   my ($val) = @_;
   if (substr($val,0,1) eq '~') {
      if (substr($val,1,1) eq '/') {
	 $val = $home . substr($val,1);
      } else
      {my ($uid,$rest) = ($val =~ m#^~([^/]+)(/.*$)#
      );
      $val = (getpwnam($uid))[7] . $rest;
      }
   }
   return $val ;
}							   

sub findhome
{
  my $cwd = Cwd::getcwd() ;
  chdir( $ENV{'HOME'} ) ;
  $home = Cwd::getcwd() ;
  chdir( $cwd ) ;
}     

sub usrSignal
{
  my ($sig) = @_ ;
  if( $sig eq 'USR2' ) {
    open(FTELL,$TMP."-sig-".$sixpackid) ;
    my $err = <FTELL> ;
    close FTELL ;
    unlink $TMP."-sig-".$sixpackid ;
    die $err."\n" ;
  } else {
    unlink $TMP."-sig-".$sixpackid ;  
    exit 0 ;
  }
}

sub intSignal
{
  unlink $TMP."-sig-".$sixpackid ;
  exit 3 ;
}

