#!/bin/rc PATH_INFO=`{echo $PATH_INFO | urldecode.awk} full_path=$"FS_ROOT^$"PATH_INFO full_path=$"full_path if(! test -d $full_path){ error 404 exit } if(! test -r $full_path -x $full_path){ error 503 exit } do_log 200 builtin cd $full_path if(~ $"NOINDEXFILE ^ $"NOINDEX ''){ ifile=index.htm* if(! ~ $ifile(1) *'*'){ PATH_INFO=$ifile(1) FS_ROOT='' exec serve-static } } title=`{echo $SITE_TITLE | sed s,%s,^$"PATH_INFO^,} title=$"title lso=() switch($2){ case size # ls has no option to sort by size # could pipe it through sort, I suppose case date lso=-t } echo 'HTTP/1.1 200 OK'^$cr emit_extra_headers echo 'Content-type: text/html'^$cr echo $cr echo ' '^$title^' ' echo '

'^$title^'

' if(! ~ $PATH_INFO /) echo 'Parent directory' echo '' ls -lQ $lso | awk ' function urlencode(loc){ # very minimal encoding, just enough for our static-file purposes url=loc gsub("%", "%25", url) # this one first! gsub("\\$", "%24", url) gsub("&", "%26", url) gsub("\\+", "%2B", url) gsub("\\?", "%3F", url) gsub(" ", "%20", url) gsub("\"", "%22", url) gsub("#", "%23", url) return url } function hrsize(size){ if(size > 1073741824) return sprintf("%.1fGB", size/1073741824) if(size > 10485760) return sprintf("%iMB", size/1048576) if(size > 1048576) return sprintf("%.1fMB", size/1048576) if(size > 10240) return sprintf("%iKB", size/1024) if(size > 1024) return sprintf("%.1fKB", size/1024) return sprintf("%iB", size) } /^(-|a)/ { print "" print "" print "" print "" print "" $1="" ; $2="" ; $3="" ; $4="" ; $5="" ; $6="" ; $7="" ; $8="" ; $9="" sub("^ *?", "") print "" print "" $0="" } /^d/ { print "" print "" print "" print "" print "" $1="" ; $2="" ; $3="" ; $4="" ; $5="" ; $6="" ; $7="" ; $8="" ; $9="" sub("^ *?", "") print "" print "" }' echo '
"hrsize($6)""$7""$8""$9""$0"
"$7""$8""$9""$0"/
'