#!/usr/bin/perl
#use CGI::Carp "fatalsToBrowser";
use Socket;
require "templates/set.cgi";
require "templates/zentral.cgi";
$cachezeit = 60 if($cachezeit !~ /^\d+$/);
#
# Autor: Stefan Gipper (Stefanos)
# Webseite: http://www.coder-world.de
# E-Mail: support@coder-world.de
#
$spaltenanzahl = 1 if(!$spaltenanzahl or $spaltenanzahl !~ /^\d+$/ or $spaltenanzahl < 1);
$drucksaveSPALTEN = 10 if(!$drucksaveSPALTEN or $drucksaveSPALTEN !~ /^\d+$/ or $drucksaveSPALTEN < 1);

$zeit = time();
$version = "1.62";
BEGIN {
	use FindBin;
	use lib ("$FindBin::Bin", "$FindBin::Bin/libs");
	$ENV{'TMPDIR'} = $ENV{'TEMP'} || "";

	eval { $died_in_eval = 1; require LWP::Simple; };
	if($@){
		$lwpsimple = 0;
	}else{
		$lwpsimple = 1;
		import LWP::Simple;
	}
#	eval { $eval_in_died = 1; require Text::Metaphone; };
#	if(!$@){
#		$mod_metaphone = 1;
#		import Text::Metaphone;
#	}

	eval { $eval_in_died = 1; require Digest::MD5; };
	if(!$@){
		$mod_md5 = 1;
		import Digest::MD5;
	}
	eval { $died_in_eval = 1; require Encode; };
	if($@){
		$encode = 0;
	}else{
		$encode = 1;
		import Encode qw(from_to);
	}
}

$OS = $ENV{HTTP_USER_AGENT};
if($OS=~/vms/i){
	$CRLF = "\n";
}elsif($OS=~/^MacOS$/i){
	$CRLF = "\n\r";
}else{
	$CRLF = "\015\012";
}

binmode STDIN;
read(STDIN, $Daten, $ENV{'CONTENT_LENGTH'});

if($ENV{'CONTENT_TYPE'} =~ /^(.+)boundary=(.+)$/){
	$boundary = '--'.$2;
	@parts = split(/$boundary/, $Daten);
}else{
	@parts = split(/&/, $Daten);
}
foreach (@parts){
	if($boundary){
		($header,$content) = split(/$CRLF$CRLF/,$_,2);
		($namex) = ($header =~ / name="([^"]*?)"/s);
	}else{
		($namex,$content) = split(/=/, $_,2);
	}
	if($content){
		if($header =~ /filename/s && $boundary ne "" && $namex =~ /^file-upload-[\d]+$/i){
			($filename) = ($header =~ /; filename="([^"]*?)"/s);
			$filename =~ s/^.*\\//;
			($mimetype) = ($header =~ /Content-Type: (.*)/s);
			$mimetype =~ s/($CRLF.*)//s;

			if($filename){
				$content =~ s/^$CRLF//gs;
				$content =~ s/$CRLF$//gs;
				$FORM{$namex} = $content;
				$FILE{$namex} = $filename;
				$MIME{$namex} = $mimetype;
			}
		}else{
			$namex =~ tr/+/ /;
			$namex =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
			$content =~ tr/+/ /;
			$content =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
			$content =~ s/$CRLF/\n/g;

			chomp($content);
			if($FORM{$namex} ne ""){
				$FORM{$namex} .= "\|$content"; # ,$content";
			}else{
				$FORM{$namex} = $content;
			}
		}
	}
}
foreach (split(/&/,$ENV{QUERY_STRING})){
	($namex,$value) = split(/=/,$_,2);
	$namex =~ tr/+/ /;
	$namex =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
	$value =~ tr/+/ /;
	$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
	$value =~ s/<!--(.|\n)*-->//g;
	if($INFO{$namex} ne ""){
		$INFO{$namex} .= ",$value";
	}else{
		$INFO{$namex} = $value;
	}
}
$action = $INFO{'a'} || $FORM{'a'};
$INFO{'lang'}--;

if($action eq "1"){
	&index;
}elsif($action =~ /^admin/){
	require "templates/admin.cgi";
	&$action;
}elsif($action =~ /^start|^index|^view|^version/){
	&$action;
}
if($startseite != 1){
	&view;
}else{
	&start;
}

