#!/usr/bin/perl

#

# decode input

if(defined($ENV{'CONTENT_LENGTH'})) {
    read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }
else { $buffer=$ENV{'QUERY_STRING'}; }

@pairs = split(/&/, $buffer);           #

$nfi=0;
@fi="";
foreach $pair (@pairs)
{
    ($name, $value) = split(/=/, $pair);
    $name =~ tr/+/ /;
    $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $fn0{$name} = $value;
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $fn{$name} = $value;
}

	$tt=time;
#vars
	$mine = ".";			# your host
	$here="./";			# dir of this cgi

	$fcnt=$here."detis.count";	# counter

	$fdb=$here."detis.txt";
	$fhtme=$here."anzeige-e.html";
	$fhtm1=$here."anzeige-1.html";
	$fhtm2=$here."anzeige-2.html";
	$fhtm3=$here."anzeige-3.html";

	$host	= $ENV{'REMOTE_HOST'};	# IP
	$page	= $ENV{'HTTP_REFERER'};	# check referer

	$date = `/usr/bin/date`; chop($date);	# date
	$mail = "/usr/lib/sendmail";		# mail prog

#	if ($page =~ /$mine/)		# bad referer
#		{ }
#	else
#		{ $er = "Nicht extern aufrufen !"; goto Err; }

	print "Content-type: text/html\n\n";

#get html
	if (open(FH, "<$fhtme") == false)	# open html
		{ $er="Öffnen fehlgeschlagen: ".$fhtme." !"; goto Err; }
	@htme = <FH>;
	close(FH);
	if (open(FH, "<$fhtm1") == false)	# open html
		{ $er="Öffnen fehlgeschlagen: ".$fhtm1." !"; goto Err; }
	@htm1 = <FH>;
	close(FH);
	if (open(FH, "<$fhtm2") == false)	# open html
		{ $er="Öffnen fehlgeschlagen: ".$fhtm2." !"; goto Err; }
	@htm2 = <FH>;
	close(FH);
	if (open(FH, "<$fhtm3") == false)	# open html
		{ $er="Öffnen fehlgeschlagen: ".$fhtm3." !"; goto Err; }
	@htm3 = <FH>;
	close(FH);

#pars
	$scan=$fn{'suche'};
	$bool=$fn{'bool'};
	$start=$fn{'start'}+0;

	foreach $htm0 (@htm1)
	{
		$htm=$htm0;
		$htm =~ s/<!--suche-->/$scan/g;
		print $htm;
	}

#counter
	if (open(FH, "<$fcnt") == false)	# read
	{ }
	else
	{
		$count=<FH>;
		close(FH);

		if (open(FH, ">$fcnt") == false)	# write
		{}
		else
		{
			$count++;
			print FH $count;
			close(FH);
		}
	}

#go
	if ($start>0) { goto In; }


# dec scan str
	@sstr = split(/ /, $scan);           #
	$sstr1=$sstr[0];
	$sn=0;
	foreach $sstr0 (@sstr)
	{
		$sn++;
		if (length($sstr0)<2)
		{ $er = "Suchbegriff muss mind. 2 Zeichen haben !"; goto Err; }
	}

#scan it
	$ln=0;
	$fn=0;
	@found="";

	if ($bool eq "or") { goto Or; }
	goto And;

#(and)
And:
	if (open(FH, "<$fdb") == false)	# open html
		{ $er="Öffnen fehlgeschlagen: ".$fdb." ! ";	goto Err; }
	while(<FH>)
	{
		$ln++;
		if ($_ =~ /$sstr1/i) # find all sstr1 lines
		{
			$fail=0;
			for ($i = 1; $i < $sn; $i++)	# doing all sstr
			{
				if ($_ =~ /$sstr[$i]/i)
				{ }
				else { $fail=1; }
			}
			if (! $fail)
			{
				$found[$fn]=$_;
				$fn++;
				if ($fn>1000)
				{ $er = "Über 1000 Datensätze, bitte Suche verfeinern !"; goto Err; }
			}
		}
	}
	close(FH);
	goto Out;

