JWS-67 insert Jpred 3.0.1 sources into JABAWS
[jabaws.git] / binaries / src / jpred / lib / Index / EMBOSS.pm
1 package Index::EMBOSS;
2
3 use strict;
4 use warnings;
5 use Carp;
6
7 use POSIX qw(WIFEXITED WEXITSTATUS WIFSIGNALED WTERMSIG);
8 use IPC::Open3;
9
10 use base qw(Root);
11
12 use FASTA::File;
13
14 sub read_index { 1 }
15
16 sub get_sequence {
17   my ( $self, $key ) = @_;
18   croak "No value for get_sequence" unless $key;
19
20   my @cmd = split / /, "seqret -filter $key";
21
22   my $pid = open3( undef, \*RD, \*ERR, @cmd );
23
24   my $seqs = FASTA::File->new( read => \*RD );
25   my @err = <ERR>;
26
27   pop @err;
28   pop @err;
29
30   close RD;
31   close ERR;
32   waitpid $pid, 0;
33
34   # Everything was okay...
35   if ( WIFEXITED($?) and not WEXITSTATUS($?) ) { return $seqs }
36
37   # Non-zero exit
38   elsif ( WIFEXITED($?) and WEXITSTATUS($?) ) {
39     carp "seqret had a problem: $?; $!";
40     carp @err;
41   }
42
43   # Was it stopped by an external program
44   elsif ( WIFSIGNALED($?) ) {
45     carp "seqret halted by external signal " . WTERMSIG($?);
46   } else {
47     carp "seqret suffered from a random pantwetting event";
48   }
49
50   return undef;
51 }
52
53 1;