#!/usr/bin/perl # nach 8/9/99 erst 1/00 wieder geaendert wegen neuem Pfad zur Datenbasis # 3/2005: nach cgi/ verschoben, also genannte URLs angepasst. # Ausserdem base href in Header. CSS/Navbar jetzt aus ../ gelesen. sub suchen { my ($string,@liste)=@_; # print "Y $string"; foreach my $zeile (@liste) { chomp($zeile); my $wo=index($zeile,$string); if ($wo>=0) { print $wo."\n" if 1==0; return 1; } else { print "$zeile $wo \n" if 1==0; } } return -1; }; # $oder_werte=""; # $textzeile=""; # s.u. sub mineiner { my ($string,@liste)=@_; # print "Y $string"; return 1 if $#liste<0; $string=lc($string); foreach my $einer (@liste) { $einer=lc($einer); my $wo=index($string,$einer); if (($wo>=0) || ($string =~ /$einer/)) { print "$einer \@ $wo
\n" if $debug>2; return 1; } else { print "$einer nicht in $string\n" if $debug>2; } } return 0; }; %mark=(); # leider global, bin zu dumm fuer Varuebergabe @zeichen=(); sub store_zeichen { if ($debug>1) { while (($key,$val)=each %mark) { print "$key: $val\n"; } }; if ( !defined($mark{'url'}) || ("$mark{'url'}" eq "") ) { print "oops \n" if $debug>1; } else { $mark{'scope'} = join(" : ",@bereich).": "; print "$#zeichen " if $debug>0; my $url = $mark{'url'}; my $titel = $mark{'titel'}; my $descr = $mark{'descr'}; my $scope = $mark{'scope'}; print "Found: $scope $url $titel $descr
\n" if $debug>0; push(@zeichen,"".$mark{'scope'}." ".$mark{'titel'}." (".$mark{'url'}.")".$mark{'descr'}."
"); } $mark{'url'}=""; $mark{'titel'}=""; $mark{'descr'}=""; $mark{'scope'}=""; }; ##################### $special=index($0,"coli")!=-1; # print "$0 $special \n"; ##################### $debug = -1; ##################### # # print "Content-type: text/html\n\n"; print "\n \n Homepage von Eric Auer - Links suchen\n \n \n \n \n \n \n \n \n \n \n \n
\n Homepage von Eric Auer - Links suchen\n    \n [Diese Datei verwendet Cascading Style Sheets.]\n
\n
\n"; # # ######################### $and1="Gibtsdochgarnicht"; $and2=""; $nicht=""; if ( defined($ENV{'QUERY_STRING'}) && (length($ENV{'QUERY_STRING'})>18) ) { my $dings = $ENV{QUERY_STRING}; $dings =~ s/\%20/./g; $dings =~ s/\+/ /g; $dings =~ s/\%.././g; $dings =~ s/[*]/.*/g; # $dings =~ s/[?]/.?/g; # 9.8.99 sonst Fehler '* follows nothing' # print `echo $dings | sed -e "s/%20/ /g" -e "s/+/ /g"`; my @dinger = split(/[?&]/,$dings); print join("
",@dinger) if ($debug>0); while (defined($dinger[0])) { my $dings=pop(@dinger); if (index($dings,"and1=")==0) { $and1=$dings; $and1=~ s/and1=//; } elsif (index($dings,"and2=")==0) { $and2=$dings; $and2=~ s/and2=//; } elsif (index($dings,"nicht=")==0) { $nicht=$dings; $nicht=~ s/nicht=//; } } print "Die Frage lautete:
\n"; print "Was hat 1 aus "".$and1."",
1 aus "".$and2."" und keins aus "".$nicht.""?
\n"; } else { print "Folge diesem Link um ALLES zu finden.
\n"; } print "
\n Gib mir mindestens 1 dieser Worte:
\n Und auch von denen:
\n Aber keins davon:
\n Umlaute/Sonderzeichen werden in "." verwandelt.
\n "." steht für EIN beliebiges Zeichen.
\n "*" sind erlaubt, sie stehen für beliebig viele beliebige Zeichen.
\n Anwendungsbeispiel: Suche nach Homepages.:.Studenten oder nach H.rer.
\n \n
\n"; open(BM,"/home/eric/WebLogs/bookmarks.html") || die "Shit, no BM file\n"; # @bm=reverse(); print @bm[0..5]; # for (1..6) { print "Ignored: ".pop(@bm) if $debug>1; } @bm=; close(BM); for (1..6) { print "Ignored: ".shift(@bm) if $debug>1; } print @bm[0..2] if $debug>1; @bereich=(); while (defined($bm[0])) { my @typen=('DT','A','DL','DD','H3','p'); my $typ="?"; my $lin=$bm[0]; shift(@bm); chomp($lin); # $lin=lc($lin); print "Huch! Ne Leerzeile!\n" if ((length($lin)==0) && ($debug>2)); for my $eintyp (@typen) { my $anf=index($lin,"<".$eintyp); my $ent=index($lin,"=0); $typ=$eintyp if ( ($ent>=0) && ($typ eq "?") ); if ($anf>=0) { if ("$eintyp" eq "A") { my $url=substr($lin,$anf + length("2; die "Multiline HREF\n" if $ent<0; my $ab = $anf + index(substr($lin,$anf),">") + 1; my $desc = substr($lin, $ab, $ent - $ab); $anf = $ent; $ent = -1; $eintyp = "Completed a"; print "Desc: $desc \n" if $debug>2; $mark{'url'} = $url; $mark{'titel'} = $desc; } elsif ("$eintyp" eq "H3") { my $kat=substr($lin,$anf+index(substr($lin,$anf),">")+1); die "Multiline H3\n" if $ent<0; $kat=substr($kat,0,index($kat,"=0; $anf = $ent; $ent = -1; $eintyp = "Completed h3"; print "Kat: $kat \n" if $debug>2; push(@bereich,$kat); } elsif ("$eintyp" eq "DD") { my $descr=substr($lin,$anf+index(substr($lin,$anf),">")+1); $mark{'descr'}="/// ".$descr; $lin=""; } elsif ("$eintyp" eq "DT") { store_zeichen(); } $lin=substr($lin,$anf+index(substr($lin,$anf),">")+1) if length($lin)>0; print "$eintyp / ".substr($lin,0,5)."\n" if ($debug>2) && !(("$eintyp" eq "p") || (index($eintyp,"Completed")>=0)); } if ($ent>=0) { my $lin2=substr($lin,0,$ent-1); $lin=substr($lin,$ent+index(substr($lin,$ent),">")+1); print "!$eintyp / ".substr($lin,0,5)."\n" if $debug>2; if ("$eintyp" eq "DL") { store_zeichen(); ### print "$#zeichen "; # wo sind Kat Enden? my $kat = pop(@bereich); print "EOF Kat: $kat \n" if ($debug>2); } } } if ($typ eq "?") { $mark{'descr'}=" /// " if !defined($mark{'descr'}); $mark{'descr'}=$mark{'descr'} . $lin; print "Typlos: ".substr($lin,0,50)."\n" if (length($lin)>1) && ($debug>2); } } # foreach ############################# print "" . ($#zeichen + 1) . " Links vorhanden!

\n"; for my $wo (0..$#zeichen-1) { my $eins = $zeichen[$wo]; print "$eins\n" if # ((mineiner($eins,split(/ /,$and1))>0) && (mineiner($eins,split(/ /,$and2))>0) ); ((mineiner($eins,split(/ /,$and1))>0) && (mineiner($eins,split(/ /,$and2))>0) && ( ("$nicht" eq "") || (mineiner($eins,split(/ /,$nicht))==0) ) ); } ############################# # # print "
\n Current Greenwich date: "; use POSIX qw(strftime); print strftime("%a, %e.%b %Y %H:%M:%S",gmtime()); print "\n
\n\n\n";