#!/usr/bin/perl -w
#!/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";
}
   
$name=$cgiVals{"dat"};


$keywords = "auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while";

die('Not a regular file name') if (!($name =~ /^[a-zA-Z_0-9][a-zA-Z_0-9\/-]*[.](c|s|cpp|h|hpp|y|ypp|l|lex)$/));
open(DATOTEKA, $name) || die('Cannot open '.$name);


print "Content-type: text/html\n\n";

print "<html><head><link href=\"c-code.css\" type=\"text/css\" rel=\"stylesheet\"></head>\n<body><div><pre>\n";

@dat = <DATOTEKA>;
$dat = join('',@dat);

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


while ($dat)
{
    if ($dat =~ /^(&(lt|gt|amp);)/)
    {
        print $1;
        $dat = $';
    }
    elsif ($dat =~ /^(\#(\\\s*\n|.)+)/)
    {
        print "<span class = 'preprocessor'>".$1."</span>";
        $dat = $';
    }
    elsif ($dat =~ /^(\"(\\\"|[^"])*\")/)
    {
        print "<span class='string'>".$1."</span>";
        $dat = $';
    }
    elsif ($dat =~ /^(0x([0-9a-fA-F]+)|(\d+[uU]?[lL]?)|([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?f?)/)
    {
	print "<span class='number'>".$1."</span>";
	$dat = $';
    } elsif ($dat =~ /^(\/\/.*)/) 
    {
        print "<span class='comment'>".$1."</span>";
        $dat = $';
    }
    elsif ($dat =~ /^(\/\*([^*]|\*[^\/])*\*\/)/)
    {
        print "<span class='comment'>".$1."</span>";
        $dat = $';
    }
    else
    {
	$continue = 0;
	@keywords = split(/\|/,$keywords);
	foreach $key(@keywords)
	{
		if ($dat =~ /^($key)([^a-zA-Z0-9_])/)
    		{
        		print "<span class='keyword'>".$1."</span>";
	        	$dat = $2.$';
                        $continue = 1;
		}
	}
       next if ($continue==1);
    if ($dat =~ /^([A-Za-z_][A-Za-z0-9_]*)/)
    {
        print "<span class='id'>".$1."</span>";
        $dat = $';
    }
    else
    {
        print substr($dat,0,1);
        $dat = substr($dat, 1);
    }
    }
    
}
print "</pre></div></body></html>\n";

