#![]{perl}[]
#
# Huuh, we are perl!
#
# Copyright (c) 1994 by Hochschulrechenzentrum der Universit"at Gie"sen
# All rights reserved.
#
# Author: Markus Porto
#         Markus Porto@physik.uni-giessen.de
#
# This software may be freely copied, modified, and redistributed
# provided that this copyright notice is preserved on all copies.
#
# You may not distribute this software, in whole or in part, as part of
# any commercial product without the express consent of the author.
#
# There is no warranty or other guarantee of fitness of this software
# for any purpose. It is provided solely "as is".
#
# Diese Datei benutzt der Archie--Service zum Suchen eines Schl"usselwortes.
#
# Dazu wird die "ubergebene Environmentvariable $CONTENT_LENGTH ausgewertet
# und die Eingabe dann von STDIN gelesen.
# Zus"atzlich wird die Environmentvariable $QUERY_STRING ausgewertet.
#
# Parameter:
# tosearch=
#  Der zu suchende Term.
# server=
#  Der zu benutzende Server.
# hits=
#  Maximale Anzahl der Suchergebnisse
# case={on,off}
#  Case--sensitive Suche ja/nein
# substring={on,off}
#  Unterstringsuche ja/nein
# regexp={on,off}
#  Regul"are Ausdr"ucke suchen
# icon=
#  Welches Icon anzeigen
#
# Revision: 30. September 1994
#

# Behandlung des TERM--Signals
$SIG{'TERM'}= handler;

# Datum und Uhrzeit
$date= `[]{cgibin}[]/tex/germandate`;
$time= `[]{cgibin}[]/tex/germantime`;

# wo ist Archie?
$archiename= "[]{archie}[]";

# ein Dateiname
$filename= "/tmp/tmparchie" . $$;

# Neuladen verhindern
if( $ENV{"CONTENT_TYPE"} eq "" )
{
  print `[]{cgibin}[]/tex/reload`;
  exit 0;
}

# der Typ des Textes
print "Content-type: text/html\n\n";

# Zerlegen der Eingabe in einzelne Zeilen
read( STDIN, $content, $ENV{"CONTENT_LENGTH"});
@items= split( /&/, $content);
foreach $item ( @items)
{
  local( $name, $value)= split( /=/, $item);
  
  $value =~ tr/\+/ /;
  $value =~ s/%([\da-f][\da-f])/pack("C",hex($1))/gei;
  $values{$name}= $value;
}
@items= split( /&/, $ENV{"QUERY_STRING"});
foreach $item ( @items)
{
  local( $name, $value)= split( /=/, $item);
  
  $value =~ tr/\+/ /;
  $value =~ s/%([\da-f][\da-f])/pack("C",hex($1))/gei;
  $values{$name}= $value;
}

# zu suchen
$tosearch= $values{"tosearch"};

# der zu verwendende Server
($server= $values{"server"}) =~ s/ .*$//og;
$server= "archie.th-darmstadt.de" if $server eq "";

# maximale Anzahl von Suchergebnissen
$hits= int( $values{"hits"});
$hits= 95 if $hits == 0;

# die Optionen
$archieoptions= "-h " . $server . " -m " . $hits . " -l";
if( $values{"case"} eq "on")
{
  $archieoptions .= "c";
}
if( $values{"substring"} eq "on")
{
  $archieoptions .= "s";
}
if( $values{"regexp"} eq "on")
{
  $archieoptions .= "r";
}

# Logeintrag
open( LOGFILE, ">>/tmp/archie.logfile");
print LOGFILE "Zeitpunkt:      ", $date, " um ", $time, "\n";
print LOGFILE "Gesucht:        ", $tosearch, "\n";
print LOGFILE "Archie-Options: ", $archieoptions, "\n";
print LOGFILE "Remote Addr:    ", $ENV{"REMOTE_ADDR"}, "\n";
print LOGFILE "Remote Host:    ", $ENV{"REMOTE_HOST"}, "\n";
print LOGFILE "---\n";
close( LOGFILE);

