#!/usr/bin/perl -w

@cgiPairs = split("&",$ENV{'QUERY_STRING'});
   
foreach $pair ( @cgiPairs )
{
   # Pronalazimo ime promenjive i njenu vrednost
   ($var,$val) = split("=",$pair);

   # Zamenjujemo + sa prazninama
   $val =~ s/\+/ /g;   

   # Zamenjujemo specijalne karaktere oblika %..
   $val =~ s/%(..)/pack("c",hex($1))/g;
   
   # Gradimo hash
   $cgiVals{"$var"} = "$val";
}
   
$dir=$cgiVals{"dir"};
die('Not a regular dir') if ($dir !~ /^[a-zA-Z0-9]+[-_a-zA-Z0-9\/]*$/);

$color_pl = "http://www.matf.bg.ac.rs/~filip/color.pl";
$home_dir = $dir;

$dirtoget=$dir;
opendir(IMD, $dirtoget) || die("Cannot open directory");
@thefiles= readdir(IMD);
closedir(IMD);


@thefiles = sort 
{ 
  if ($a =~ /(\d+)\.(\d+)(.*)\.c/) {  $a_cas = $1; $a_br = $2; } else { return -1; }
  if ($b =~ /(\d+)\.(\d+)(.*)\.c/) {  $b_cas = $1; $b_br = $2; } else { return 1; }

  if ($a_cas > $b_cas) { return 1; } elsif ($a_cas < $b_cas) { return -1; }
  if ($a_br > $b_br)   { return 1; } elsif ($a_br < $b_br) { return -1; }

  return $a cmp $b;

} @thefiles;

#ispisujemo html zaglavlje
print "Content-type: text/html\n\n";
print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">";
print "<HTML>\n";
print "<HEAD>\n";
print "<META http-equiv=Content-Type content=\"text/html; charset=iso-8859-2\">\n";
print "<meta name=\"keywords\" content=\"programski,jezik,c,zadaci,tutorijal,reseni,vezbe\">\n";
print "<TITLE>Programski jezik C - reseni zadaci</TITLE>\n";
print "<link rel=\"stylesheet\" type=\"text/css\" href=\"c.css\">\n";
print "<SCRIPT language=\"javascript\" type=\"text/javascript\">\n";
print "<!--\n";
print "function show_zip_image(width, height){\n";
print "document.write(\"<img  border=0 alt='zip' width='\"+width+\"' height='\"+height+\"' valign='middle' src='\");\n";
print "if (window.navigator.appName.match(/Microsoft/)) document.write(\"winzip.gif\");\n";
print "else document.write(\"targz.gif\");\n";
print "document.write(\"'>\");\n}\n";

print "function show_html_image(width, height){\n";
print "document.write(\"<img  border=0 alt='html' width='\"+width+\"' height='\"+height+\"' valign='middle' src='\");\n";
print "if (window.navigator.userAgent.match(/Firefox/))\n";
print "\tdocument.write(\"firefox.gif\");\n";
print "else if (window.navigator.userAgent.match(/Mozilla/))\n";
print "\tdocument.write(\"mozilla.gif\");\n"; 
print "else\n";
print "\tdocument.write(\"ie.gif\");\n";
print "document.write(\"'>\");\n}\n";

print "//-->\n";
print "</SCRIPT>\n";


print "</HEAD>\n";
print "<BODY>\n"; 
print("<a name=\"top\"></a>"); 
print "<H1>Programski jezik C</H1>\n";


$last_num = "";
foreach $f (@thefiles)
{   
    if ($f =~ /((\d+)\.(.*))\.c$/)
    {   
	$comment = get_comment($f);

	if ($2 ne $last_num)
	{
		if ($last_num ne "")
		{	

			print "<tr><td colspan = 3>";
			print_lecture_download($last_num);
			print "</td></tr>\n";
			print "</table>\n"; 
			print "<hr>";
		}
		$last_num = $2;

		print "<a name=\"_$2\"></a>\n";
		print "<br><table width =\"100%\"><tr><td><h2>$2</h2></td><td align=\"right\">";
		print_local_links();
		print "</td></tr></table>\n";
		

		print "<table width=\"100%\">\n";
		print "<tr><th class=\"beige\" width=\"60\">Broj</th><th class=\"beige\" colspan=2>Opis</th></tr>\n";
	}
	print "<tr class=\"beige\">\n";
	print "<td>";
	print "<b><A HREF=\"$color_pl?dat=$home_dir/$f\">$1</A></b></td>\n";

	print "<td><A HREF=\"$color_pl?dat=$home_dir/$f\">$comment</A></td>\n";
	print "<td width=\"25\"><A HREF=\"#top\"><img alt='arrow' src=\"strelica.gif\" width = \"25\" height=\"24\" border=\"0\"></A></td>\n";
	print "</tr>\n";
    }
}

