#!/usr/bin/perl
#
# Written by Markus Guertler (04/99)
# (c) 1999 by Cybernet AG
#
# short doc from tli:
#
#Beschreibung, wie man einen Outlook Wochen Kalender in eine Webpage bekommt:
#
#1. Datei-Drucker installieren:
#	- Systemsteuerung->Drucker->Neuer Drucker
#	- Port: File (local)
#	- Hersteller: "Generic", Treiber: "Generic/Text Only"
#
#2. Im Outlook Kalender zum Wochen View wechseln
#3. Einstellen: Datei->Seite einrichten->Wochenformat: "Tage: Von oben nach unten" und "2 Seiten/Woche", 
#   Reiter Kopf-Fusszeilen: Alles entfernen, also KEINE Kopfzeilen und KEINE Fusszeilen!
#4. Datei->Drucken, als Drucker den "Generic/Text Only" auswhlen.
#5. Dateiname angeben, in die gedruckt werden soll, folgende Convention verwenden, 
#   wenn man mkcal auf der USS verwenden will: "12.Mai_bis_20.Mai" (Keine Endung!)
#6. Datei nach USS transferieren, ins Verzeichniss /var/spool/cal
#7. /root/bin/mkcal luft als Cronjob, d.h. mehr braucht man nicht zu tun, man kann die 
#   Kalender Seite aber auch manuell erstellen, einfach createplan ohne Parameter aufrufen,
#   dann wird eine kurze Hilfe angezeigt.

# last changed: 13.05.1999 TLI


use Getopt::Std;

use vars qw ($opt_z,$opt_f,$opt_o, $opt_m);
getopts ('z:f:o:m:');     


my($rowcount) = 10;
my(@tage) = ("Montag","Dienstag","Mittwoch","Donnerstag","Freitag", "Samstag", "Sonntag");
my($fieldlayer);

&usage;

&readfile;

if($opt_z eq "")
{
        print "value expected for option -z!\n";
        exit 1;
}
else
{
        print "debug: $opt_z\n";
        $zeit = $opt_z;
}   

if ($opt_m eq "text") {&text}
elsif ($opt_m eq "html") {&html}
else
  {
   print "$opt_m is not a valid identifer for -m!\n";
   exit 1;
  }


exit 0;
  
# Subroutinen

sub usage
{
if (!$opt_f || !$opt_m)
{
print STDERR <<EOF;
usage: $0 -f input filename [-o output filename] -m text|html -z "Zeitraum"
EOF
exit 1;
}
}

sub readfile
{
open FILE, "< $opt_f" or die "Could not open file $opt_f";
while (<FILE>)
{
chop $_;
if (!$modecount && $_ =~ /montag/i) {$modecount = 1;}
if ($modecount && $_ =~ /^\s*thomas\slinden\s+\d\s+\d\d\.\d\d.\d\d/i) {$modecount = 0}

if ($modecount) {push (@data,$_)};
}
}

sub text
{

if ($opt_o) {open OUTPUT, "> $opt_o" || die "Could not open $opt_o!"; select (OUTPUT)}    

for ($count=1;$count <= $rowcount;$count++)
{
	foreach $_(@data)
	{
		if ($_)
 		{
 			@line = split (/\s\s+/, $_);
   			$currentry = $line[$count];
  			if ($currentry)
     			{
     				if ($currentry =~ /^(\d\d:\d\d)(\d\d:\d\d)(.*)$/)
       				{
       					$currentry = "$1 $2 $3";
       				}
     				if ($currentry =~ /(samstag|sonntag|montag|dienstag|mittwoch|donnerstag|freitag)/i)
        			{
        				print "\n";
        			}
     				print "$currentry\n";
     			}
 		}
	}
}

close (OUTPUT);
select (STDOUT);
exit 0;
}

