home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Creative Review 33
/
Creative-Review-CD-ROM-33.iso
/
mac
/
MANPER
/
CGI
/
SEARCH.CGI
< prev
next >
Wrap
Text File
|
1997-08-21
|
5KB
|
324 lines
#!/usr/bin/perl
$directory = $0;
$directory =~ s#/[^/]*$##;
$program = $0;
$program =~ s#^.*/##;
$directory="." if ($directory eq $program);
unshift(@INC, $directory);
print "Content-type: text/html\n\n";
$formdata=<STDIN>;
$formdata=~s/\s+$//;
LOOP: foreach(split(/&/,$formdata))
{
($name, $value)=split(/=/, $_);
$name=~s/\+/ /g;
$name=~s/%([0-9|A-F]{2})/pack(C,hex($1))/eg;
$value=~s/\+/ /g;
$value=~s/%([0-9|A-F]{2})/pack(C,hex($1))/eg;
if ($name=~/^\d+$/)
{
if ($value eq "")
{
next LOOP;
}
$value=~s/^\s+//;
$value=~s/\s+$//;
$hidden.="<input type=hidden name=\"$name\" value=\"$value\">\n";
if ($data{$name} eq "")
{
$data{$name}=$value;
}
else
{
if ($options{$name}<4)
{
$data{$name}.=", $value";
}
elsif ($options{$name}==7)
{
$data{$name}.="-$value";
}
}
}
elsif ($name=~/^\d+_option$/)
{
($opt, $dm)=split(/_/, $name);
$options{$opt}=$value;
$hidden.="<input type=hidden name=\"$name\" value=\"$value\">\n";
}
else
{
${$name}=$value;
if ($name ne "start")
{
$hidden.="<input type=hidden name=\"$name\" value=\"$value\">\n";
}
}
}
$output_number=$output_number || 10;
$start=$start || 0;
require "setup.pl";
foreach (keys(%data))
{
$option=$options{$_};
undef ($local_command);
if ($option<=4)
{
@input=split(/\s*,\s*/, $data{$_});
}
else
{
@input=($data{$_});
}
foreach $input (@input)
{
&local_command;
}
$command.=" && ($local_command)";
}
$command=~s/^ && //;
if ($command eq "")
{
$command=1;
}
# matching
$count=0;
$file="$root/$file";
unless (open (FILE, $file))
{
print "Cannot open $file";
exit;
}
$/=$r_sep;
@data=<FILE>;
close FILE;
LOOP1: for ($a=$start; $a<@data; $a++)
{
$data[$a]=~s/$r_sep$//;
if ($quotes eq "on")
{
# put quotes around empty fields
$data[$a]=~s/,,/,"",/g;
$data[$a]=~s/,,/,"",/g;
$data[$a]=~s/^,/"",/;
$data[$a]=~s/,$/,""/;
eval ("\@fields=($data[$a]);");
}
else
{
@fields=split(/$f_sep/, $data[$a]);
}
if (eval($command))
{
$count++;
if ($count==1)
{
&print_template;
}
if ($count<=$output_number)
{
$line=$record;
if ($f_price ne "")
{
$fields[$f_price]=&display_price($fields[$f_price]);
}
$line=~s/!(\d+)!/$fields[$1]/g;
$line=~s/<a href="">([^<]+)<\/a>/$1/gi;
$line=~s/<img src=""[^>]+>//ig;
print $line;
}
elsif ($count==$output_number+1)
{
&print_bottom;
last LOOP1;
}
}
}
if ($count==0)
{
unless (open (NO, "$root/nomatch.htm"))
{
print "Cannot open file $root/nomatch.htm";
exit;
}
print (<NO>);
}
elsif ($count<=$output_number)
{
&print_bottom;
}
if ($log==1 && $start==0)
{
@numbers=sort numbers (keys(%data));
for ($i=0; $i<=$numbers[@numbers-1]; $i++)
{
$entry.="\"$data{$i}\",";
}
$entry=~s/,$/\n/;
open (LOG, ">>$root/log.txt");
chmod (0666, "$root/log.txt");
print LOG $entry;
close LOG;
}
sub print_template
{
$template="$root/listtemp.htm";
unless (open (TEMPL, $template))
{
print "Cannot open $template";
exit;
}
undef ($/);
$templ=<TEMPL>;
close TEMPL;
($top, $record, $bottom)=split(/<!--record-->/, $templ);
print $top;
}
sub print_bottom
{
($part1, $part2)=split(/!np!/, $bottom);
print "<FORM name=\"next\" method=post action=\"$cgi/search.cgi\">\n";
print $hidden;
print "<input type=hidden name=\"start\" value=\"$a\">\n";
print "</form>\n";
print $part1;
if ($start != 0)
{
print "<a href=\"javascript:self.history.go(-1)\">$previous</a>\n";
}
if ($count==$output_number+1)
{
print "<a href=\"javascript:document.next.submit()\">$next</a>\n";
}
print $part2;
}
sub numbers
{
if ($a>$b) {
$retval=1;
}
elsif ($a==$b) {
$retval=0;
}
else {
$retval=-1;
}
$retval;
}
sub local_command
{
if ($option>3)
{
$input=~s/[^\d\.-]+//g;
}
if ($option==1 || $option==4)
{
$local_command.=" || (\$fields[$_] eq \"$input\")";
}
elsif ($option==2)
{
$local_command.=" || (\$fields[$_]=~/^$input\$/i)";
}
elsif ($option==3)
{
$local_command.=" || (\$fields[$_]=~/\\b$input\\b/i)";
}
elsif ($option==5)
{
$local_command.=" || (\$fields[$_]>=$input)";
}
elsif ($option==6)
{
$local_command.=" || (\$fields[$_]<=$input)";
}
elsif ($option==7)
{
($min, $max)=split(/\s*-\s*/, $input);
$min=~s/[^\d\.]+//g;
$max=~s/[^\d\.]+//g;
$local_command.=" || (\$fields[$_]>=$min) && (\$fields[$_]<=$max)";
}
$local_command=~s/^ \|\| //;
}
sub display_price
{
local($price)=@_;
($dollars, $cents)=split(/\./, $price);
if ($cents=~/^(\d{2})(\d)/)
{
$cents=$1;
if ($2>5)
{
$cents++;
}
if ($cents==100)
{
$dollars++;
$cents="00";
}
}
if ($cents=~/^\d$/)
{
$cents=$&."0";
}
elsif ($cents eq "")
{
$cents="00";
}
$price=$dollars.".$cents";
return $price;
}