sub index {
	$check_referer = 1;
	open(F,"<templates/block.dat");
	flock(F,2) if($flock);
	while(<F>){
		$_ =~ s/[\n\r]//g;
		if($ENV{'HTTP_REFERER'} =~ m|https?://([^/]*)$_|i){
			$check_referer = 0;
			last;
		}
	}
	flock(F,8) if($flock);
	close(F);
	&error("Diese Internet-Adresse ist gesperrt.") if($check_referer != 1);

	$INFO{'js'} = 0 unless($INFO{'js'});
	&error("Der max. Wert wieviel News angezeigt werden ist inkorrekt.") if($INFO{'max'} !~ /^\d+$/ or $INFO{'max'} > 99);
	&error("Die Zeitangabe beinhaltet nicht nur Zahlen.") if($INFO{'time'} !~ /^\d+$/ && $INFO{'time'} ne "");

	if($referer){
		$ENV{'HTTP_REFERER'} = "Unbekannt" if($ENV{'HTTP_REFERER'} !~ /^http:\/\//);
		$auf = $ENV{'HTTP_REFERER'} || "Unbekannt";

		$noref = 1;
		open(F,"<templates/noref.dat");
		flock(F,2) if($flock);
		while(<F>){
			$_ =~ s/[\n\r]//g;
			if($auf =~ /\Q$_\E/i){
				$noref = 0;
			}
		}
		flock(F,8) if($flock);
		close(F);

		if($noref == 1){

			($suchwort) = ($auf =~ /(?:context=|searchfor=|domain=|as_epq=|entry=|aqa=|epq=|qry=|keywords=|search=|query=|string=|keyword=|begriff=|name=|asq=|mt=|q2=|qs=|su=|gs=|q=|p=|w=)([^&]+)(?:&|\?|$)/i);

			if($suchwort ne "" && $auf =~ /(?:context=|searchfor=|domain=|as_epq=|entry=|aqa=|epq=|qry=|keywords=|search=|query=|string=|keyword=|begriff=|name=|asq=|mt=|q2=|qs=|su=|gs=|q=|p=|w=)([^&]+)(?:&|\?|$)/i){
				$suchwort = lc($suchwort);
				$suchwort =~ tr/+/ /;
				$suchwort =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
				$suchwort =~ s/[\n\r]//g;
				$suchwort =~ s/\s\s+//g;
				$suchwort =~ s/\s$//g;
				$suchwort =~ s/^\s//g;

				open(F,"+<templates/suchwort.dat");
				flock(F,2) if($flock);
				@auf = <F>;
				$zahl = $#auf+1;
				seek(F,0,0);
				truncate(F,0);
				if($zahl >= 1){
					foreach (@auf){
						s/[\n\r]//g;
						($one,$two) = split(/\|/);

						if($two eq $suchwort && $aufyes ne 1){
							$one++;
							print F "$one\|$suchwort\n";
							$aufyes = 1;
						}else{
							print F "$one\|$two\n";
						}
					}
					print F "1\|$suchwort\n" if($aufyes ne 1);
				}else{
					print F "1\|$suchwort\n";
				}
				flock(F,8) if($flock);
				close(F);
			}else{
				open(F,"+<templates/ref.dat");
				flock(F,2) if($flock);
				@auf = <F>;
				$zahl = $#auf+1;
				seek(F,0,0);
				truncate(F,0);
				if($zahl >= 1){
					foreach (@auf){
						s/[\n\r]//g;
						($one,$two) = split(/\|/);

						if($two eq $auf && $aufyes ne 1){
							$one++;
							print F "$one\|$auf\n";
							$aufyes = 1;
						}else{
							print F "$one\|$two\n";
						}
					}
					print F "1\|$auf\n" if($aufyes ne 1);
				}else{
					print F "1\|$auf\n";
				}
				flock(F,8) if($flock);
				close(F);
			}
		}
	}

	if($INFO{'iframe'} or $INFO{'js'}){
		if($INFO{'itemplate'} =~ /^\w+\.\w+$/ && $INFO{'itemplate'} !~ /^admin/){
			open(F,"<templates/$INFO{'itemplate'}");
		}else{
			open(F,"<templates/iframe.html");
		}
#		flock(F,2) if($flock);
		($druck,$druck2,$druck3) = split(/<!-- SPLIT -->/,join("",<F>));
#		flock(F,8) if($flock);
		close(F);
	}

	if((-e("templates/$INFO{'name'}.csv")) && $INFO{'cache'} ne "no" && $cache == 1){
		$time = $INFO{'time'} || $cachezeit;
		$time = $cachezeit if(length($time) < 2);

		if((((stat("templates/$INFO{'name'}.csv"))[9])+$time) > $zeit){
			open(F,"<templates/$INFO{'name'}.csv");
			flock(F,2) if($flock);
			if($INFO{'js'} == 1){
				while(<F>){
					$_ =~ s/[\n\r]//g;
					($url,$titel,$des,$timeup) = split(/\|/,$_);
					&wortkuerze;

					open(Z,"<templates/zensur.dat");
					flock(Z,2) if($flock);
					while(<Z>){
						s/[\n\r]//g;
						my $sterne = "\*" x length($_);
						$titel =~ s/$_/$sterne/ig;
					}
					flock(Z,8) if($flock);
					close(Z);

					if($newsi == $INFO{'max'}){
						last;
					}elsif($titel ne "" && $url ne ""){
						$newsi++;
						$tempx = $druck2;
						$tempx =~ s/\'/\\\'/g;
						$tempx =~ s/__titel__/$titel/g;
						$tempx =~ s/__titel2__/$titel2/g;
						if($des){
							$tempx =~ s/__des__/txt2html($des)/eg;
						}else{
							$tempx =~ s/__des__//g;
						}
						$tempx =~ s/__url__/$url/g;
						$tempx =~ s/[\n\r]//g;
						$x .= qq~document.write('$tempx');\n~;
					}
				}
			}elsif($INFO{'js'} == 2){
				$x = join("",<F>);
			}elsif($INFO{'js'} == 3){
				&error("Die XML-Funktion wurde deaktiviert.") if($xmloption && !$INFO{'pass'} or !$xmloption && $xmlpass ne $INFO{'pass'});
				$x .= qq~<?xml version="1.0" encoding="ISO-8859-1"?>\n~;
				$x .= qq~<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd">\n~;
				$x .= qq~<rss version="0.91">\n~;
				$x .= qq~\t<channel>\n~;
				$x .= qq~\t\t<title>$INFO{'name'}</title>\n~;
				while(<F>){
					$_ =~ s/[\n\r]//g;
					($url,$titel,$des,$timeup) = split(/\|/,$_);
					&wortkuerze;

					if($newsi == $INFO{'max'}){
						last;
					}elsif($titel ne "" && $url ne ""){
						$newsi++;

						$x .= qq~\t<item>\n~;
						$x .= qq~\t\t<title>$titel</title>\n~;
						$x .= qq~\t\t<link>$url</link>\n~;
						$x .= qq~\t\t<description>$des</description>\n~;
						$x .= qq~\t</item>\n~;
					}
				}
				$x .= qq~\t</channel>\n~;
				$x .= qq~</rss>~;
			}else{
				while(<F>){
					$_ =~ s/[\n\r]//g;
					($url,$titel,$des,$timeup) = split(/\|/,$_);
					&wortkuerze;

					open(Z,"<templates/zensur.dat");
					flock(Z,2) if($flock);
					while(<Z>){
						s/[\n\r]//g;
						my $sterne = "\*" x length($_);
						$titel =~ s/$_/$sterne/ig;
					}
					flock(Z,8) if($flock);
					close(Z);

					if($newsi == $INFO{'max'}){
						last;
					}elsif($titel ne "" && $url ne ""){
						$newsi++;
						$tempx = $druck2;
						$tempx =~ s/\'/\\\'/g;
						$tempx =~ s/__titel__/$titel/g;
						$tempx =~ s/__titel2__/$titel2/g;
						if($des){
							$tempx =~ s/__des__/txt2html($des)/eg;
						}else{
							$tempx =~ s/__des__//g;
						}
						$tempx =~ s/__url__/$url/g;
						$x .= $tempx;
					}
				}
			}
			flock(F,8) if($flock);
			close(F);
		}else{
			($save,$externurl,$externname,$externid) = news("$INFO{'name'}");

			if($save){
				if(!-e("templates/$INFO{'name'}.csv")){
					open(F,">templates/$INFO{'name'}.csv");
					flock(F,2) if($flock);
					print F $save;
					flock(F,8) if($flock);
					close(F);
					chmod(0777,"templates/$INFO{'name'}.csv");
					@new = split(/\n/,$save);
				}else{
					open(F,"+<templates/$INFO{'name'}.csv");
					flock(F,2) if($flock);
					$oldsave = join("",<F>);
					foreach(split(/\n/,$oldsave)){
						$_ =~ s/[\n\r]//g;
						($url,$titel,$des,$timeup) = split(/\|/,$_);
						$again{$url} = $INFO{'name'};
						$againDATA{$url} = $_;
						$againDATA2{$url} = $timeup;
					}

					foreach(split(/\n/,$save)){
						$_ =~ s/[\n\r]//g;
						($url,$titel,$des,$timeup) = split(/\|/,$_);
						$again{$url} = $INFO{'name'};
						if($againDATA{$url}){
							($OLDurl,$OLDtitel,$OLDdes,$OLDtimeup) = split(/\|/,$againDATA{$url});
							$againDATA{$url} = "$url\|$titel\|$des\|$OLDtimeup";
						}else{
							$againDATA{$url} = $_;
						}
					}
					seek(F,0,0);
					truncate(F,0);
					foreach (keys %again){
						($url,$titel,$des,$timeup) = split(/\|/,$againDATA{$_});
						if($timeup+($timeupconfig*86400) > $zeit){
							if($againDATA2{$_}){
								push(@newsave,"$url\|$titel\|$des\|$againDATA2{$_}" . "\n");
							}else{
								push(@newsave,"$url\|$titel\|$des\|$timeup" . "\n");
							}
						}
					}
					@new = (sort{ (split(/\|/,$b)) [3] <=> (split(/\|/,$a)) [3] } @newsave);
					print F @new;
					flock(F,8) if($flock);
					close(F);
				}
			}else{
				open(F,"+<templates/$INFO{'name'}.csv");
				flock(F,2) if($flock);
				$save = join("",<F>);
				seek(F,0,0);
				truncate(F,0);
				print F $save;
				flock(F,8) if($flock);
				close(F);
				@new = split(/\n/,$save);
			}

			if($INFO{'js'} == 1){
				foreach(@new){
					$_ =~ s/[\n\r]//g;
					($url,$titel,$des,$timeup) = split(/\|/,$_);
					&wortkuerze;

					open(Z,"<templates/zensur.dat");
					flock(Z,2) if($flock);
					while(<Z>){
						s/[\n\r]//g;
						my $sterne = "\*" x length($_);
						$titel =~ s/$_/$sterne/ig;
					}
					flock(Z,8) if($flock);
					close(Z);

					if($newsi == $INFO{'max'}){
						last;
					}elsif($titel ne "" && $url ne ""){
						$newsi++;
						$tempx = $druck2;
						$tempx =~ s/\'/\\\'/g;
						$tempx =~ s/__titel__/$titel/g;
						$tempx =~ s/__titel2__/$titel2/g;
						if($des){
							$tempx =~ s/__des__/txt2html($des)/eg;
						}else{
							$tempx =~ s/__des__//g;
						}
						$tempx =~ s/__url__/$url/g;
						$tempx =~ s/[\n\r]//g;
						$x .= qq~document.write('$tempx');\n~;
					}
				}
			}elsif($INFO{'js'} == 2){
				$x = join("",@new);
			}elsif($INFO{'js'} == 3){
				&error("Die XML-Funktion wurde deaktiviert.") if($xmloption && !$INFO{'pass'} or !$xmloption && $xmlpass ne $INFO{'pass'});
				$x .= qq~<?xml version="1.0" encoding="ISO-8859-1"?>\n~;
				$x .= qq~<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd">\n~;
				$x .= qq~<rss version="0.91">\n~;
				$x .= qq~\t<channel>\n~;
				$x .= qq~\t\t<title>$INFO{'name'}</title>\n~;
				$x .= qq~\t\t<link>$externurl</link>\n~;
				foreach(@new){
					$_ =~ s/[\n\r]//g;
					($url,$titel,$des,$timeup) = split(/\|/,$_);

					if($newsi == $INFO{'max'}){
						last;
					}elsif($titel ne "" && $url ne ""){
						$newsi++;

						$x .= qq~\t<item>\n~;
						$x .= qq~\t\t<title>$titel</title>\n~;
						$x .= qq~\t\t<link>$url</link>\n~;
						$x .= qq~\t\t<description>$des</description>\n~;
						$x .= qq~\t</item>\n~;
					}
				}
				$x .= qq~\t</channel>\n~;
				$x .= qq~</rss>~;
			}else{
				foreach(@new){
					$_ =~ s/[\n\r]//g;
					($url,$titel,$des,$timeup) = split(/\|/,$_);
					&wortkuerze;

					open(Z,"<templates/zensur.dat");
					flock(Z,2) if($flock);
					while(<Z>){
						s/[\n\r]//g;
						my $sterne = "\*" x length($_);
						$titel =~ s/$_/$sterne/ig;
					}
					flock(Z,8) if($flock);
					close(Z);

					if($newsi == $INFO{'max'}){
						last;
					}elsif($titel ne "" && $url ne ""){
						$newsi++;
						$tempx = $druck2;
						$tempx =~ s/\'/\\\'/g;
						$tempx =~ s/__titel__/$titel/g;
						$tempx =~ s/__titel2__/$titel2/g;
						if($des){
							$tempx =~ s/__des__/txt2html($des)/eg;
						}else{
							$tempx =~ s/__des__//g;
						}
						$tempx =~ s/__url__/$url/g;
						$x .= $tempx;
					}
				}
			}

		}

		if($INFO{'iframe'}){
			$druck .= $x . $druck3;
		}else{
			$druck = $x;
		}
	}else{
		($save,$externurl,$externname,$externid) = news("$INFO{'name'}");

		if($save ne "" && $INFO{'cache'} ne "no"){
			if(!-e("templates/$INFO{'name'}.csv")){
				open(F,">templates/$INFO{'name'}.csv");
				flock(F,2) if($flock);
				print F $save;
				flock(F,8) if($flock);
				close(F);
				chmod(0777,"templates/$INFO{'name'}.csv");
				@new = split(/\n/,$save);
			}else{
				open(F,"+<templates/$INFO{'name'}.csv");
				flock(F,2) if($flock);
				$oldsave = join("",<F>);
				foreach(split(/\n/,$oldsave)){
					$_ =~ s/[\n\r]//g;
					($url,$titel,$des,$timeup) = split(/\|/,$_);
					$again{$url} = $INFO{'name'};
					$againDATA{$url} = $_;
					$againDATA2{$url} = $timeup;
				}

				foreach(split(/\n/,$save)){
					$_ =~ s/[\n\r]//g;
					($url,$titel,$des,$timeup) = split(/\|/,$_);
					$again{$url} = $INFO{'name'};
					if($againDATA{$url}){
						($OLDurl,$OLDtitel,$OLDdes,$OLDtimeup) = split(/\|/,$againDATA{$url});
						$againDATA{$url} = "$url\|$titel\|$des\|$OLDtimeup";
					}else{
						$againDATA{$url} = $_;
					}
				}
				seek(F,0,0);
				truncate(F,0);
				foreach (keys %again){
					($url,$titel,$des,$timeup) = split(/\|/,$againDATA{$_});
					if($timeup+($timeupconfig*86400) > $zeit){
						if($againDATA2{$url}){
							push(@newsave,"$url\|$titel\|$des\|$againDATA2{$_}" . "\n");
						}else{
							push(@newsave,"$url\|$titel\|$des\|$timeup" . "\n");
						}
					}
				}
				@new = (sort{ (split(/\|/,$b)) [3] <=> (split(/\|/,$a)) [3] } @newsave);
				print F @new;
				flock(F,8) if($flock);
				close(F);
			}
		}elsif($INFO{'cache'} ne "no"){
			open(F,"+<templates/$INFO{'name'}.csv");
			flock(F,2) if($flock);
			$save = join("",<F>);
			seek(F,0,0);
			truncate(F,0);
			print F $save;
			flock(F,8) if($flock);
			close(F);
			@new = split(/\n/,$save);
		}else{
			@new = split(/\n/,$save);
		}

		if($INFO{'js'} == 1){
			foreach(@new){
				$_ =~ s/[\n\r]//g;
				($url,$titel,$des,$timeup) = split(/\|/,$_);
				&wortkuerze;

				open(Z,"<templates/zensur.dat");
				flock(Z,2) if($flock);
				while(<Z>){
					s/[\n\r]//g;
					my $sterne = "\*" x length($_);
					$titel =~ s/$_/$sterne/ig;
				}
				flock(Z,8) if($flock);
				close(Z);

				if($newsi == $INFO{'max'}){
					last;
				}elsif($titel ne "" && $url ne ""){
					$newsi++;
					$tempx = $druck2;
					$tempx =~ s/\'/\\\'/g;
					$tempx =~ s/__titel__/$titel/g;
					$tempx =~ s/__titel2__/$titel2/g;
					if($des){
						$tempx =~ s/__des__/txt2html($des)/eg;
					}else{
						$tempx =~ s/__des__//g;
					}
					$tempx =~ s/__url__/$url/g;
					$tempx =~ s/[\n\r]//g;
					$x .= qq~document.write('$tempx');\n~;
				}
			}
		}elsif($INFO{'js'} == 2){
			$x = join("",@new);
		}elsif($INFO{'js'} == 3){
			&error("Die XML-Funktion wurde deaktiviert.") if($xmloption && !$INFO{'pass'} or !$xmloption && $xmlpass ne $INFO{'pass'});
			$x .= qq~<?xml version="1.0" encoding="ISO-8859-1"?>\n~;
			$x .= qq~<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd">\n~;
			$x .= qq~<rss version="0.91">\n~;
			$x .= qq~\t<channel>\n~;
			$x .= qq~\t\t<title>$INFO{'name'}</title>\n~;
			$x .= qq~\t\t<link>$externurl</link>\n~;
			foreach(@new){
				$_ =~ s/[\n\r]//g;
				($url,$titel,$des,$timeup) = split(/\|/,$_);

				if($newsi == $INFO{'max'}){
					last;
				}elsif($titel ne "" && $url ne ""){
					$newsi++;

					$x .= qq~\t<item>\n~;
					$x .= qq~\t\t<title>$titel</title>\n~;
					$x .= qq~\t\t<link>$url</link>\n~;
					$x .= qq~\t\t<description>$des</description>\n~;
					$x .= qq~\t</item>\n~;
				}
			}
			$x .= qq~\t</channel>\n~;
			$x .= qq~</rss>~;
		}else{
			foreach(@new){
				$_ =~ s/[\n\r]//g;
				($url,$titel,$des,$timeup) = split(/\|/,$_);
				&wortkuerze;

				open(Z,"<templates/zensur.dat");
				flock(Z,2) if($flock);
				while(<Z>){
					s/[\n\r]//g;
					my $sterne = "\*" x length($_);
					$titel =~ s/$_/$sterne/ig;
				}
				flock(Z,8) if($flock);
				close(Z);

				if($newsi == $INFO{'max'}){
					last;
				}elsif($titel ne "" && $url ne ""){
					$newsi++;
					$tempx = $druck2;
					$tempx =~ s/\'/\\\'/g;
					$tempx =~ s/__titel__/$titel/g;
					$tempx =~ s/__titel2__/$titel2/g;
					if($des){
						$tempx =~ s/__des__/txt2html($des)/eg;
					}else{
						$tempx =~ s/__des__//g;
					}
					$tempx =~ s/__url__/$url/g;
					$x .= $tempx;
				}
			}
		}

		if($INFO{'iframe'}){
			$druck .= $x . $druck3;
		}else{
			$druck = $x;
		}
	}

	if($druck eq "" && (-e("templates/$INFO{'name'}.csv"))){
		open(F,"<templates/$INFO{'name'}.csv");
		flock(F,2) if($flock);
		if($INFO{'js'} == 1){
			while(<F>){
				$_ =~ s/[\n\r]//g;
				($url,$titel,$des,$timeup) = split(/\|/,$_);
				&wortkuerze;

				open(Z,"<templates/zensur.dat");
				flock(Z,2) if($flock);
				while(<Z>){
					s/[\n\r]//g;
					my $sterne = "\*" x length($_);
					$titel =~ s/$_/$sterne/ig;
				}
				flock(Z,8) if($flock);
				close(Z);

				if($newsi == $INFO{'max'}){
					last;
				}elsif($titel ne "" && $url ne ""){
					$newsi++;
					$tempx = $druck2;
					$tempx =~ s/\'/\\\'/g;
					$tempx =~ s/__titel__/$titel/g;
					$tempx =~ s/__titel2__/$titel2/g;
					if($des){
						$tempx =~ s/__des__/txt2html($des)/eg;
					}else{
						$tempx =~ s/__des__//g;
					}
					$tempx =~ s/__url__/$url/g;
					$tempx =~ s/[\n\r]//g;
					$x .= qq~document.write('$tempx');\n~;
				}
			}
		}elsif($INFO{'js'} == 2){
			$x = join("",<F>);
		}elsif($INFO{'js'} == 3){
			&error("Die XML-Funktion wurde deaktiviert.") if($xmloption && !$INFO{'pass'} or !$xmloption && $xmlpass ne $INFO{'pass'});
			$x .= qq~<?xml version="1.0" encoding="ISO-8859-1"?>\n~;
			$x .= qq~<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd">\n~;
			$x .= qq~<rss version="0.91">\n~;
			$x .= qq~\t<channel>\n~;
			$x .= qq~\t\t<title>$INFO{'name'}</title>\n~;
			$x .= qq~\t\t<link>$externurl</link>\n~;
			while(<F>){
				$_ =~ s/[\n\r]//g;
				($url,$titel,$des,$timeup) = split(/\|/,$_);

				if($newsi == $INFO{'max'}){
					last;
				}elsif($titel ne "" && $url ne ""){
					$newsi++;

					$x .= qq~\t<item>\n~;
					$x .= qq~\t\t<title>$titel</title>\n~;
					$x .= qq~\t\t<link>$url</link>\n~;
					$x .= qq~\t\t<description>$des</description>\n~;
					$x .= qq~\t</item>\n~;
				}
			}
			$x .= qq~\t</channel>\n~;
			$x .= qq~</rss>~;
		}else{
			while(<F>){
				$_ =~ s/[\n\r]//g;
				($url,$titel,$des,$timeup) = split(/\|/,$_);
				&wortkuerze;

				open(Z,"<templates/zensur.dat");
				flock(Z,2) if($flock);
				while(<Z>){
					s/[\n\r]//g;
					my $sterne = "\*" x length($_);
					$titel =~ s/$_/$sterne/ig;
				}
				flock(Z,8) if($flock);
				close(Z);

				if($newsi == $INFO{'max'}){
					last;
				}elsif($titel ne "" && $url ne ""){
					$newsi++;
					$tempx = $druck2;
					$tempx =~ s/\'/\\\'/g;
					$tempx =~ s/__titel__/$titel/g;
					$tempx =~ s/__titel2__/$titel2/g;
					if($des){
						$tempx =~ s/__des__/txt2html($des)/eg;
					}else{
						$tempx =~ s/__des__//g;
					}
					$tempx =~ s/__url__/$url/g;
					$x .= $tempx;
				}
			}
		}
		flock(F,8) if($flock);
		close(F);

		if($INFO{'iframe'}){
			$druck .= $x . $druck3;
		}else{
			$druck = $x;
		}
	}

	if($INFO{'js'} == 3){
		&error("Die XML-Funktion wurde deaktiviert.") if($xmloption && !$INFO{'pass'} or !$xmloption && $xmlpass ne $INFO{'pass'});
		print "Content-Type: text/xml\n\n$x";
		exit;
	}else{
		$druck =~ s/__iframebreite__/$iframebreite/g;
		$druck =~ s/__iframehoehe__/$iframehoehe/g;
		&ausgabe($druck);
	}
}

sub view2 {
	$check_referer = 1;
	open(F,"<templates/block.dat");
	flock(F,2) if($flock);
	while(<F>){
		$_ =~ s/[\n\r]//g;
		if($ENV{'HTTP_REFERER'} =~ m|https?://([^/]*)$_|i){
			$check_referer = 0;
			last;
		}
	}
	flock(F,8) if($flock);
	close(F);
	&error("Diese Internet-Adresse ist gesperrt.") if($check_referer != 1);

	if($referer or $INFO{'suchwort'}){
		$ENV{'HTTP_REFERER'} = "Unbekannt" if($ENV{'HTTP_REFERER'} !~ /^http:\/\//);
		$auf = $ENV{'HTTP_REFERER'} || "Unbekannt";

		$noref = 1;
		open(F,"<templates/noref.dat");
		flock(F,2) if($flock);
		while(<F>){
			$_ =~ s/[\n\r]//g;
			if($auf =~ /\Q$_\E/i){
				$noref = 0;
			}
		}
		flock(F,8) if($flock);
		close(F);

		if($noref == 1 or $INFO{'suchwort'}){
			($suchwort) = ($auf =~ /(?:context=|searchfor=|domain=|as_epq=|entry=|aqa=|epq=|qry=|keywords=|search=|query=|string=|keyword=|begriff=|name=|asq=|mt=|q2=|qs=|su=|gs=|q=|p=|w=)([^&]+)(?:&|\?|$)/i);
			$suchwort = $INFO{'suchwort'} if($INFO{'suchwort'});

			if($suchwort ne "" && $auf =~ /(?:context=|searchfor=|domain=|as_epq=|entry=|aqa=|epq=|qry=|keywords=|search=|query=|string=|keyword=|begriff=|name=|asq=|mt=|q2=|qs=|su=|gs=|q=|p=|w=)([^&]+)(?:&|\?|$)/i or $INFO{'suchwort'}){
				$suchwort = lc($suchwort);
				$suchwort =~ tr/+/ /;
				$suchwort =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
				$suchwort =~ s/[\n\r]//g;
				$suchwort =~ s/\s\s+//g;
				$suchwort =~ s/\s$//g;
				$suchwort =~ s/^\s//g;

				open(F,"+<templates/suchwort.dat");
				flock(F,2) if($flock);
				@auf = <F>;
				$zahl = $#auf+1;
				seek(F,0,0);
				truncate(F,0);
				if($zahl >= 1){
					foreach (@auf){
						s/[\n\r]//g;
						($one,$two) = split(/\|/);

						if($two eq $suchwort && $aufyes ne 1){
							$one++;
							print F "$one\|$suchwort\n";
							$aufyes = 1;
							$auf = "Suchwort";
						}else{
							print F "$one\|$two\n";
						}
					}
					print F "1\|$suchwort\n" if($aufyes ne 1);
				}else{
					$auf = "Suchwort";
					print F "1\|$suchwort\n";
				}
				flock(F,8) if($flock);
				close(F);
			}else{
				open(F,"+<templates/ref.dat");
				flock(F,2) if($flock);
				@auf = <F>;
				$zahl = $#auf+1;
				seek(F,0,0);
				truncate(F,0);
				if($zahl >= 1){
					foreach (@auf){
						s/[\n\r]//g;
						($one,$two) = split(/\|/);

						if($two eq $auf && $aufyes ne 1){
							$one++;
							print F "$one\|$auf\n";
							$aufyes = 1;
						}else{
							print F "$one\|$two\n";
						}
					}
					print F "1\|$auf\n" if($aufyes ne 1);
				}else{
					print F "1\|$auf\n";
				}
				flock(F,8) if($flock);
				close(F);
			}
		}
	}

	if($INFO{'template'} =~ /^\w+\.\w+$/ && $INFO{'template'} !~ /^admin/){
		open(F,"<templates/$INFO{'template'}");
	}else{
		open(F,"<templates/indexuebersicht.html");
	}
#	flock(F,2) if($flock);
	($split,$split2,$split3) = split(/<!-- SPLIT -->/,join("",<F>));
#	flock(F,8) if($flock);
	close(F);

	$noit = "0";
	open(F,"<templates/cat.dat");
	flock(F,2) if($flock);
	while(<F>){
		$_ =~ s/[\n\r]//g;
		($name,$wert) = split(/=/,$_);
		($tempxZAHL) = ($split2 =~ /(<!--1.+?1-->)/s);

		if($noit != 3){
			if($name){
				$plus = $tempxZAHL;
				$plus =~ s/__xmlname__/$name/g;
				$name = ucfirst($name);
				$plus =~ s/__name__/$name/g;
				$plus =~ s/<!--1(.+?)1-->/$1/sg;
				$noit++;
				$restZAHL .= $plus;
			}
		}

		if($noit == $spaltenanzahl){
			$split2x = $split2;
			$split2x =~ s/<!--1(.+?)1-->/$restZAHL/sg;
			$rest .= $split2x;
			$restZAHL = "";
			$last = "";
			$noit = "0";
		}
	}
	flock(F,8) if($flock);
	close(F);
	if($noit == 1){
		$rest .= $plus;
		$noit = "0";
	}

	$x .= $split . $rest . $split3;
	$x =~ s/<!--3(.+?)3-->/$1/sg;
	$x =~ s/<!-- F -->(.+?)<!-- F -->//sg;
	$x =~ s/__url__/$url/g;
	$x =~ s/__version__/$version/g;

	$x =~ s/__iframebreite__/$iframebreite/g;
	$x =~ s/__iframehoehe__/$iframehoehe/g;
	&ausgabe($x);
}

sub view {
	$check_referer = 1;
	open(F,"<templates/block.dat");
	flock(F,2) if($flock);
	while(<F>){
		$_ =~ s/[\n\r]//g;
		if($ENV{'HTTP_REFERER'} =~ m|https?://([^/]*)$_|i){
			$check_referer = 0;
			last;
		}
	}
	flock(F,8) if($flock);
	close(F);
	&error("Diese Internet-Adresse ist gesperrt.") if($check_referer != 1);

	if($referer or $INFO{'suchwort'}){
		$ENV{'HTTP_REFERER'} = "Unbekannt" if($ENV{'HTTP_REFERER'} !~ /^http:\/\//);
		$auf = $ENV{'HTTP_REFERER'} || "Unbekannt";

		$noref = 1;
		open(F,"<templates/noref.dat");
		flock(F,2) if($flock);
		while(<F>){
			$_ =~ s/[\n\r]//g;
			if($auf =~ /\Q$_\E/i){
				$noref = 0;
			}
		}
		flock(F,8) if($flock);
		close(F);

		if($noref == 1 or $INFO{'suchwort'}){
			($suchwort) = ($auf =~ /(?:context=|searchfor=|domain=|as_epq=|entry=|aqa=|epq=|qry=|keywords=|search=|query=|string=|keyword=|begriff=|name=|asq=|mt=|q2=|qs=|su=|gs=|q=|p=|w=)([^&]+)(?:&|\?|$)/i);
			$suchwort = $INFO{'suchwort'} if($INFO{'suchwort'});

			if($suchwort ne "" && $auf =~ /(?:context=|searchfor=|domain=|as_epq=|entry=|aqa=|epq=|qry=|keywords=|search=|query=|string=|keyword=|begriff=|name=|asq=|mt=|q2=|qs=|su=|gs=|q=|p=|w=)([^&]+)(?:&|\?|$)/i or $INFO{'suchwort'}){
				$suchwort = lc($suchwort);
				$suchwort =~ tr/+/ /;
				$suchwort =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
				$suchwort =~ s/[\n\r]//g;
				$suchwort =~ s/\s\s+//g;
				$suchwort =~ s/\s$//g;
				$suchwort =~ s/^\s//g;

				open(F,"+<templates/suchwort.dat");
				flock(F,2) if($flock);
				@auf = <F>;
				$zahl = $#auf+1;
				seek(F,0,0);
				truncate(F,0);
				if($zahl >= 1){
					foreach (@auf){
						s/[\n\r]//g;
						($one,$two) = split(/\|/);

						if($two eq $suchwort && $aufyes ne 1){
							$one++;
							print F "$one\|$suchwort\n";
							$aufyes = 1;
							$auf = "Suchwort";
						}else{
							print F "$one\|$two\n";
						}
					}
					print F "1\|$suchwort\n" if($aufyes ne 1);
				}else{
					$auf = "Suchwort";
					print F "1\|$suchwort\n";
				}
				flock(F,8) if($flock);
				close(F);
			}else{
				open(F,"+<templates/ref.dat");
				flock(F,2) if($flock);
				@auf = <F>;
				$zahl = $#auf+1;
				seek(F,0,0);
				truncate(F,0);
				if($zahl >= 1){
					foreach (@auf){
						s/[\n\r]//g;
						($one,$two) = split(/\|/);

						if($two eq $auf && $aufyes ne 1){
							$one++;
							print F "$one\|$auf\n";
							$aufyes = 1;
						}else{
							print F "$one\|$two\n";
						}
					}
					print F "1\|$auf\n" if($aufyes ne 1);
				}else{
					print F "1\|$auf\n";
				}
				flock(F,8) if($flock);
				close(F);
			}
		}
	}
	$INFO{'cat'} = "internet" if(!$INFO{'cat'} && !$INFO{'news'});

	if($INFO{'k'} == 1){
		if($INFO{'template'} =~ /^\w+\.\w+$/ && $INFO{'template'} !~ /^admin/){
			open(F,"<templates/$INFO{'template'}");
		}else{
			open(F,"<templates/indexzentral.html");
		}
#		flock(F,2) if($flock);
		($split,$split2,$split3) = split(/<!-- SPLIT -->/,join("",<F>));
#		flock(F,8) if($flock);
		close(F);

		if($INFO{'xtemplate'} =~ /^\w+\.\w+$/ && $INFO{'xtemplate'} !~ /^admin/){
			open(F,"<templates/$INFO{'xtemplate'}");
		}else{
			open(F,"<templates/impressum.html");
		}
#		flock(F,2) if($flock);
		$kontakt = join("",<F>);
#		flock(F,8) if($flock);
		close(F);
		$x = $split . $kontakt . $split3;
		$x =~ s/<!--3(.+?)3-->//sg;
		$x =~ s/<!--5(.+?)5-->//sg;
		$x =~ s/<!-- F -->(.+?)<!-- F -->//sg;
		$x =~ s/__pages__/$pages/g;
		$x =~ s/__url__/$url/g;
		$x =~ s/__version__/$version/g;
		$x =~ s/__iframebreite__/$iframebreite/g;
		$x =~ s/__iframehoehe__/$iframehoehe/g;

		&ausgabe($x);
	}elsif($INFO{'k'} == 2){
		open(F,"<templates/notxml.dat");
		while(<F>){
			s/[\n\r]//g;
			($XMLname,$XMLtitel,$XMLurl,$XMLhost) = split(/[\|]+/);
			$INFO{'news'} .= $XMLname . ",";
		}
		close(F);

		open(F,"<templates/xml.dat");
		while(<F>){
			s/[\n\r]//g;
			($XMLname,$XMLtitel,$XMLurl,$XMLhost) = split(/\|/);
			$INFO{'news'} .= $XMLname . ",";
		}
		close(F);

		open(F,"<templates/cat.dat");
		flock(F,2) if($flock);
		while(<F>){
			$_ =~ s/[\n\r]//g;
			($name,$wert) = split(/=/,$_);
			foreach (split(/\,/,$wert)){
				$catkey{$_} = $name;
				$catzahlseiten{$name}++;
			}
		}
		flock(F,8) if($flock);
		close(F);

		open(F,"<templates/mediadaten.html");
#		flock(F,2) if($flock);
		($kontakt,$kontakt2,$kontakt3) = split(/<!-- SPLIT -->/,join("",<F>));
#		flock(F,8) if($flock);
		close(F);

		foreach $idy (split(/\,/,$INFO{'news'})){
			$newsi = "0";
			open(F,"<templates/$idy.csv");
			flock(F,2) if($flock);
			while(<F>){
				($timeup) = (split(/\|/,$_))[3];
				$timeup = time-$timeup;

				$catzahl{$catkey{$idy}}++;

				if($timeup < 86400){
					$heute++;
					$seven++;
					$dreizig++;
					$gestern++;
				}elsif($timeup < (86400*2)){
					$gestern++;
					$seven++;
					$dreizig++;
				}elsif($timeup < (86400*7)){
					$seven++;
					$dreizig++;
				}elsif($timeup < (86400*30)){
					$dreizig++;
				}
				$gesamt++;
			}
			flock(F,8) if($flock);
			close(F);
		}

		foreach (sort keys %catzahl){
			$plus = $kontakt2;
			1 while $catzahl{$_} =~ s/^(-?\d+)(\d{3})/$1.$2/;
			$plus =~ s/__katzahl__/$catzahl{$_}/g;
			1 while $catzahl{$_} =~ s/^(-?\d+)(\d{3})/$1.$2/;
			$plus =~ s/__katzahlseite__/$catzahlseiten{$_}/g;
			next unless($_); # Keine
			$_ = ucfirst($_);
			$plus =~ s/__kategorie__/$_/g;
			$rest .= $plus;
		}
		$kontakt .= $rest . $kontakt3;

		if($INFO{'template'} =~ /^\w+\.\w+$/ && $INFO{'template'} !~ /^admin/){
			open(F,"<templates/$INFO{'template'}");
		}else{
			open(F,"<templates/indexzentral.html");
		}
#		flock(F,2) if($flock);
		($split,$split2,$split3) = split(/<!-- SPLIT -->/,join("",<F>));
#		flock(F,8) if($flock);
		close(F);

		$x = $split . $kontakt . $split3;
		$x =~ s/<!--3(.+?)3-->//sg;
		$x =~ s/<!-- F -->(.+?)<!-- F -->//sg;
		$x =~ s/__pages__/$pages/g;
		$x =~ s/__url__/$url/g;
		$x =~ s/__version__/$version/g;
		1 while $gesamt =~ s/^(-?\d+)(\d{3})/$1.$2/;
		$x =~ s/__gesamt__/$gesamt/g;
		1 while $heute =~ s/^(-?\d+)(\d{3})/$1.$2/;
		$x =~ s/__heute__/$heute/g;
		1 while $gestern =~ s/^(-?\d+)(\d{3})/$1.$2/;
		$x =~ s/__gestern__/$gestern/g;
		1 while $seven =~ s/^(-?\d+)(\d{3})/$1.$2/;
		$x =~ s/__seven__/$seven/g;
		1 while $dreizig =~ s/^(-?\d+)(\d{3})/$1.$2/;
		$x =~ s/__dreizig__/$dreizig/g;
		$x =~ s/__timeupconfig__/$timeupconfig/g;

		$x =~ s/__iframebreite__/$iframebreite/g;
		$x =~ s/__iframehoehe__/$iframehoehe/g;
		&ausgabe($x);
	}

	if(!$INFO{'cat'} && !$INFO{'news'}){
		open(F,"<templates/cat.dat");
		flock(F,2) if($flock);
		$INFO{'cat'} = (split(/=/,join("",(<F>)[0])))[0];
		flock(F,8) if($flock);
		close(F);
		$INFO{'cat'} =~ s/[\n\r]//g;
	}

	if($INFO{'cat'} eq "all"){
		open(F,"<templates/notxml.dat");
		while(<F>){
			s/[\n\r]//g;
			($XMLname,$XMLtitel,$XMLurl,$XMLhost) = split(/\|/);
			$INFO{'news'} .= $XMLname . ",";
		}
		close(F);

		open(F,"<templates/xml.dat");
		while(<F>){
			s/[\n\r]//g;
			($XMLname,$XMLtitel,$XMLurl,$XMLhost) = split(/\|/);
			$INFO{'news'} .= $XMLname . ",";
		}
		close(F);
	}elsif($INFO{'cat'} eq "allcat"){
		open(F,"<templates/cat.dat");
		flock(F,2) if($flock);
		while(<F>){
			$_ =~ s/[\n\r]//g;
			($name,$wert) = split(/=/,$_);
			$INFO{'news'} .= $wert . ",";
		}
		flock(F,8) if($flock);
		close(F);
	}elsif(!$INFO{'news'} && $INFO{'cat'}){
		foreach (split(/\,/,$INFO{'cat'})){
			$hash{$_} = 1;
		}

		open(F,"<templates/cat.dat");
		flock(F,2) if($flock);
		while(<F>){
			$_ =~ s/[\n\r]//g;
			($name,$wert) = split(/=/,$_);
			if($hash{$name}){
				$INFO{'news'} .= $wert . ",";
			}
		}
		flock(F,8) if($flock);
		close(F);
	}

	open(F,"<templates/notxml.dat");
	while(<F>){
		s/[\n\r]//g;
		($XMLname,$XMLtitel,$XMLurl,$XMLhost) = split(/[\|]+/);
		($host, $uri) = ($XMLurl =~ m!http://(.*?)(/.*|$)!);
		$XMLhost = "http://$host" if($XMLhost !~ /^http:\/\//);
		$nXMLname{$XMLname} = $XMLtitel;
		$nXMLurl{$XMLname} = $XMLurl;
		$nXMLhost{$XMLname} = $XMLhost;
	}
	close(F);

	open(F,"<templates/xml.dat");
	while(<F>){
		s/[\n\r]//g;
		($XMLname,$XMLtitel,$XMLurl,$XMLhost) = split(/\|/);
		($host, $uri) = ($XMLurl =~ m!http://(.*?)(/.*)!);
		$XMLhost = "http://$host" if($XMLhost !~ /^http:\/\//);
		$nXMLname{$XMLname} = $XMLtitel;
		$nXMLurl{$XMLname} = $XMLurl;
		$nXMLhost{$XMLname} = $XMLhost;
	}
	close(F);

	&error("Keine Newsseiten &uuml;bergeben.") unless($INFO{'news'});
	&error("Unerlaubte Newsseiten &uuml;bergeben.") if($INFO{'news'} !~ /^[\w\,\.-]+$/);
	&error("Unerlaubte Kategorie &uuml;bergeben.") if($INFO{'cat'} !~ /^[\w\,\.-]+$/ && $INFO{'news'} !~ /\,/);
	$tempcat = $INFO{'cat'};
	$INFO{'start'} =~ s/[^\d]//g;
	unless($mod_md5){
		use Digest::Perl::MD5 'md5_hex';
	}
	$cacheIT = md5_hex("$tempcat$INFO{'news'}$INFO{'start'}$INFO{'xml'}$INFO{'wort'}$INFO{'cat'}$INFO{'suchwort'}$INFO{'template'}$INFO{'itemplate'}");

	if((-e("./templates/cachecron/$cacheIT.tmp")) && (time-$cachezeit) < (stat("./templates/cachecron/$cacheIT.tmp"))[9] && $cache == 1){
		open(F,"<templates/cachecron/$cacheIT.tmp");
#		flock(F,2) if($flock);
		$druck = join("",<F>);
#		flock(F,8) if($flock);
		close(F);
	}else{
		if($INFO{'xml'} != 1){
			if($INFO{'itemplate'} =~ /^\w+\.\w+$/ && $INFO{'itemplate'} !~ /^admin/){
				open(F,"<templates/$INFO{'itemplate'}");
			}else{
				open(F,"<templates/indexzentral.html");
			}
#			flock(F,2) if($flock);
			($druck,$druck2,$druck3) = split(/<!-- SPLIT -->/,join("",<F>));
#			flock(F,8) if($flock);
			close(F);
		}

		if($INFO{'wort'} == 2){
			foreach (split(/\s+/,$INFO{'suchwort'})){
				$suchwortNEW .= "\Q$_\E\|";
			}
			$suchwortNEW =~ s/\|$//g;
		}

#		use Text::Soundex 'soundex';
		foreach $idy (split(/\,/,$INFO{'news'})){
			$newsi = "0";
			open(F,"<templates/$idy.csv");
			flock(F,2) if($flock);
			while(<F>){
				($url,$titel,$des,$timeup) = split(/\|/,$_);
				$timeup = time-$timeup;
				last if($newsi eq $maxnewsprosite && !$INFO{'suchwort'});
				$titel =~ s/&amp;/&/g;
				$titel =~ s/&uuml;/\ü/g;
				$titel =~ s/&ouml;/\ö/g;
				$titel =~ s/&auml;/\ä/g;
				$titel =~ s/UE/\Ü/g;
				$titel =~ s/&Uuml;/\Ü/g;
				$titel =~ s/&Ouml;/\Ö/g;
				$titel =~ s/&Auml;/\Ä/g;
				$titel =~ s/&quot;/\"/g;
				$titel =~ s/&apos;/\'/g;
				$titel =~ s/'/\"/g;
				$titel =~ s/\"\"/\"/g;
				$titel =~ s/\\\"/\"/g;
				$titel =~ s/&laquo;/«/g;
				$titel =~ s/&raquo;/»/g;
				$titel =~ s/&szlig;/ß/g;
				$titel2 = $titel;
				$titel2 =~ s/[^\w]+//g;

				if($mod_metaphone){
					$metaphonetitel = Metaphone($titel2);
				}else{
#					$metaphonetitel = substr($titel, 0, 25);
					$metaphonetitel = $titel;
				}
#				$soundextitel = soundex($titel);
				if(!$exakt{$metaphonetitel} && !$exakt{$url}){
					if($INFO{'suchwort'}){
						if($INFO{'wort'} == 1){
							if($titel =~ /\Q$INFO{'suchwort'}\E/i){# or $des =~ /\Q$INFO{'suchwort'}\E/i){
								push(@new,"$idy\|$url\|$titel\|$des\|$timeup\n");
							}
						}else{
							if($titel =~ /$suchwortNEW/i){# or $des =~ /$suchwortNEW/i){
								push(@new,"$idy\|$url\|$titel\|$des\|$timeup\n");
							}
						}
					}else{
						push(@new,"$idy\|$url\|$titel\|$des\|$timeup\n");
					}
					$exakt{$metaphonetitel} = 1;
					$exakt{$url} = 1;
					$newsi++;
				}
			}
			flock(F,8) if($flock);
			close(F);
		}
		@new = (sort{ (split(/\|/,$a)) [4] <=> (split(/\|/,$b)) [4] } @new);
#		$INFO{'news'} = "" if($INFO{'cat'});

		$zahl = $#new+1;
		$maxf = 25 unless($maxf);

		$nv = 1;
		$start = $INFO{'start'} || 0;
		$start = $start > $zahl ? $zahl : $start;
		$start = (sprintf("%.0f",$start / $maxf)) * $maxf;

		if($start >= (4 * $maxf)){
			$startp = $start - (4 * $maxf);
			$nv = (sprintf("%.0f",$startp / $maxf)) + 1;
		}
		if($zahl >= $start + (10 * $maxf)){
			$end = $start + (10 * $maxf);
		}else{
			$end = $zahl;
		}

		if($INFO{'such'} == 1 && $INFO{'cat'} && !$INFO{'news'}){
			if($INFO{'itemplate'}){
				if($startp > 0){
					$pages = qq~<a href="i_$INFO{'itemplate'}_$INFO{'cat'}_0.html">[1]</a>&nbsp;...&nbsp;~;
				}
				if($startp == $maxf){
					$pages = qq~<a href="i_$INFO{'itemplate'}_$INFO{'cat'}_0.html">[1]</a>&nbsp;~;
				}

				for($ns = $startp; $ns < $end; $ns += $maxf){
					$pages .= $start == $ns ? qq~<b>[$nv]</b>&nbsp;~ : qq~<a href="i_$INFO{'itemplate'}_$INFO{'cat'}_$ns.html">[$nv]</a>&nbsp;~;
					$nv++;
				}
				if($end < $zahl){
					$lastpn = int(($zahl / $maxf) + 0.9);
					$lastptn = int($lastpn - 0.9) * $maxf;
					$page = qq~&nbsp;...&nbsp;~;
					$page .= qq~&nbsp;<a href="i_$INFO{'itemplate'}_$INFO{'cat'}_$lastptn.html">[$lastpn]</a>~;
				}
				$pages .= $page;

				if($nv == 1 or $nv == 2){
				        $pages =" &lt;&lt; &nbsp;[1]&nbsp; &gt;&gt;";
				}else{
				        $xy=($start/$maxf)+1;
				        $xys=$start+$maxf;
				        $xys2=$start-$maxf;

				        if($xy<($nv-1)){
				                if($xy>1){
				                        $pages=qq~<a href="i_$INFO{'itemplate'}_$INFO{'cat'}_$xys2.html">&lt;&lt;</a> &nbsp;$pages~;
				                }else{
				                        $pages="&nbsp;$pages";
				                }
				                $pages .=qq~&nbsp;<a href="i_$INFO{'itemplate'}_$INFO{'cat'}_$xys.html">&gt;&gt;</a> ~;
				        }else{
				                if($xy>1){
				                        $pages=qq~<a href="i_$INFO{'itemplate'}_$INFO{'cat'}_$xys2.html">&lt;&lt;</a> &nbsp;$pages~;
				                }else{
				                        $pages="&nbsp;$pages";
				                }
				                $pages .=" &nbsp;";
				        }
				}
			}else{
				if($startp > 0){
					$pages = qq~<a href="$INFO{'cat'}_0.html">[1]</a>&nbsp;...&nbsp;~;
				}
				if($startp == $maxf){
					$pages = qq~<a href="$INFO{'cat'}_0.html">[1]</a>&nbsp;~;
				}

				for($ns = $startp; $ns < $end; $ns += $maxf){
					$pages .= $start == $ns ? qq~<b>[$nv]</b>&nbsp;~ : qq~<a href="$INFO{'cat'}_$ns.html">[$nv]</a>&nbsp;~;
					$nv++;
				}
				if($end < $zahl){
					$lastpn = int(($zahl / $maxf) + 0.9);
					$lastptn = int($lastpn - 0.9) * $maxf;
					$page = qq~&nbsp;...&nbsp;~;
					$page .= qq~&nbsp;<a href="$INFO{'cat'}_$lastptn.html">[$lastpn]</a>~;
				}
				$pages .= $page;

				if($nv == 1 or $nv == 2){
				        $pages =" &lt;&lt; &nbsp;[1]&nbsp; &gt;&gt;";
				}else{
				        $xy=($start/$maxf)+1;
				        $xys=$start+$maxf;
				        $xys2=$start-$maxf;

				        if($xy<($nv-1)){
				                if($xy>1){
				                        $pages=qq~<a href="$INFO{'cat'}_$xys2.html">&lt;&lt;</a> &nbsp;$pages~;
				                }else{
				                        $pages="&nbsp;$pages";
				                }
				                $pages .=qq~&nbsp;<a href="$INFO{'cat'}_$xys.html">&gt;&gt;</a> ~;
				        }else{
				                if($xy>1){
				                        $pages=qq~<a href="$INFO{'cat'}_$xys2.html">&lt;&lt;</a> &nbsp;$pages~;
				                }else{
				                        $pages="&nbsp;$pages";
				                }
				                $pages .=" &nbsp;";
				        }
				}
			}
		}else{
			$seitennewsANZAHL = $INFO{'news'} unless($INFO{'cat'});
			if($startp > 0){
				$pages = qq~<a href="newsgrabber.cgi?a=view&wort=$INFO{'wort'}&itemplate=$INFO{'itemplate'}&suchwort=$INFO{'suchwort'}&cat=$INFO{'cat'}&news=$seitennewsANZAHL&start=0">[1]</a>&nbsp;...&nbsp;~;
			}
			if($startp == $maxf){
				$pages = qq~<a href="newsgrabber.cgi?a=view&wort=$INFO{'wort'}&itemplate=$INFO{'itemplate'}&suchwort=$INFO{'suchwort'}&cat=$INFO{'cat'}&news=$seitennewsANZAHL&start=0">[1]</a>&nbsp;~;
			}

			for($ns = $startp; $ns < $end; $ns += $maxf){
				$pages .= $start == $ns ? qq~<b>[$nv]</b>&nbsp;~ : qq~<a href="newsgrabber.cgi?a=view&itemplate=$INFO{'itemplate'}&wort=$INFO{'wort'}&suchwort=$INFO{'suchwort'}&cat=$INFO{'cat'}&news=$seitennewsANZAHL&start=$ns">[$nv]</a>&nbsp;~;
				$nv++;
			}
			if($end < $zahl){
				$lastpn = int(($zahl / $maxf) + 0.9);
				$lastptn = int($lastpn - 0.9) * $maxf;
				$page = qq~&nbsp;...&nbsp;~;
				$page .= qq~&nbsp;<a href="newsgrabber.cgi?a=view&wort=$INFO{'wort'}&itemplate=$INFO{'itemplate'}&suchwort=$INFO{'suchwort'}&cat=$INFO{'cat'}&news=$seitennewsANZAHL&start=$lastptn">[$lastpn]</a>~;
			}
			$pages .= $page;

			if($nv == 1 or $nv == 2){
			        $pages =" &lt;&lt; &nbsp;[1]&nbsp; &gt;&gt;";
			}else{
			        $xy=($start/$maxf)+1;
			        $xys=$start+$maxf;
			        $xys2=$start-$maxf;

			        if($xy<($nv-1)){
			                if($xy>1){
			                        $pages=qq~<a href="newsgrabber.cgi?a=view&wort=$INFO{'wort'}&itemplate=$INFO{'itemplate'}&suchwort=$INFO{'suchwort'}&cat=$INFO{'cat'}&news=$seitennewsANZAHL&start=$xys2">&lt;&lt;</a> &nbsp;$pages~;
			                }else{
			                        $pages="&nbsp;$pages";
			                }
			                $pages .=qq~&nbsp;<a href="newsgrabber.cgi?a=view&wort=$INFO{'wort'}&itemplate=$INFO{'itemplate'}&suchwort=$INFO{'suchwort'}&cat=$INFO{'cat'}&news=$seitennewsANZAHL&start=$xys">&gt;&gt;</a> ~;
			        }else{
			                if($xy>1){
			                        $pages=qq~<a href="newsgrabber.cgi?a=view&wort=$INFO{'wort'}&itemplate=$INFO{'itemplate'}&suchwort=$INFO{'suchwort'}&cat=$INFO{'cat'}&news=$seitennewsANZAHL&start=$xys2">&lt;&lt;</a> &nbsp;$pages~;
			                }else{
			                        $pages="&nbsp;$pages";
			                }
			                $pages .=" &nbsp;";
			        }
			}
		}
	        $pages =~ s/&nbsp;&nbsp;/&nbsp;/g;

		if($INFO{'xml'} == 1){
			&error("Die XML-Funktion wurde deaktiviert.") if($xmloption && !$INFO{'pass'} or !$xmloption && $xmlpass ne $INFO{'pass'});
			$druck .= qq~<?xml version="1.0" encoding="ISO-8859-1"?>\n~;
			$druck .= qq~<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://my.netscape.com/rdf/simple/0.9/">\n~;
			$druck .= qq~\t<channel>\n~;
			$druck .= qq~\t\t<title>$INFO{'cat'}</title>\n~;
			$druck .= qq~\t</channel>\n~;
		}

		for($i=$start;$i<@new;$i++){
			$nnum++;
			$displayZ++;
			$new[$i] =~ s/[\n\r]//g;
			($id,$url,$titel,$des,$timeup) = split(/\|/,$new[$i]);
			$titel =~ s/&amp;/&/g;
			$titel =~ s/&uuml;/\ü/g;
			$titel =~ s/&ouml;/\ö/g;
			$titel =~ s/&auml;/\ä/g;
			$titel =~ s/&Uuml;/\Ü/g;
			$titel =~ s/&Ouml;/\Ö/g;
			$titel =~ s/&Auml;/\Ä/g;
			$titel =~ s/&quot;/\"/g;
			$titel =~ s/&apos;/\'/g;
			$titel =~ s/'/\"/g;
			$titel =~ s/\"\"/\"/g;
			$titel =~ s/\\\"/\"/g;
			if($INFO{'xml'} == 1){
				$titel =~ s/&/&amp;/g;
			}
			$titel =~ s/ß/&szlig;/g;
			$titel =~ s/\ü/&uuml;/g;
			$titel =~ s/\ö/&ouml;/g;
			$titel =~ s/\ä/&auml;/g;
			$titel =~ s/\Ü/&Uuml;/g;
			$titel =~ s/\Ö/&Ouml;/g;
			$titel =~ s/\Ä/&Auml;/g;

			open(Z,"<templates/zensur.dat");
			flock(Z,2) if($flock);
			while(<Z>){
				s/[\n\r]//g;
				my $sterne = "\*" x length($_);
				$titel =~ s/$_/$sterne/ig;
			}
			flock(Z,8) if($flock);
			close(Z);

			$upmin = $timeup / 60;
			$upstd = $upmin / 60;
			$updays = sprintf("%.0u",$upstd / 24);
			$upstd = sprintf("%.0u",$upstd - ($updays * 24));
			$upmin = sprintf("%.0u",$upmin - ($updays * 60 * 24) - ($upstd * 60));
			$upsec = sprintf("%.0u",$timeup - ($updays * 24 * 60 * 60) - ($upstd * 60 * 60) - ($upmin * 60));
			$upmin = "0" unless($upmin);
			$upsec = "0" unless($upsec);

			$tempx = $druck2;
			if($updays){
				$upstd = "0" unless($upstd);
				if($updays == 1 && $upstd != 1){
					$tempx =~ s/__zeit__/$updays&nbsp;Tag,&nbsp;$upstd&nbsp;Stunden/g;
				}elsif($updays != 1 && $upstd == 1){
					$tempx =~ s/__zeit__/$updays&nbsp;Tage,&nbsp;$upstd&nbsp;Stunde/g;
				}elsif($updays == 1 && $upstd == 1){
					$tempx =~ s/__zeit__/$updays&nbsp;Tag,&nbsp;$upstd&nbsp;Stunde/g;
				}elsif($updays != 1 && $upstd != 1){
					$tempx =~ s/__zeit__/$updays&nbsp;Tage,&nbsp;$upstd&nbsp;Stunden/g;
				}
			}elsif($upstd){
				if($upstd == 1 && $upmin != 1){
					$tempx =~ s/__zeit__/$upstd&nbsp;Stunde,&nbsp;$upmin&nbsp;Minuten/g;
				}elsif($upstd != 1 && $upmin == 1){
					$tempx =~ s/__zeit__/$upstd&nbsp;Stunden,&nbsp;$upmin&nbsp;Minute/g;
				}elsif($upstd == 1 && $upmin == 1){
					$tempx =~ s/__zeit__/$upstd&nbsp;Stunde,&nbsp;$upmin&nbsp;Minute/g;
				}elsif($upstd != 1 && $upmin != 1){
					$tempx =~ s/__zeit__/$upstd&nbsp;Stunden,&nbsp;$upmin&nbsp;Minuten/g;
				}
			}else{
				if($upmin == 1 && $upsec != 1){
					$tempx =~ s/__zeit__/$upmin&nbsp;Minute,&nbsp;$upsec&nbsp;Sekunden/g;
				}elsif($upmin != 1 && $upsec == 1){
					$tempx =~ s/__zeit__/$upmin&nbsp;Minuten,&nbsp;$upsec&nbsp;Sekunde/g;
				}elsif($upmin == 1 && $upsec == 1){
					$tempx =~ s/__zeit__/$upmin&nbsp;Minute,&nbsp;$upsec&nbsp;Sekunde/g;
				}elsif($upmin != 1 && $upsec != 1){
					$tempx =~ s/__zeit__/$upmin&nbsp;Minuten,&nbsp;$upsec&nbsp;Sekunden/g;
				}
			}

			if($color){
				$color = "";
				$tempx =~ s/#(\w\w\w\w\w\w):#(\w\w\w\w\w\w)/$1/g;
			}else{
				$color = 1;
				$tempx =~ s/#(\w\w\w\w\w\w):#(\w\w\w\w\w\w)/$2/g;
			}
			$titel =~ s/<([^>]+)>//g;
			$titel = &html2txt($titel);
			if($INFO{'xml'} == 1){
				$url =~ s/&amp;/&/g;
				$url =~ s/&/&amp;/g;
				$titel =~ s/&nbsp;/ /g;
				$druck .= qq~\t<item>\n~;
				$druck .= qq~\t\t<title>$titel</title>\n~;
				$druck .= qq~\t\t<link>$url</link>\n~;
				if($des){
					$des =~ s/&/&amp;/g;
					$des =~ s/<(.+?)>/ /g;
					$druck .= qq~\t\t<description>$des</description>\n~;
				}else{
					$druck .= qq~\t\t<description>$titel</description>\n~;
				}
				$druck .= qq~\t</item>\n~;
			}else{
				$titel = &txt2html($titel);
				$titel =~ s/(?:<|\[|&lt;)(.+?)(?:>|\]|&gt;)/ /g;
				$titel2 = $titel;
				$titel = substr($titel, 0, $INFO{'lang'}) . $restzeichen if($INFO{'lang'} =~ /^\d+$/ && $INFO{'lang'} < length($titel));
				$tempx =~ s/__titel__/$titel/g;
				$tempx =~ s/__titel2__/$titel2/g;
				$tempx =~ s/__url__/$url/g;
				if($des){
					$des =~ s/(?:<|\[|&lt;)(.+?)(?:>|\]|&gt;)/ /g;
					$des =~ s/&amp;/&/g;
					$tempx =~ s/__des2__/$des/g;

					$des =~ s/<(.+?)>//sg;
					$des = substr($des, 0, $anrisstexte) . $restzeichen2 if($anrisstexte =~ /^\d+$/ && $anrisstexte < length($des));
					$tempx =~ s/__des__/txt2html($des)/eg;
				}else{
					$tempx =~ s/__(des|des2)__//g;
				}
				$tempx =~ s/__quelle__/$nXMLname{$id}/g;
				$tempx =~ s/__quellehost__/$nXMLhost{$id}/g;
				$tempx =~ s/__quelleurl__/$nXMLurl{$id}/g;
				$x .= $tempx;
			}

			if($displayZ eq $display){
				$displayZ = "0";
				$x .= $werbung;
			}

			last if($nnum >= $maxf or $INFO{'lang'} =~ /^\d+$/ && $nnum >= $INFO{'max'});
		}

		if($INFO{'xml'} == 1){
			$druck .= qq~</rdf:RDF>~;
		}else{
			$druck .= $x . $druck3;

			$druck =~ s/__url__/$url/g;
			$druck =~ s/__version__/$version/g;
			$druck =~ s/__pages__/$pages/g;
		}

		open(F,">templates/cachecron/$cacheIT.tmp");
		flock(F,2) if($flock);
		print F $druck;
		flock(F,8) if($flock);
		close(F);
	}
	$druck =~ s/<!--3(.+?)3-->/$1/sg;
	$druck =~ s/<!-- F -->(.+?)<!-- F -->/$1/sg;
	$druck =~ s/__cat__/$INFO{'cat'}/g;
	$drucksaveSPALTENzahl = sprintf("%.0f",((split(/\,/,$INFO{'news'})) / $drucksaveSPALTEN));

	($drucksave) = ($druck =~ /<!--4(.+?)4-->/s);
	($drucksave2) = ($druck =~ /<!--5(.+?)5-->/s);
	foreach (split(/\,/,$INFO{'news'})){
		$drucksaveBAK = $drucksave;
		$drucksaveBAK =~ s/__name__/$nXMLname{$_}/g;
		$drucksaveBAK =~ s/__xmlname__/$_/g;
		$drucksaveSPALTENzahlN++;
		$drucksaveRESTz .= $drucksaveBAK;

		if($drucksaveSPALTENzahl == $drucksaveSPALTENzahlN){
			$drucksaveSPALTENzahlN = "0";
			$drucksaveBAK2 = $drucksave2;
			$drucksaveBAK2 =~ s/<!--4(.+?)4-->/$drucksaveRESTz/sg;

			$drucksaveREST .= $drucksaveBAK2;
			$drucksaveRESTz = "";
		}
	}
	if($drucksaveRESTz){
		$drucksaveSPALTENzahlN = "0";
		$drucksaveBAK2 = $drucksave2;
		$drucksaveBAK2 =~ s/<!--4(.+?)4-->/$drucksaveRESTz/sg;

		$drucksaveREST .= $drucksaveBAK2;
	}
	$druck =~ s/<!--5(.+?)5-->/$drucksaveREST/sg;

	$druck =~ s/__iframebreite__/$iframebreite/g;
	$druck =~ s/__iframehoehe__/$iframehoehe/g;
	&ausgabe($druck);
}

sub start {
	if($INFO{'k'} == 1){
		if($INFO{'template'} =~ /^\w+\.\w+$/ && $INFO{'template'} !~ /^admin/){
			open(F,"<templates/$INFO{'template'}");
		}else{
			open(F,"<templates/index.html");
		}
		flock(F,2) if($flock);
		($split,$split2,$split3) = split(/<!-- SPLIT -->/,join("",<F>));
		flock(F,8) if($flock);
		close(F);

		open(F,"<templates/impressum.html");
		flock(F,2) if($flock);
		$kontakt = join("",<F>);
		flock(F,8) if($flock);
		close(F);
		$x = $split . $kontakt . $split3;
		$x =~ s/<!--3(.+?)3-->//sg;
		$x =~ s/<!-- F -->(.+?)<!-- F -->//sg;
		$x =~ s/<!--5(.+?)5-->//sg;
		$x =~ s/__url__/$url/g;
		$x =~ s/__version__/$version/g;

		$x =~ s/__iframebreite__/$iframebreite/g;
		$x =~ s/__iframehoehe__/$iframehoehe/g;
		&ausgabe($x);
	}

	unless($INFO{'cat'}){
		open(F,"<templates/cat.dat");
		flock(F,2) if($flock);
		$INFO{'cat'} = (split(/=/,join("",(<F>)[0])))[0];
		flock(F,8) if($flock);
		close(F);
		$INFO{'cat'} =~ s/[\n\r]//g;
	}
	$INFO{'cat'} = "internet" if(!$INFO{'cat'} && !$INFO{'news'});

	if($INFO{'cat'} eq "all"){
		open(F,"<templates/notxml.dat");
		while(<F>){
			s/[\n\r]//g;
			($XMLname,$XMLtitel,$XMLurl,$XMLhost) = split(/[\|]+/);
			$INFO{'news'} .= $XMLname . ",";
		}
		close(F);

		open(F,"<templates/xml.dat");
		while(<F>){
			s/[\n\r]//g;
			($XMLname,$XMLtitel,$XMLurl,$XMLhost) = split(/\|/);
			$INFO{'news'} .= $XMLname . ",";
		}
		close(F);
	}elsif($INFO{'cat'} eq "allcat"){
		open(F,"<templates/cat.dat");
		flock(F,2) if($flock);
		while(<F>){
			$_ =~ s/[\n\r]//g;
			($name,$wert) = split(/=/,$_);
			$INFO{'news'} .= $wert . ",";
		}
		flock(F,8) if($flock);
		close(F);
	}elsif(!$INFO{'news'} && $INFO{'cat'}){
		foreach (split(/\,/,$INFO{'cat'})){
			$hash{$_} = 1;
		}

		open(F,"<templates/cat.dat");
		flock(F,2) if($flock);
		while(<F>){
			$_ =~ s/[\n\r]//g;
			($name,$wert) = split(/=/,$_);
			if($hash{$name}){
				$INFO{'news'} .= $wert . ",";
			}
		}
		flock(F,8) if($flock);
		close(F);
	}
	&error("Keine Newsseiten &uuml;bergeben.") unless($INFO{'news'});
	&error("Unerlaubte Newsseiten &uuml;bergeben.") if($INFO{'news'} !~ /^[\w\,\.-]+$/);
	&error("Unerlaubte Kategorie &uuml;bergeben.") if($INFO{'cat'} !~ /^[\w\,\.-]+$/ && $INFO{'news'} !~ /\,/);

	unless($mod_md5){
		use Digest::Perl::MD5 'md5_hex';
	}
	$cacheIT = md5_hex("$tempcat$INFO{'news'}$INFO{'start'}$INFO{'xml'}$INFO{'wort'}$INFO{'cat'}$INFO{'suchwort'}$INFO{'template'}$INFO{'itemplate'}");

	if((-e("./templates/cachealt/$cacheIT.tmp")) && (time-$cachezeit) < (stat("./templates/cachealt/$cacheIT.tmp"))[9] && $cache == 1){
		open(F,"<templates/cachealt/$cacheIT.tmp");
		flock(F,2) if($flock);
		$x = join("",<F>);
		flock(F,8) if($flock);
		close(F);
	}else{
		open(F,"<templates/notxml.dat");
		while(<F>){
			s/[\n\r]//g;
			($XMLname,$XMLtitel,$XMLurl,$XMLhost) = split(/[\|]+/);
			($host, $uri) = ($XMLurl =~ m!http://(.*?)(/.*|$)!);
			$XMLhost = "http://$host" if($XMLhost !~ /^http:\/\//);
			$nXMLname{$XMLname} = $XMLtitel;
			$nXMLurl{$XMLname} = $XMLurl;
			$nXMLhost{$XMLname} = $XMLhost;
		}
		close(F);

		open(F,"<templates/xml.dat");
		while(<F>){
			s/[\n\r]//g;
			($XMLname,$XMLtitel,$XMLurl,$XMLhost) = split(/\|/);
			($host, $uri) = ($XMLurl =~ m!http://(.*?)(/.*)!);
			$XMLhost = "http://$host" if($XMLhost !~ /^http:\/\//);
			$nXMLname{$XMLname} = $XMLtitel;
			$nXMLurl{$XMLname} = $XMLurl;
			$nXMLhost{$XMLname} = $XMLhost;
		}
		close(F);

		if($INFO{'template'} =~ /^\w+\.\w+$/ && $INFO{'template'} !~ /^admin/){
			open(F,"<templates/$INFO{'template'}");
		}else{
			open(F,"<templates/index.html");
		}
		flock(F,2) if($flock);
		($split,$split2,$split3) = split(/<!-- SPLIT -->/,join("",<F>));
		flock(F,8) if($flock);
		close(F);

		@new = split(/\,/,$INFO{'news'});
		for($i=0;$i<@new;$i++){
			$tempx2 = $split2;
			($tempxZAHL) = ($tempx2 =~ /(<!--1.+?1-->)/s);
			$last = "";

			foreach (1..$spaltenanzahl){
				if($new[$i]){
					$tempx = $tempxZAHL;
					$tempx =~ s/<!--1(.+?)1-->/$1/sg;
					$tempx =~ s/__name__/$nXMLname{$new[$i]}/g;
					$tempx =~ s/__xmlhost__/$nXMLhost{$new[$i]}/g;
					$tempx =~ s/__xmlname__/$new[$i]/g;
					$restZAHL .= $tempx;
					$i++;
				}
			}
			$i--;
			$tempx2 =~ s/<!--1(.+?)1-->/$restZAHL/sg;
			$rest .= $tempx2;
			$restZAHL = "";
		}
		$x .= $split . $rest . $split3;
		$x =~ s/<!--3(.+?)3-->/$1/sg;
		$x =~ s/<!-- F -->(.+?)<!-- F -->/$1/sg;
		$x =~ s/__url__/$url/g;
		$x =~ s/__version__/$version/g;
		$x =~ s/__cat__/$INFO{'cat'}/g;
		$drucksaveSPALTENzahl = sprintf("%.0f",((split(/\,/,$INFO{'news'})) / $drucksaveSPALTEN));

		($drucksave) = ($x =~ /<!--4(.+?)4-->/s);
		($drucksave2) = ($x =~ /<!--5(.+?)5-->/s);
		foreach (split(/\,/,$INFO{'news'})){
			$drucksaveBAK = $drucksave;
			$drucksaveBAK =~ s/__name__/$nXMLname{$_}/g;
			$drucksaveBAK =~ s/__xmlname__/$_/g;
			$drucksaveSPALTENzahlN++;
			$drucksaveRESTz .= $drucksaveBAK;

			if($drucksaveSPALTENzahl == $drucksaveSPALTENzahlN){
				$drucksaveSPALTENzahlN = "0";
				$drucksaveBAK2 = $drucksave2;
				$drucksaveBAK2 =~ s/<!--4(.+?)4-->/$drucksaveRESTz/sg;

				$drucksaveREST .= $drucksaveBAK2;
				$drucksaveRESTz = "";
			}
		}
		if($drucksaveRESTz){
			$drucksaveSPALTENzahlN = "0";
			$drucksaveBAK2 = $drucksave2;
			$drucksaveBAK2 =~ s/<!--4(.+?)4-->/$drucksaveRESTz/sg;

			$drucksaveREST .= $drucksaveBAK2;
		}
		$x =~ s/<!--5(.+?)5-->/$drucksaveREST/sg;

		open(F,">templates/cachealt/$cacheIT.tmp");
		flock(F,2) if($flock);
		print F $x;
		flock(F,8) if($flock);
		close(F);
	}

	$x =~ s/__iframebreite__/$iframebreite/g;
	$x =~ s/__iframehoehe__/$iframehoehe/g;
	&ausgabe($x);
}


sub version {
	&ausgabe("Version: $version");
}



sub txt2html {
	local($text) = @_;
	$text =~ s/\"/&quot;/g;
	$text =~ s!&lt;!&#60;!g;
	$text =~ s!&gt;!&#62;!g;
	$text =~ s/>/&gt;/g;
	$text =~ s/</&lt;/g;
	$text =~ s/ä/&auml;/g;
	$text =~ s/ö/&ouml;/g;
	$text =~ s/ü/&uuml;/g;
	$text =~ s/Ä/&Auml;/g;
	$text =~ s/Ö/&Ouml;/g;
	$text =~ s/Ü/&Uuml;/g;
	$text =~ s/ß/&szlig;/g;
	$text =~ s/\|/\&\#124\;/g;
        $text =~ s/_/&#095;/g;
	return $text;
}

sub html2txt {
	local($text) = @_;
	$text =~ s/&quot;/\"/g;
	$text =~ s/&gt;/>/g;
	$text =~ s/&lt;/</g;
	$text =~ s!&#60;!&lt;!g;
	$text =~ s!&#62;!&gt;!g;
	$text =~ s/&auml;/ä/g;
	$text =~ s/&ouml;/ö/g;
	$text =~ s/&uuml;/ü/g;
	$text =~ s/&Auml;/Ä/g;
	$text =~ s/&Ouml;/Ö/g;
	$text =~ s/&Uuml;/Ü/g;
	$text =~ s/&szlig;/ß/g;
	$text =~ s/\&\#124\;/\|/g;
        $text =~ s/&#095;/_/g;
	return $text;
}

sub wortkuerze {
	$titel2 = $titel;
	$titel =~ s/&uuml;/\ü/g;
	$titel =~ s/&ouml;/\ö/g;
	$titel =~ s/&auml;/\ä/g;
	$titel =~ s/&Uuml;/\Ü/g;
	$titel =~ s/&Ouml;/\Ö/g;
	$titel =~ s/&Auml;/\Ä/g;
	$titel =~ s/&apos;/\'/g;
	$titel =~ s/'/\"/g;
	$titel =~ s/&quot;/\"/g;
	$titel =~ s/\"\"/\"/g;
	$titel =~ s/\\\"/\"/g;
	$titel = substr($titel, 0, $INFO{'lang'}) . $restzeichen if($INFO{'lang'} =~ /^\d+$/ && $INFO{'lang'} < length($titel));
	$titel2 =~ s/\"/&quot;/g;
	$titel =~ s/\"/&quot;/g;
	$titel =~ s/\ü/&uuml;/g;
	$titel =~ s/\ö/&ouml;/g;
	$titel =~ s/\ä/&auml;/g;
	$titel =~ s/\Ü/&Uuml;/g;
	$titel =~ s/\Ö/&Ouml;/g;
	$titel =~ s/\Ä/&Auml;/g;
}