print "<tr><td colspan = 3>";
print_lecture_download($last_num);
print "</td></tr>\n";
print "</table>\n";
print "<hr>";

print "<p>\n";
print "<table align=\"center\">\n";  
print "<tr><th class=\"beige\" colspan=2>Svi primeri u jednoj datoteci</th></tr>\n";
print "<tr class=\"beige\" align=\"center\">\n";
print "<td><a href=\"$home_dir/archive/all.c.zip\">";
print "<script language=\"JavaScript\" type=\"text/javascript\">\n<!--\n show_zip_image(60, 60)\n //-->\n</script>\n";
print "</a></td>\n";

print "<td><a href=\"$color_pl?dat=$home_dir/archive/all.c\">";
print "<script language=\"JavaScript\" type=\"text/javascript\">\n<!--\n show_html_image(60, 60)\n //-->\n</script>\n";
print "</a></td>\n";
print "</tr>\n";
print "<tr class=\"beige\" align=\"center\">\n";
print "<td><A href=\"$home_dir/archive/all.c.zip\">zip</A></td>\n";
print "<td><A href=\"$color_pl?dat=$home_dir/archive/all.c\">html</A></td>\n";
print "</tr>\n";
print "</table>\n";


print "<p>\n";

open(NEDSTAT, "nedstat.html");
while(<NEDSTAT>)
{	print;	}

print "<p><a href=\"http://validator.w3.org/check?uri=referer\">\n";
print "<img border=\"0\" src=\"http://www.w3.org/Icons/valid-html401\" alt=\"Valid HTML 4.01!\" height=\"31\" width=\"88\"></a>";

print "<a href=\"http://jigsaw.w3.org/css-validator/check/referer\">";
print "<img style=\"border:0;width:88px;height:31px\" src=\"http://jigsaw.w3.org/css-validator/images/vcss\"  alt=\"Valid CSS!\" >";
print "</a></p>\n";
            
print "</BODY></HTML>";


sub get_comment
{
	$name = shift;
	$name = $home_dir."/".$name;
	return 'Not a regular file name' if (!$name =~ /^[a-zA-Z0-9]+[a-zA-Z0-9\/]*[.]c$/);
	open(DATOTEKA, $name) || return;
	@dat = <DATOTEKA>;
	$dat = join('', @dat);
	
	if ($dat =~ /^\/\*(([^\*]|\*[^\/])+)\*\//)
	{	$comment = $1; }
	else 
	{	$comment = ''; }

	$comment =~ s/&/&amp;/g;
	$comment =~ s/</&lt;/g;
	$comment =~ s/>/&gt;/g;
	$comment;	

}


sub print_local_links
{
	print("<p align = 'right'>");
	my $last_num = "";
	foreach $f (@thefiles)
	{
		if ($f =~ /(\d+)\.(.*)\.c/)
		{
			if ($1 ne $last_num)
			{
				$last_num = $1;
				print("<a href=\"#_$1\">$1</a>|");
			}
		
		}
	}	
	print("</p>\n");
}

sub print_lecture_download
{
	my $num = shift;
	print "<p class=\"tiny\">Download : ";
	print "<a href=\"$home_dir/archive/$num.c.zip\">";
	print "<script language=\"JavaScript\" type=\"text/javascript\">\n<!--\n show_zip_image(25, 25)\n //-->\n</script>\n";
	print "</a>\n";
	print "<a href=\"$color_pl?dat=$home_dir/archive/$num.c\">";
	print "<script language=\"javascript\" type=\"text/javascript\">\n<!--\n show_html_image(25, 25)\n //-->\n</script>\n";
	print "</a>\n";
	print "</p>";
}
