", array()), array("/browse" ,"Browse" , array( array("/server/" , "Server" ), array("/metac/" , "Translator" ), array("/scripts/" , "Scripts" ), array("/bench/" , "Benchmarking" ), array("/paper/" , "Paper" ))), array("/power17" ,"Power" , array( array("/power17" , "17" ), array("/power127" , "127" ), array("/power255" , "255" ), array("/power511" , "511" ), array("/power1023" , "1023" ), array("/power2047" , "2047" ), array("/power4095" , "4095" ), array("/power8191" , "8191" ))), array("/uname" ,"Stats" , array( array("/uname" , "Architecture" ), array("/uptime" , "Uptime" ), array("/gc" , "Garbage collector" ), array("/http" , "HTTP headers" ))), array("/about" ,"About" , array())); preamble("browsing $d"); navbar(); ?> = " ## regular expression and sort order are second stage arguments: if (isset($_GET['re'])) { if($_GET['re']) { $re = $_GET['re']; } else { $re = "."; } } else { $re = "^[^\\.].*[^~]$"; } $ord = $_GET['ord']; %-32s %-13s %5s %s%s\n"; $list = array(); $dh = opendir($d); while(($file = readdir($dh)) !== false) { $fd = array(); $path = "$d/$file"; $fd['name'] = $file; $fd['ext'] = strrchr($file, "."); $fd['kind'] = ""; $ind = ""; switch(filetype($path)) { case "dir": $fd['kind'] = "dir"; $ind = "/"; break; case "link": $fd['kind'] = "symlink"; $ind = "@"; break; case "fifo": $fd['kind'] = "fifo"; $ind = "|"; break; case "block": $fd['kind'] = "bdev"; $ind = ""; break; default: switch($fd['ext']) { case ".a" : $fd['kind'] = "lib"; break; case ".cma": $fd['kind'] = "lib"; break; case ".cmi": $fd['kind'] = "obj"; break; case ".cmo": $fd['kind'] = "obj"; break; case ".ml" : $fd['kind'] = "src"; break; case ".mli": $fd['kind'] = "hdr"; break; } } $fd['mtime'] = filemtime($path); $fd['size'] = filesize($path); $fd['md5'] = $ind=="/"? "" : md5(file_get_contents($path)); $fd['prn'] = sprintf($entry_fmt, $fd['md5'], strftime("%e %b %H:%M", $fd['mtime']), human_size($fd['size']), $path, $fd['kind'], $fd['name'], $ind); array_push($list, $fd); } closedir($dh); ### Now it's time to pass that array from first to second stage. ### Using var_export seems to be slow. Maybe serialize is better? ## print "\$list = "; ## print var_export($list); ## print ";\n"; print "\$list = unserialize(\"". addcslashes(serialize($list),'"'). "\");\n"; ?> #### Sort files -- 2nd stage code function cmp_ext($a,$b) { return strcmp($a['ext'],$b['ext']); } function cmp_kind($a,$b) { return strcmp($a['kind'],$b['kind']); } function cmp_name($a,$b) { return strcmp($a['name'],$b['name']); } function numcmp($a,$b) { return ($a == $b)? 0 : (($a < $b)? -1 : 1); } function cmp_mtime($a,$b) { return numcmp($a['mtime'],$b['mtime']); } function cmp_size($a,$b) { return numcmp($a['size'],$b['size']); } switch($ord) { case "ext": usort($list, "cmp_ext"); break; case "kind": usort($list, "cmp_kind"); break; case "time": usort($list, "cmp_mtime"); break; case "size": usort($list, "cmp_size"); break; default: usort($list, "cmp_name"); } = "?>\n" ?>
checksum last modified size name
= "\n" ?>
foreach($list as $f) {
if(ereg($re, $f['name'])) {
print $f['prn'];
}
}
= "?>\n" ?>
postamble(); ?>
function preamble($title)
{
print
"