1998-06-12 03:56:23 +04:00
|
|
|
#!/usr/bonsaitools/bin/perl
|
1998-06-13 01:58:38 +04:00
|
|
|
# $Id: search,v 1.4 1998/06/12 21:58:38 jwz Exp $
|
1998-06-12 03:56:23 +04:00
|
|
|
|
|
|
|
# search -- Freetext search
|
|
|
|
#
|
|
|
|
# Arne Georg Gleditsch <argggh@ifi.uio.no>
|
|
|
|
# Per Kristian Gjermshus <pergj@ifi.uio.no>
|
|
|
|
#
|
|
|
|
#
|
|
|
|
# This program is free software; you can redistribute it and/or modify
|
|
|
|
# it under the terms of the GNU General Public License as published by
|
|
|
|
# the Free Software Foundation; either version 2 of the License, or
|
|
|
|
# (at your option) any later version.
|
|
|
|
#
|
|
|
|
# This program is distributed in the hope that it will be useful,
|
|
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
# GNU General Public License for more details.
|
|
|
|
#
|
|
|
|
# You should have received a copy of the GNU General Public License
|
|
|
|
# along with this program; if not, write to the Free Software
|
|
|
|
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
|
|
|
|
|
|
######################################################################
|
|
|
|
|
|
|
|
use lib 'lib/';
|
|
|
|
use LXR::Common;
|
|
|
|
use LXR::Config;
|
|
|
|
|
|
|
|
$maxhits = 1000;
|
|
|
|
|
|
|
|
sub search {
|
1998-06-13 01:58:38 +04:00
|
|
|
print("<P ALIGN=CENTER>\n",
|
|
|
|
"Free-text search through the source code, including comments.\n",
|
|
|
|
"<BR>(Need some <A HREF=\"search-help.html\">Hints</A> ",
|
|
|
|
"on performing searches?)\n");
|
1998-06-12 03:56:23 +04:00
|
|
|
|
|
|
|
print("<form method=get action=\"search\">\n");
|
|
|
|
|
|
|
|
foreach ($Conf->allvariables) {
|
|
|
|
if ($Conf->variable($_) ne $Conf->vardefault($_)) {
|
|
|
|
print("<input type=hidden name=\"",$_, "\" ",
|
|
|
|
"value=\"", $Conf->variable($_), "\">\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
1998-06-13 01:48:51 +04:00
|
|
|
print("<B>Search for: </B><input type=text name=\"string\" ",
|
|
|
|
"value=\"",$searchtext,"\" size=50>\n",
|
1998-06-12 03:56:23 +04:00
|
|
|
"<input type=submit value=\"search\">\n",
|
|
|
|
# $Query->checkbox("case",0,0,"Case sensitive search"),
|
|
|
|
# $Query->checkbox("regexp",1,0,"Regular expression search"),
|
|
|
|
# $Query->popup_menu("fuzz",[0,1,2,3,4,5,6,7],0),
|
1998-06-13 01:58:38 +04:00
|
|
|
"</form>\n");
|
1998-06-12 03:56:23 +04:00
|
|
|
|
|
|
|
$| = 1; print('');
|
|
|
|
|
|
|
|
if ($searchtext ne "") {
|
|
|
|
print("<hr>\n");
|
|
|
|
unless (open(GLIMPSE, "-|")) {
|
|
|
|
open(STDERR, ">&STDOUT");
|
|
|
|
$!='';
|
1998-06-13 01:42:37 +04:00
|
|
|
exec($Conf->glimpsebin,"-i","-H".$Conf->dbdir,'-y','-n',$searchtext);
|
1998-06-12 03:56:23 +04:00
|
|
|
print("Glimpse subprocess died unexpextedly: $!\n");
|
|
|
|
exit;
|
|
|
|
}
|
|
|
|
|
|
|
|
$numlines = 0;
|
|
|
|
while (<GLIMPSE>) {
|
|
|
|
$numlines++;
|
|
|
|
push(@glimpselines,$_);
|
|
|
|
if ($numlines > $maxhits) {
|
|
|
|
last;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
close(GLIMPSE);
|
|
|
|
|
|
|
|
$retval = $? >> 8;
|
|
|
|
|
|
|
|
# The manpage for glimpse says that it returns 2 on syntax errors or
|
|
|
|
# inaccessible files. It seems this is not the case.
|
|
|
|
# We will have to work around it for the time being.
|
|
|
|
|
|
|
|
if ($retval == 0) {
|
|
|
|
if (@glimpselines == 0) {
|
|
|
|
print("No matching files<br>\n");
|
|
|
|
} else {
|
|
|
|
if ($numlines > $maxhits) {
|
|
|
|
print("<b> Too many hits, displaying first $maxhits</b><br>\n");
|
|
|
|
}
|
|
|
|
print("<h1>$searchtext</h1>\n");
|
|
|
|
$sourceroot = $Conf->sourceroot;
|
|
|
|
foreach $glimpseline (@glimpselines) {
|
|
|
|
|
|
|
|
$glimpseline =~ s/$sourceroot//;
|
|
|
|
($file, $line, $text) =
|
|
|
|
$glimpseline =~ /(.*?):\s*(\d+)\s*:(.*)/;
|
|
|
|
$text =~ s/&/&/g;
|
|
|
|
$text =~ s/</</g;
|
|
|
|
$text =~ s/>/>/g;
|
|
|
|
|
|
|
|
print(&fileref("$file, line $line", "$file", $line),
|
|
|
|
" -- $text<br>\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} elsif ($retval == 1) {
|
|
|
|
$glimpsebin = $Conf->glimpsebin;
|
|
|
|
$glimpseresponse = join("<br>",@glimpselines);
|
|
|
|
$glimpseresponse =~ s/$glimpsebin/Reason/;
|
|
|
|
$glimpseresponse =~ s/glimpse: error in searching index//;
|
|
|
|
print("<b>Search failed</b><br>\n$glimpseresponse");
|
|
|
|
} else {
|
|
|
|
print("Unexpected returnvalue $retval from Glimpse\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
($Conf, $HTTP, $Path) = &init;
|
|
|
|
$searchtext = $HTTP->{'param'}->{'string'};
|
|
|
|
|
|
|
|
&makeheader('search');
|
|
|
|
&search;
|
|
|
|
&makefooter('search');
|
|
|
|
|
|
|
|
|