What's New
#!/usr/local/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=;
$formdata=$ENV{'QUERY_STRING'};
$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+$/ || $name eq "all")
{
if ($value eq "")
{
next LOOP;
}
$value=~s/^\s+//;
$value=~s/\s+$//;
$hidden.="\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.="\n";
}
else
{
${$name}=$value;
if ($name ne "start")
{
$hidden.="\n";
}
}
}
$output_number=$output_number || 10;
$start=$start || 0;
require "setup.pl";
foreach (keys(%data))
{
undef ($local_command);
if ($_ eq "all")
{
@input=split(/\s*,\s*/, $data{$_});
foreach $input (@input)
{
$local_command.=" || (\$data[\$a] =~/\\b$input\\b/i)";
}
$local_command=~s/^ \|\| //;
$command.=" && ($local_command)";
next;
}
$option=$options{$_};
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=;
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/,$/,""/;
$data[$a]=~s/\@/\\@/g;
eval ("\@fields=($data[$a]);");
if ($@ ne "")
{
print "Error evaluating record number $a
"; print "Record is $data[$a]
"; print "Error is $@
"; exit; } } 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>/$1/gi; $line=~s/
]*>//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 ();
}
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/$outtemp";
unless (open (TEMPL, $template))
{
print "Cannot open $template";
exit;
}
undef ($/);
$templ=;
close TEMPL;
($top, $record, $bottom)=split(//, $templ);
print $top;
}
sub print_bottom
{
($part1, $part2)=split(/!np!/, $bottom);
# print "\n";
print $part1;
# if ($start != 0)
# {
# print "$previous\n";
# }
# if ($count==$output_number+1)
# {
# print "$next\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;
}
"; print "Record is $data[$a]
"; print "Error is $@
"; exit; } } 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>/$1/gi; $line=~s/