+#!/usr/bin/perl
#
# grep for expressions in various fields of the dx file
#
-use FileHandle;
-use DXUtil;
-use DXDebug;
-use spot;
-
-# initialise spots file
-$count = spot->init();
-
-dbgadd('spot');
+# search local then perl directories
+BEGIN {
+ # root of directory tree for this system
+ $root = "/spider";
+ $root = $ENV{'DXSPIDER_ROOT'} if $ENV{'DXSPIDER_ROOT'};
+
+ unshift @INC, "$root/perl"; # this IS the right way round!
+ unshift @INC, "$root/local";
+}
-$field = $ARGV[0];
-$expr = $ARGV[1];
-$time = time;
+use IO::Handle;
+use DXUtil;
+use Bands;
+use Spot;
-print "$count database records read in\n";
+$dxdir = "/spider/cmd/show";
+$dxcmd = "dx.pl";
+$s = readfilestr($dxdir, $dxcmd);
+$dxproc = eval "sub { $s }";
+die $@ if $@;
STDOUT->autoflush(1);
+Spot::init();
+Bands::load();
-#loada();
for (;;) {
- print "field: ";
- $field = <STDIN>;
- last if $field =~ /^q/i;
print "expr: ";
$expr = <STDIN>;
+ last if $expr =~ /^q/i;
- chomp $field;
chomp $expr;
- print "doing field $field with /$expr/\n";
-
-#a();
- b();
-}
-
-sub b
-{
- my @spots;
- my @dx;
- my $ref;
- my $count;
-
- @spots = spot->search($field, $expr);
-
- foreach $ref (@spots) {
- @dx = @$ref;
- my $t = ztime($dx[2]);
- my $d = cldate($dx[2]);
- print "$dx[0] $dx[1] $d $t $dx[4] <$dx[3]>\n";
- ++$count;
- }
- print "$count records found\n";
-}
-
-sub loada
-{
- while (<IN>) {
- chomp;
- my @dx = split /\^/;
- next if $time - $dx[2] > (84600 * 60);
- unshift @spots, [ @dx ];
- ++$count;
- }
-}
-
-sub a
-{
- foreach $ref (@spots) {
- if ($$ref[$field] =~ /$expr/i) {
- my @dx = @$ref;
- my $t = ztime($dx[2]);
- my $d = cldate($dx[2]);
- print "$dx[0] $dx[1] $d $t $dx[4] <$dx[3]>\n";
- }
- }
+ my @out = map {"$_\n"} &$dxproc({priv=>0,call=>'GDX'}, $expr);
+ shift @out; # remove return code
+ print @out;
}