# zu suchender Begriff angegeben?
if( $tosearch ne "")
{
  if( open( ARCHIE, "$archiename $archieoptions $tosearch |"))
  {
    # Liste erzeugen und z"ahlen
    open( OUTPUT, ">" . $filename);
    $counter= 0;
    while( <ARCHIE>)
    {
      ( $datetime, $size, $site, $file)= split( ' ', $_, 9999);
      printf OUTPUT
        "<LI> <A HREF=\"ftp://%s%s\">%s</A>\n<PRE>\n%s\n%d bytes, %02d.%02d.%04d  %02d:%02d:%02d\n</PRE>\n",
        $site, $file, $site, $file, $size,
        substr( $datetime, 6, 2), substr( $datetime, 4, 2), substr( $datetime, 0, 4),
        substr( $datetime, 8, 2), substr( $datetime, 10, 2), substr( $datetime, 12, 2);
      $counter++;
    }
    close( OUTPUT);
    close( ARCHIE);
    
    # Text erzeugen
    print "<HTML>\n";
    print "<HEAD>\n";
    print "<TITLE>Archie-Service</TITLE>\n";
    print "</HEAD>\n";
  
    print "<BODY>\n";
    print "<H1>";
    if( $values{"icon"} ne "")
    {
      print "<IMG ALT=\"\" SRC=\"$values{'icon'}\"><BR>\n";
    }
    print "Archie-Service</H1>\n";
    
    print "Ergebnis f&uuml;r die Suche nach <TT>", $tosearch, "</TT>.\n";
    if( $counter < 13)
    {
      $_= $counter;
      s/10/wurden zehn Eintr&auml;ge/g;
      s/11/wurden elf Eintr&auml;ge/g;
      s/12/wurden zw&ouml;lf Eintr&auml;ge/g;
      s/0/wurde kein Eintrag/g;
      s/1/wurde ein Eintrag/g;
      s/2/wurden zwei Eintr&auml;ge/g;
      s/3/wurden drei Eintr&auml;ge/g;
      s/4/wurden vier Eintr&auml;ge/g;
      s/5/wurden f&uuml;nf Eintr&auml;ge/g;
      s/6/wurden sechs Eintr&auml;ge/g;
      s/7/wurden sieben Eintr&auml;ge/g;
      s/8/wurden acht Eintr&auml;ge/g;
      s/9/wurden neun Eintr&auml;ge/g;
      $countername= $_;
    }
    else
    {
      $countername= "wurden " . $counter . " Eintr&auml;ge";
    }
    print "Es " . $countername . " gefunden.<p>\n";
    
    if( $counter != 0)
    {
      print "W&auml;hlen Sie den gew&uuml;schten ";
      print "<A HREF=/hrz/tex/software/ftp.html>FTP--Server</A> an.\n<P>\n";
    }
    
    print "<UL>\n";
    open( OUTPUT, $filename);
    while( <OUTPUT>)
    {
      print;
    }
    close( OUTPUT);
    print "</UL>\n";
    
    print "<HR><EM>WWW-Server []{server_institution}[], TeX-Service, Revision ", $date, "</EM>\n";
    
    print "</BODY>\n";
    print "</HTML>\n";
    
    # Datei l"oschen
    unlink( $filename);
  }
  else
  {
    # Text erzeugen
    print "<HTML>\n";
    print "<HEAD>\n";
    print "<TITLE>Kein Archie</TITLE>\n";
    print "</HEAD>\n";
  
    print "<BODY>\n";
    print "<H1>";
    if( $values{"icon"} ne "")
    {
      print "<IMG ALT=\"\" SRC=\"$values{'icon'}\"><BR>\n";
    }
    print "Kein Archie</H1>\n";
  
    print "Leider ist Archie momentan nicht verf&uuml;gbar.\n<P>\n";
    
    print "<HR><EM>WWW-Server []{server_institution}[], TeX-Service, Revision ", $date, "</EM>\n";
    
    print "</BODY>\n";
    print "</HTML>\n";
  }
}
else
{
  # Text erzeugen
  print "<HTML>\n";
  print "<HEAD>\n";
  print "<TITLE>Kein Schl&uuml;sselwort</TITLE>\n";
  print "</HEAD>\n";

  print "<BODY>\n";
  print "<H1>";
  if( $values{"icon"} ne "")
  {
    print "<IMG ALT=\"\" SRC=\"$values{'icon'}\"><BR>\n";
  }
  print "Kein Schl&uuml;sselwort</H1>\n";

  print "Geben Sie bitte ein zu suchendes Schl&uuml;sselwort an.\n<P>\n";
  
  print "<HR><EM>WWW-Server []{server_institution}[], TeX-Service, Revision ", $date, "</EM>\n";
  
  print "</BODY>\n";
  print "</HTML>\n";
}

sub handler
{
  unlink $filename;
  
  exit( 0);
}
