[1]  #!/usr/bin/perl
      # Frei fr alle Links Script
      # Erstellt von Matt Wright       (mattw@alpha.prl.kl2.co.us)
      # Gendert von Peter Holfelder   (holfep@genfo.com)
      # Erstellt am: 14.5.95           Letzte nderung: 16.12.96
      # Version: 3.0

 [2]  # Variablen definieren
      $filename = "/home/meinname/public_html/links/links.html";
      $linksurl = "http://mein.host.com/pfad/nach/links.html";
      $linkspl = "http://mein.host.com/cgi-bin/links.pl";
      $datecom = '/usr/bin/date';
      $date = '$datecom +"%r auf %A, %B %d, %Y %Z"'; chop($date);

 [3]  # Die Eingabe erhalten
      read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

      # Splitte die Daten in ein Array-Element fr
      # jedes Name/Wert-Paar
      @pairs = split(/&/, $buffer);

      # Splitte jedes Name/Wert-Paar in ein assoziatives Array.
      # URL-Dekodierung von Name und Wert
      foreach $pair (@pairs) {
          ($name, $value) = split(/=/, $pair);

          $name =~ tr/+/ /;
          $name =~ 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;

          $FORM{$name} = $value;
      }

 [4]  # Test auf ungltige Eingaben, besonders auf ein fehlendes
      # URL oder fehlenden Ankertext.
      if ($FORM{'url'} eq 'http://') { &no_url; }
      &no_url unless $FORM{'url'};
      &no_title unless $FORM{'title'};

      # Prfe auf Erhalt korrekter HTML-Tags im Titelfeld.
      &html_check;

 [5]  # Schlrf die HTML-Datei in ein Array.
      open (HTMLDOC,"$filename");
      @lines = <HTMLDOC>;
      close (HTMLDOC);
      $sizeinlines = @lines;

      # Die HTML-Datei umschreiben, ndern der Anzahl der Links-
      # Zeilen, ndern der Zeile mit dem letzten Link-Datum
      # und Hinzufgen der neuen Link-Zeile sobald wir weg sind.

 [6]  open (HTMLDOC, ">$filename");

 [7]  for ($a = 0; $a <= $sizeinlines; $a++) {

      # Mach uns das Leben leichter und benutze
      # die Standardvariable $_.
      $_ = $lines[$a];

      if (/<!--Anzahl-->/) {

         # Hier fhren wir die Anzahl der Links auf. Der Seite
         # wurde bei jedem Mal nur ein Link hinzugefgt. Daher
         # nehmen wir die aktuelle Nummer und addieren 1 dazu. Wir
         # gehen davon aus, da sich nur eine Nummer in dieser
         # Zeile befindet. Die Zeile
         # $_ =~ s/[^0-9]*//g;
         # ersetzt jedes Nicht-Ziffern-Zeichen der Zeile durch
         # nichts. Dann nehmen wird die ursprngliche Zeile,
         # die passenderweise in $lines[$a] gespeichert ist und
         # ersetzen in der Zeile die alte Nummer durch die 
         # neue Nummer. Danach wird die Zeile in die Datei
         # ausgegeben.

 [8]     $_ =~ s/[^0-9]*//g;
         $links = $_ + 1;
         $lines[$a] =~ s/$_/$links/;
         print HTMLDOC "$lines[$a]";

      } elsif (/<!--Uhrzeit-->/) {

         print HTMLDOC "<!--Uhrzeit--><b>Letzten Link hinzugefgt am $date</b><hr>\n";

      } elsif (/<!--$FORM{'section'}-->/) {

         print HTMLDOC $_;
         print HTMLDOC "<li><a href=\"$FORM{'url'}\">$FORM{'title'}</a>\n";

      } else {

         print HTMLDOC $_;

      }

}
      close (HTMLDOC);

      # Schicke einen Umleitungs-Header, der auf die neue
      # "Freie fr alle Links"-Datei zeigt.

 [9]  print "Location; $linksurl\n\n";

[10]  sub no_url {
          print "Content-type: text/html\n\n";
          print "<html><head><title>KEIN URL</title></head>\n";
          print "<body><h1>FEHLER - KEIN URL</h1>\n";
          print "Sie haben vergessen die URL einzugeben, ";
          print "das Sie der \"Frei fr alle Links\"-Seite ";
          print "hinzufgen wollten.<p>\n";
          print "<form method=POST action=\"$linkspl\">\n";
          print "<input type=hidden name=\"title\" value=\"$FORM{'title'}\">\n";
          print "<input type=hidden name=\"section\"";
          print "value=\"$FORM{'section'}\">\n";
          print "URL: <input type=text name=\"url\" size=50><p>\n";
          print "<input type=submit> * <input type=reset>\n";
          print "<hr>\n";
          print "<a href=\"$linksurl\">Zurck zur Seite ";
          print "\"Frei fr alle Links\"</a>\n";
          print "</form></body></html>\n";
          exit;
       }

[11]  sub no_title {
          print "Content-type: text/html\n\n";
          print "<html><head><title>KEIN TITEL</title></head>\n";
          print "<body><h1>FEHLER - KEIN TITEL</h1>\n";
          print "Sie haben vergessen den Titel einzugeben, ";
          print "den Sie der \"Frei fr alle Links\"-Seite ";
          print "hinzufgen wollten.<p>\n";
          print "<form method=POST action=\"$linkspl\">\n";
          print "<input type=hidden name=\"url\" value=\"$FORM{'url'}\">\n";
          print "<input type=hidden name=\"section\"";
          print "value=\"$FORM{'section'}\">\n";
          print "TITEL: <input type=text name=\"title\" size=50><p>\n";
          print "<input type=submit> * <input type=reset>\n";
          print "<hr>\n";
          print "<a href=\"$linksurl\">Zurck zur Seite ";
          print "\"Frei fr alle Links\"</a>\n";
          print "</form></body></html>\n";
          exit;
      }

[12]  sub html_check {
          $FORM{'title'} =~ s/<([^>]|\n)*>//g;
      }

