#! perl -w
use strict;
use CGI qw/ :standard/;
my @datahashes = daten('fp.txt');     # Daten werden allen Subroutinen zugänglich gemacht
print page('Flughafen Bielefeld',print_text_html(@datahashes));   # der Seite wird der Name Flughafen gegeben, der Subroutine werden die Daten übergeben  print "$day";
sub daten {
    my $file = shift;                                      #???
    open(FILE,$file) || die "Datei $file nicht gefunden!";     # die Datei fp.txt, wie ganz oben angegeben, wird geöffnet
    my %am = my %ziel = my %von = my %gate = my %arrival = my %depart =();        # es werden leere Hashes deklariert
while ( defined (my $line = <FILE>) ) {                    # durch die while-Schleife kann die Datei Zeile für Zeile eingelsen werden
    chomp $line;                                           # chomp entfernt den Zeilenumbruch
    my @fields = split(' ', $line);                        # das array wird in zeilen zerlegt
    my $flugnr = $fields[1];                               # das 2. Element des Arrays wird als $flugnr deklariert
    $am{$flugnr} = $fields[0];                             # die restlichen Elemente werden unter dem Key flugnr abgelegt
    $ziel{$flugnr} = $fields[2];
    $von{$flugnr} = $fields[3];
    $gate{$flugnr} = $fields[4];
    $arrival{$flugnr} = $fields[5];
    $depart{$flugnr} = $fields[6];
 };
close(FILE);                                                  # die Datei wird wieder zugemacht
    return (\%am,\%ziel,\%von,\%gate,\%arrival,\%depart);     # Hashreferenzen werden zurückggeben. Die Rückgabe mehrerer Hashes ist nicht möglich, weil
};                                                            # Perl diese sonst zu einem einizgen langen Hash zusammenpacken würde
sub datum_uhrzeit {                                                           #neue Subroutine
    my ($Sekunden,$Minuten, $Stunden, $Monatstag, $Monat,                    # Den Variablen wird die reale Zeit/das reale Datum übergeben
    $Jahr, $Wochentag) = localtime(time);
    my $CTIME_String = localtime(time);
    $Monat+=1;
    $Monat = $Monat < 10 ? $Monat = "0".$Monat : $Monat;
    $Monatstag = $Monatstag < 10 ? $Monatstag = "0".$Monatstag : $Monatstag;
    $Stunden = $Stunden < 10 ? $Stunden = "0".$Stunden : $Stunden;
    $Minuten = $Minuten < 10 ? $Minuten = "0".$Minuten : $Minuten;
  
    $Jahr+=1900;
    my @Wochentage = ("Sonntag","Montag","Dienstag","Mittwoch","Do
nnerstag","Freitag","Samstag");
    my $datum = "$Wochentage[$Wochentag], der $Monatstag.$Monat.$Jahr";
    my  $uhrzeit = "$Stunden:$Minuten";
    return ($uhrzeit,$datum,$Monatstag,$Monat,$Jahr);
};
sub status {
  my($am,$ziel,$von,$gate,$arrival,$depart)=@_;          #Aufruf Subroutine
  my ($uhrzeit,$datum,$Monatstag,$Monat,$Jahr) = &datum_uhrzeit();               #Aufruf Subroutine
 
  my ($std,$min) = split(':',$uhrzeit);                  #realeUhrzeit wird in Minuten und Stunden aufgeteilt
  my $realminutes = 60*$std + $min;                      #reale Uhrzeit wird nur noch in Minuten angegeben
   my %status=();
  foreach my $flugnr ( keys %$am ) {
  my ($stunde,$minute) = split(':',$depart->{$flugnr});  #depart-Uhrzeit wird in Minuten und Stunden aufgeteilt
  my ($departday,$departmonth,$departyear) = split('\.',$am->{$flugnr});
  my $departminutes = 60*$stunde + $minute;              #depart-Uhrzeit wird nur noch in Minuten angegeben
  my $info=$departminutes-$realminutes;
  
  my $status='';
 SWITCH:
 {
  if ( ($info <= -6) && ($Monatstag eq $departday) && ($Monat eq $departmonth) && ($Jahr eq $departyear) ) {
     $status="weg"; last SWITCH; };
  
  if ( ($info <= 0) && ($Monatstag eq $departday) && ($Monat eq $departmonth) && ($Jahr eq $departyear) ) {
     $status="startet"; last SWITCH; };
  if ( (($info <= 10) && ($Monatstag eq $departday)) && (($Monat eq $departmonth) && ($Jahr eq $departyear))) {
     $status="Boarding"; last SWITCH; };
  if ( (($info <= 30) && ($Monatstag eq $departday)) && (($Monat eq $departmonth) && ($Jahr eq $departyear))) {
     $status="Check in"; last SWITCH; };
 
     $status="am Boden";
};
  $status{$flugnr}=$status;                                              # der Status auf gestartet umspringen
 };
  return %status;                                                       #$status wird zurück gegeben
};