[1]   #!/usr/bin/perl

      # Countdown-Skript fr das WWW
      # Version 1.2
      # Erstellt von Matt Wright (mattw@alpha.prl.kl2.co.us)
      # Erstellt am: 31.8.95     Letzte nderung: 18.12.96

[2]   ################################################
      # Variablen-Definitionen

      # @future_date = (jjjj,mm,tt,hh,mm,ss);
      # Das bedeutet: (Jahr,Monat,Tag,Stunde,Minute,Sekunde)
      @future_date = (2000,1,1,0,0,0);

      $year_prefix = "19";

      $use_ssi = "0";     # 1 = Ja; 0 = Nein

      # Erledigt
      ################################################

[3]   if ($ENV{'QUERY_STRING'}) {
          $ENV{'QUERY_STRING'} =~ s/%2C/,/g;
          $ENV{'QUERY_STRING'} =~ s/=//g;

          @future_date = split(/,/, $ENV{'QUERY_STRING'});
      }

[4]   # Definieren, wenn sich verschiedene Dinge ereignen,
      # z.B. unterschiedliches Datum, usw...
      &define_dates;

      # Errechnen der Differenz zwischen zwei Datum-Werten
      &calc_dates;

      # Stelle sicher, da wir keine negative Uhrzeit erhalten...
      # Das bringt es nicht...
      &no_negative;

      # Anfang der HTML-Seiteninformation
      &html_header;

      # Wir wollen nicht, da 1 Jahre gesagt wird, oder?
      # Selbstverstndlich nicht!
      &proper_german;

      # Ende der HTML-Seiteninformation
      &html_trailer;

      ################################################
      # Unterprogramme

      sub define_dates {

[5]      ($f_year,$f_month,$f_day,$f_hour,$f_minute,$f_second) = @future_date;

         ($second,$minute,$hour,$day,$month,$year,$wday,$yday,$isdst) = localtime(time);

       $year ="$year_prefix$year";

       &leap_year_check;

[6]    @months = ("XX","Januar","Februar","Mrz","April","Mai","Juni",
                  "Juli","August","September","Oktober","November","Dezember");

        @days = ("XX","1.","2.","3.","4.","5.","6.","7.","8.","9.","10.",
                 "11.","12.","13.","14.","15.","16.","17.","18.","19.","20.",
                 "21.","22.","23.","24.","25.","26.","27.","28.","29.","30.","31.");

        @days_in_month = (XX,31,$feb_days,31,30,31,30,31,31,30,31,30,31);

[7]     $date_term = "$days[$f_day] $months[$f_month]";

        unless ($f_year eq 'XX') {
           $date_term = "$date_term $f_year";
        }
        unless ($f_hour eq 'XX') {
           $date_term = "$date_term $f_hour";
        }
        unless ($f_minute eq 'XX') {
           if ($f_minute < 10) {
              $date_term = "$date_term:0$f_minute";
           }
           else {
              $date_term = "$date_term:$f_minute";
           }
        }
        unless ($f_second eq 'XX') {
           if ($f_second < 10) {
              $date_term = "$date_term:0$f_second";
           }
           else {
              $date_term = "$date_term:$f_second";
           }
        }

[8]     $current_date = "$days[$day] $months[$month] $year $hour";
        if ($minute < 10) {
           $current_date = "$current_date:0$minute";
        }
        else {
           $current_date = "$current_date:$minute";
        }
        if ($second < 10) {
           $current_date = "$current_date:0$second";
        }
        else {
           $current_date = "$current_date:$second";
        }

     }

[9]  sub leap_year_check {
     $yearmod = ($year % 4);
     $centurymod = ($year % 100);
     $century4mod = ($year  % 400);
     if (!$centurymod) {
        if ($century4mod) {
           $feb_days = "29";
        }
        else {
        $feb_days = "28";
        }
     }
     elsif (!$yearmod) {
        $feb_days = "29";
     }
     else {
        $feb_days = "28";
     }
     }
[10] sub calc_dates {
        $real_year = ($f_year - $year);
        $real_month = ($f_month - $month);
        $real_day = ($f_day - $day);
        $real_hour = ($f_hour - $hour);
        $real_minute = ($f_minute - $minute);
        $real_second = ($f_second - $second);
     }

[11] sub no_negative {
        if ($real_second < 0) {
           $real_second = ($real_second + 60);
           $real_minute--;
        }

        if ($real_minute < 0) {
           $real_minute = ($real_minute + 60);
           $real_hour--;
        }

        if ($real_hour < 0) {
           $real_hour = ($real_hour + 24);
           $real_day--;
        }

        if ($real_day < 0) {
          $real_day = ($real_day + @days_in_month[$month]);
           $real_month--;
        }

        if ($real_month < 0) {
           $real_month = ($real_month + 12);
           $real_year--;
        }
     }

[12] sub proper_german {
        unless ($f_year eq 'XX') {
           if ($real_year eq '1') {
              print "$real_year Jahr<br>\n";
           } else {
              print "$real_year Jahre<br>\n";
           }
        }

        unless ($f_month eq 'XX') {
           if ($real_month eq '1') {
              print "$real_month Monat<br>\n";
           } else {
              print "$real_month Monate<br>\n";
           }
        }

        unless ($f_day eq 'XX') {
           if ($real_day eq '1') {
              print "$real_day Tag<br>\n";
           } else {
              print "$real_day Tage<br>\n";
           }
        }

        unless ($f_hour eq 'XX') {
           if ($real_hour eq '1') {
              print "$real_hour Stunde<br>\n";
           } else {
              print "$real_hour Stunden<br>\n";
           }
        }

        unless ($f_minute eq 'XX') {
           if ($real_minute eq '1') {
              print "$real_minute Minute<br>\n";
           } else {
              print "$real_minute Minuten<br>\n";
           }
        }

        unless ($f_second eq 'XX') {
           if ($real_second eq '1') {
              print "$real_second Sekunde<br>\n";
           } else {
              print "$real_second Sekunden<br>\n";
           }
        }
     }

[13] sub html_header {
        print "Content-type: text/html\n\n";
        if ($use_ssi ne '1') {
           print "<html><head>";
           print "<title>Countdown bis: $date_term</title></head>\n";
           print "<body><center><h1>Countdown bis: $date_term</h1>\n";
           print "<hr>\n";
        }
     }

[14] sub html_trailer {
        if ($use_ssi ne '1') {
           print "<hr>\n";
           print "Es ist gerade der $current_date\n";
           print "</center>\n";
           print "</body></html>\n";
        }
        else {
           print "Bis $date_term<hr>\n";
        }
     }

