#!/usr/local/bin/perl  
# -*-perl-*-
# 
#
# 

sub translateCGI {
  # ersetzte dumme CGI-Setungen
  local ($ret) = @_;

  $ret =~ s/\+/ /g;
  $ret =~ s/%([0-9a-fA-F]{2})/pack("c",hex($1))/ge; # sollte auch gehen ...
  return $ret;
}

sub parseQuery {
  # packe die Parameter und ihre Werte in assoziatives array
  local($pair,$name,$val,%form);
  
  foreach $pair  ( split('&',$query) ) {  
    ($name,$val) = split('=',$pair);
    $form{$name} = translateCGI($val);
  }
  return %form;
}

sub getCGI {
  # CGI-parameter holen und aufbereiten
  %form = ();
  if ( $ENV{"REQUEST_METHOD"} eq "GET" ) {
    $query = $ENV{"QUERY_STRING"};
  } elsif ( $ENV{"REQUEST_METHOD"} eq "POST" ) {
    read(STDIN,$query,$ENV{"CONTENT_LENGTH"});
  }
  else {
    # direkter Aufruf, praktisch für Testzwecke, auch möglich ... 
    $query = join('&',@ARGV);
    $query =~ s/= *&/=&/g; # leere Felder ganz löschen
    
}
  chomp($query); # ggf. letztes 'Return' löschen ...
  %form = parseQuery($query);
}



#########################################################
# ------ main
#########################################################


getCGI();  

# Jetzt sind die übergebenen Werte im assoziativen Array $form
# gespeichert.
# Zugriff normalerweise mit $form{Name}.
#

# Die Ausgabe dieses Programms wird an den Borwser, der das Forular
# geschickt hat, zurückgegeben. Wir schickenb ihm html zurück, und
# sagen ihm das hiermit:
print "Content-type: text/html\n\n";

# ein html-Text braucht einen body-Rahmen:
print "<body><h4>Ausgabe:</h4>";

# Nun komm tunserer Ausgabe, also z.Bsp. (wenn im Formular Kennung und
# Passwort abgefragt wurden):

if ($form{Kennung}) {
  print "<p>Angegebene Kennung war <em>$form{Kennung}<em></p>";
  if ($form{Passwort} eq "DarfNix") {
    print "<p>Passwort war korrekt</p>";
  } else {
    print "<p>Falsches Passwort!!</p>";
  }
} else {
  print "<p>Keine Kennung angegeben!!</p>";
}

# und sauber beenden:
print "</body>\n";

# Man kann natürlich auch andere MIME-Formate zurückgeben, mit
# entsprechen geänderter 'Content-type' Zeile. Und man kann natürlich
# auch das CGI-Modul von Perl verwenden. Würde ich aber nur
# Perl-Kennern empfehlen.