sub html
{

if ($opt_o) {open OUTPUT, "> $opt_o" || die "Could not open $opt_o!"; select (OUTPUT)}    

&htmlstart;

foreach $currday(@tage)
{

print <<EOF;
<tr>
EOF



$daily = "";

$fieldlayer = 0;
for ($count=1;$count <= $rowcount;$count++)
{
foreach $_(@data)
{
if ($_)
 {
 @line = split (/\s\s+/, $_);
   $currentry = $line[$count];
   if ($currentry)
     {
     
     if ($currentry =~ /^\s*($currday),\s+(\d+)\.\s+(.+)/i && !$fieldlayer)
       {
       my($dayofmonth) = $2;
       my($month) = $3;
       $fieldlayer = 1;
print "</table><p>&nbsp;</p><table border=2 cellspacing=2 cellpadding=1>";
print <<EOF;
<tr><th colspan=24 bgcolor="#c0c0c0" align=center>$currday $dayofmonth. $month</th></tr>
<tr><td height=1></td></tr>
</tr>
EOF
for ($hourcount = 0; $hourcount < 24; $hourcount++)
{
print "<th colspan=1 width = 20 bgcolor=\"#c2c2c2\" align=center>$hourcount<\/th>\n";
} 
       }
     
     if (($currentry !~ /^\s*($currday),\s+(\d+)\.\s+(.+)/i) && ($currentry =~ /^\s*(montag|dienstag|mittwoch|donnerstag|freitag|samstag|sonntag),\s+(\d+)\.\s+(.+)/i) && ($fieldlayer eq "1"))
       {
       $fieldlayer = 0;
       }   

     if ($currentry =~ /^(\d\d):(\d\d)(\d\d):(\d\d)(.*)$/ && $fieldlayer eq "1")
      {
      my($startime_hour) = $1;
      my($startime_minute) = $2;
      my($finishtime_hour) = $3;
      my($finishtime_minute) = $4;

      $startime_hour += 0;
      $startime_minute += 0;
      $finishtime_hour += 0;
      $finishtime_minute += 0;
              
      print "<tr>\n";
      
      for ($hourcount = 0; $hourcount < 24; $hourcount++)
       {
      if ($hourcount == $startime_hour)
         {
         my($spanne) = $finishtime_hour - $startime_hour; if ($spanne < 0) {$spanne += 24}
         
         $hourcount += $spanne - 1;
     	$Z = ""; 
	if($startime_hour == 0)
	{ $Z .= "00"; } else { $Z .= $startime_hour; }
	$Z .= ":";
	if($startime_minute == 0)
	{ $Z .= "00"; } else { $Z .= $startime_minute; }
	$Z .= " - ";
	if($finishtime_hour == 0)
	{ $Z .= "00"; } else { $Z .= $finishtime_hour; }
	$Z .= ":";
	if($finishtime_minute == 0)
	{ $Z .= "00"; } else { $Z .= $finishtime_minute; }
	 if((($finishtime_hour - $startime_hour) < 2) && ($finishtime_hour != 0))
	 {
		# TLI	
		$daily = $daily."&nbsp;&nbsp;<b>$Z $5</b><br>"; 
                print "<td width=20 colspan=1 bgcolor=\"#cccfff\" align=center><font type=\"helvetica\" size=-1><img src=su.jpg alt=\"$Z $5\"><\/font><\/td>\n";

	 }
         else {
	print "<td colspan=",$spanne," bgcolor=\"#cccfff\" align=center><font type=\"helvetica\" size=-1>$5<br><b>(";
	print $Z;
	print "</b>)<\/font><\/td>\n";
	}
         } else {
         print "<td width=20 colspan=1 bgcolor=\"#ffffff\" align=center><font type=\"helvetica\" size=-1>&nbsp<\/font><\/td>\n";
         }
       }
       print "<\/tr>\n";
       print "\n";
      } 
      
     if ($currentry !~ /^(\d\d):(\d\d)(\d\d):(\d\d)(.*)$/ && $currentry !~ /^\s*($currday),\s+(\d+)\.\s+(.+)/i && $fieldlayer eq "1")
     {
	if ($currentry !~ /^MDMDFSS.*/ && $currentry !~ /^\d\d/ && $currentry !~ /^(januar|februar|mrz|maerz|april|mai|juni|juli|august|september|oktober|november|dezember).*/i)
	{
     		$daily = $daily."&nbsp;&nbsp;$currentry<br>";
	}
     }
         
     }
  
 }
}
}

print "<tr><td colspan=24 bgcolor=\"#c0c0c0\" align=default>$daily<\/td><\/tr>\n";

 
}

&htmlende;

close (OUTPUT);
select (STDOUT);
exit 0;
}

sub htmlstart
{
print <<EOF;
<html>
<body bgcolor="#f0f0f0" link="#0000ff" vlink="#0000ff">
<center>
<font type="helvetica" size=-1><h2><b>Online-Dienstplan $zeit</b></h2></font>
EOF
print "<p>Stand: ";
print `date +%d.%m." "%H:%M:%S" Uhr"`;
print "</p>";
}

sub htmlende
{
print <<EOF;
</table>
<font type="helvetica" size=-1>
<p></p>
<b>Dienstplan erstellt von <a href="mailto:tom\@daemon.de">Thomas Linden</a></b><br>
<b>Diese Seite wurde automatisch erzeugt. Bei Problemen wendet euch bitte an <a href="mailto:mguertler\@cybernet-ag.net">Markus G&uuml;ertler</a></b>
</font>
</center>
</body>
</html>
EOF
}

