#!/usr/bin/perl

# First of all, let's load HELM configuration
use Env;
my $HELM_LIB_DIR = $ENV{"HELM_LIB_DIR"};
# this should be the only fixed constant
my $DEFAULT_HELM_LIB_DIR = "/projects/helm/on-line/local/lib/helm";
if (defined ($HELM_LIB_DIR)) {
   $HELM_LIB_PATH = $HELM_LIB_DIR."/configuration.pl";
} else {
   $HELM_LIB_PATH = $DEFAULT_HELM_LIB_DIR."/configuration.pl";
}

# next require defines: $helm_dir, $html_link, $dtd_dir, $uris_dbm
require $HELM_LIB_PATH;

$getter_url_get_uri = $getter_url."get?uri=";
$html_keys   = "key=C1&key=HC2";

# LUCA
# the following lines precompute some escaped string so that they can
# be used safely in a URI as value for parameters.

use URI::Escape;

#$escape_these = "\;\/\?\:\@\&\=\+\,\$";
$escape_these = "&=;:?";
$esc_getter_url = uri_escape($getter_url, $escape_these);
$esc_processor_url = uri_escape($processor_url, $escape_these);
$esc_getter_url_get_uri = uri_escape($getter_url_get_uri, $escape_these);
$esc_html_keys = uri_escape($html_keys, $escape_these);

$baseuri0 = $dirname = $uri = $ENV{"REQUEST_URI"};

$dirname =~ s/$helm_url_path//;
$dirname = $library_dir_on_line.$dirname;

$baseuri0 =~ s/$helm_url_path//;

opendir(DIR, $dirname);
@filenames = readdir(DIR);
closedir(DIR);

$output = "";
foreach $i (@filenames) {
   if ($i eq "..") {
      $output .= <<EOT;
<tr>
<td><img border="0" src="/icons/back.gif" alt="[BACK]"></td>
<td><a href="$uri$i">Parent Directory</a></td>
</tr>
EOT
   } elsif ($i !~ /^\./) {
      # hidden files excluded
      (undef,undef,$mode) = stat("$dirname$i");
      if ($mode &= 16384) {
         # directory
         $output .= <<EOT;
<tr>
<td><img border="0" src="/icons/folder.gif" alt="[DIR]"></td>
<td><a href="$uri$i">$i</a></td>
</tr>
EOT
      } else {
	 # file
	 if ($i =~ /\.(con|var|ind)(\.types)?\.xml(\.gz)?$/) {
            my $i_without_xml = $i;
            $i_without_xml =~ s/(.*)\.xml(\.gz)/$1/;
	    # cic file
            my $baseuri = "cic:".$baseuri0;
            $output .= <<EOT;
<tr>
<td><img border="0" src="/icons/generic.red.gif" alt="[DIR]"></td>
<td><a href="$uri$i">$i</a></td>
<td><a href="$processor_url/apply?key=C1&xmluri=$esc_getter_url_get_uri$baseuri$i_without_xml">MathML Content</a></td>
<td><a href="$processor_url/apply?key=C1&key=C2&xmluri=$esc_getter_url_get_uri$baseuri$i_without_xml">MathML Presentation</a></td>
<!--
<td><a href="$processor_url/apply?key=C1&key=C2&key=R2A&xmluri=$esc_getter_url_get_uri$baseuri$i_without_xml">MathML P Abs</a></td>
-->
<td><a href="$processor_url/apply?$html_keys&param.getterURL=$esc_getter_url&param.processorURL=$esc_processor_url&param.keys=$esc_html_keys&xmluri=$esc_getter_url_get_uri$baseuri$i_without_xml">HTML</a></td>
</tr>
EOT
	 } elsif ($i =~ /\.(con|var|ind)\.ann\.xml(\.gz)?$/) {
            my $i_without_xml = $i;
            my $i_without_ann_and_xml = $i;
            $i_without_xml =~ s/(.*)\.xml(\.gz)/$1/;
            $i_without_ann_and_xml =~ s/(.*)\.ann\.xml/$1/;
	    # cic file
            my $baseuri = "cic:".$baseuri0;
            $output .= <<EOT;
<tr>
<td><img border="0" src="/icons/text.gif" alt="[DIR]"></td>
<td><a href="$uri$i">$i</a></td>
<td><a href="$processor_url/apply?key=C1&xmluri=$esc_getter_url_get_uri$baseuri$i_without_ann_and_xml&annuri=$baseuri$i_without_xml">MathML Content</a></td>
<td><a href="$processor_url/apply?key=C1&key=C2&xmluri=$esc_getter_url_get_uri$baseuri$i_without_ann_and_xml&annuri=$baseuri$i_without_xml">MathML Presentation</a></td>
<!--
<td><a href="$processor_url/apply?key=C1&key=C2&key=R2A&xmluri=$esc_getter_url_get_uri$baseuri$i_without_xml">MathML P Abs</a></td>
-->
<td><a href="$processor_url/apply$html_keys&param.getterURL=$esc_getter_url&param.processorURL=$esc_processor_url&param.keys=$esc_html_keys&xmluri=$esc_getter_url_get_uri$baseuri$i_without_ann_and_xml&annuri=$baseuri$i_without_xml">HTML</a></td>
</tr>
EOT
	 } elsif ($i =~ /\.theory\.xml(\.gz)?$/) {
            my $i_without_xml = $i;
            $i_without_xml =~ s/(.*)\.xml(\.gz)/$1/;
	    # theory file
	    my $baseuri = "theory:".$baseuri0; $output .= <<EOT;
<tr>
<td><img border="0" src="/icons/layout.gif" alt="[DIR]"></td>
<td><a href="$uri$i">$i</a></td>
<td><a href="$processor_url/apply?key=T1&xmluri=$esc_getter_url_get_uri$baseuri$i_without_xml">MathML Content</a></td>
<td><a href="$processor_url/apply?key=T1&key=T2&xmluri=$esc_getter_url_get_uri$baseuri$i_without_xml">MathML Presentation</a></td>
<td><a href="$processor_url/apply?key=T1&key=T2&xmluri=$esc_getter_url_get_uri$baseuri$i_without_xml">HTML</a></td>
</tr>
EOT
         } else {
	    # other file
            $output .= <<EOT;
<tr>
<td><img border="0" src="/icons/unknown.gif" alt="[DIR]"></td>
<td><a href="$uri$i">$i</a></td>
</tr>
EOT
	 }
      }
   }
}

print <<EOT;
Content-type: text/html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
"http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<title>Index of $uri</title>
</head>
<body bgcolor="#ffffff" text="#000000">
<table><tr><td bgcolor="#ffffff" class="title">
<font size="+3" face="Helvetica,Arial,sans-serif"><b>Index of $uri</b></font>
</td></tr></table>
<hr noshade align="left" width="80%">
<table>
$output
</table>
<hr noshade align="left" width="80%">
</body>
</html>
EOT