#(or)
Or:
	if (open(FH, "<$fdb") == false)	# open html
		{ $er="Open ".$fdb." failed !";	goto Err; }
	while(<FH>)
	{
		$ln++;
		for ($i = 0; $i < $sn; $i++)	# doing all sstr
		{
			if ($_ =~ /$sstr[$i]/i)
			{
				$found[$fn]=$_;
				$fn++;
				if ($fn>1000)
				{ $er = "Über 1000 Datensätze, bitte Suche verfeinern !"; goto Err; }
			}
		}
	}
	close(FH);
	goto Out;

#out
Out:
	$fcsc=$scan;
	$fcsc=~ s/ /_/g;
	$fcsc=$here."c/".$fcsc;
	if (open(FH, ">$fcsc") == false)	# open html
	{ }
	else
	{
		print FH @found;
		close(FH);
	}
	goto Disp;

#in
In:
	$fcsc=$scan;
	$fcsc=~ s/ /_/g;
	$fcsc=$here."c/".$fcsc;
	if (open(FH, "<$fcsc") == false)	# open html
	{ $er = "Letzte Suche verfallen, bitte neu eingeben !"; goto Err; }
	else
	{
		@found=<FH>;
		close(FH);
		$fn=@found;
	}
	goto Disp;

#disp
Disp:
	if ($start<1) { $start=1; }
	$ende=$start+49;
	if ($ende>$fn) { $ende=$fn; }

	for ($i = $start; $i <= $ende; $i++)	# doing
	{
		@flds = split(/\t/, $found[$i-1]);           #
		foreach $htm0 (@htm2)
		{
			$htm=$htm0;
			$htm =~ s/<!--nr-->/$i/g;
			$htm =~ s/<!--ges-->/$fn/g;
			$htm =~ s/<!--feld0-->/$flds[0]/g;
			$htm =~ s/<!--feld1-->/$flds[1]/g;
			$htm =~ s/<!--feld2-->/$flds[2]/g;
			$htm =~ s/<!--feld3-->/$flds[3]/g;
			$htm =~ s/<!--feld4-->/$flds[4]/g;
			$htm =~ s/<!--feld5-->/$flds[5]/g;
			$htm =~ s/<!--feld6-->/$flds[6]/g;
			$htm =~ s/<!--feld7-->/$flds[7]/g;
			$htm =~ s/<!--feld8-->/$flds[8]/g;
			$htm =~ s/<!--feld9-->/$flds[9]/g;
			$htm =~ s/<!--feld10-->/$flds[10]/g;
			print $htm;
		}
	}

	$pnpg="";
	for ($i = 1; $i <= $fn; $i+=50)	# doing
	{
		$pnpg .= "<a href=\"anzeige.cgi\?start=$i\&suche=$fn0{'suche'}\&bool=$fn0{'bool'}\">";
		$pnpg .= $i."-";
		if ($i+49<$fn) { $pnpg .= $i+49; }
		else { $pnpg .= $fn; }
		$pnpg .= "</a><br>";
	}
	$tt=time-$tt;
	foreach $htm0 (@htm3)
	{
		$htm=$htm0;
		$htm =~ s/<!--start-->/$start/g;
		$htm =~ s/<!--ende-->/$ende/g;
		$htm =~ s/<!--ges-->/$fn/g;
		$htm =~ s/<!--seiten-->/$pnpg/g;
		$htm =~ s/<!--zeit-->/$tt/g;
		$htm =~ s/<!--count-->/$count/g;
		print $htm;
	}

#print "total: $ln \n";
#print "found: $fn \n";
#print "\n";

# redi
#	print "Location: $redi\n\n";		# redirect the browser
goto Exit;

Err:
	foreach $htm0 (@htme)
	{
		$htm=$htm0;
		$htm =~ s/<!--error-->/$er/g;
		print $htm;
	}
	print "</BODY></HTML>\n";
goto Exit;

Exit:
# end
