#!/usr/bin/env tcsh

# If you want to borrow this script to use elsewhere, and you want to
# invoke it directly from the shell (rather than just as a cgi-bin
# script), then will need to set DOCUMENT_ROOT environment variable
# and add some code here to make use of that for PATH_TRANSLATED.

set debug = 0

echo Content-type: text/html
echo ''

set noglob

if ($debug) then
  echo "Script currently undergoing debugging.  Please try again later."
endif

# PATH_INFO starting /~/ means to go to a file relative to the directory of the
# REQUEST_URI.  Otherwise, use usual CGI path translation.

# Stuff in following if block allows for testing from shell with PATH_INFO as argument.
# Since PATH_INFO via web always starts with "/", will assume same
# for argument from shell.

if (! $?REQUEST_URI) then
  # set DOCUMENT_ROOT = ... in .environment
  # Looks like also need to set WEB_USER_DIR
  echo DOCUMENT_ROOT: "$DOCUMENT_ROOT"
  echo WEB_USER_DIR: "$WEB_USER_DIR"
  set REQUEST_URI = `pwd`/testfromshell.html
  set PATH_INFO = "$*"
  set PATH_TRANSLATED = `echo $PATH_INFO | sed "s@^/\(~[a-zA-Z][^/]*\)@\1/$WEB_USER_DIR@"`
  set PATH_TRANSLATED = `echo $PATH_TRANSLATED | sed "s@^/[^~]*@$DOCUMENT_ROOT&@"`
endif

# Ununderstandably may need line below to prevent e.g., ".tex" coming out on end of PATH_TRANSLATED.
# set PATH_TRANSLATED = "$PATH_TRANSLATED:r"

set EFF_PATH = "$PATH_TRANSLATED"

if ($debug) echo '<PRE>'

if ($debug) then
  echo REQUEST_URI: "$REQUEST_URI"
  echo PATH_INFO: "$PATH_INFO"
  echo PATH_TRANSLATED: "$PATH_TRANSLATED"
  echo EFF_PATH: "$EFF_PATH"
endif

if ("$PATH_INFO" =~ /~/*) then
  echo "<A HREF=/~rig/cgi-bin/avail$REQUEST_URI:h`echo $PATH_INFO | cut -c3-`> (click here)</A>."
  exit
endif

if ($debug > 1) then
  setenv
  set
endif

unset noglob

if ($debug) echo files: $EFF_PATH{,.[^.]*} /dev/null*

foreach file ($EFF_PATH{,.[^.]*} /dev/null*)
  if (! -e "$file") continue
  if ($debug) then
    echo ''
    echo extant file: "$file"
  endif
  if ("$file" == "/dev/null") continue
  set noglob
  set linktarget = $PATH_INFO:h/$file:t
  unset noglob
  set filetail = "$file:t"
  set filedescr = ""
  while (1)
    if (-d "$file") then
      set filedescr = "$file:t directory"
      break
    endif
    set ext = "$filetail:e"
    if ("$filetail:r" == "") break
    switch ("$ext")
    case ~*:
      break
    case uu:
    case uue:
      set filedescr = "$filedescr uuencoded"
      breaksw
    case gz:
    case z:
      set filedescr = "$filedescr gzipped"
      breaksw
    case Z:
      set filedescr = "$filedescr Unix compressed"
      breaksw
    case html:
    case htm:
    case shtml:
    case shtm:
      set filedescr = "$filedescr HTML"
      breaksw
    case txt:
      set filedescr = "$filedescr plain text"
      breaksw
    case ps:
      set filedescr = "$filedescr postscript"
      breaksw
    case dvi:
      set filedescr = "$filedescr DVI"
      breaksw
    case tex:
      set filedescr = "$filedescr TeX/LaTeX"
      breaksw
    case bbl:
      set filedescr = "$filedescr LaTeX .bbl"
      breaksw
    case aux:
      set filedescr = "$filedescr LaTeX .aux"
      breaksw
    case bib:
      set filedescr = "$filedescr BibTeX"
      breaksw
    case tty:
      set filedescr = "$filedescr crude plain text"
      breaksw
    case doc:
      set filedescr = "$filedescr Microsoft Word"
      breaksw
    case rtf:
      set filedescr = "$filedescr Rich Text Format"
      breaksw
    case xls:
      set filedescr = "$filedescr Excel"
      breaksw
    case gif:
      set filedescr = "$filedescr GIF"
      breaksw
    case jpg:
      set filedescr = "$filedescr JPEG"
      breaksw
    case pdf:
      set filedescr = "$filedescr PDF"
      breaksw
    case fulltext:
      set filedescr = "$filedescr full text"
      breaksw
    case abstract:
      set filedescr = "$filedescr abstract"
      breaksw
    case "":
      if ("$filedescr" == "") set filedescr = " download"
      break
      breaksw
    default:
      set filedescr = "$filedescr .$ext file"
      breaksw
    endsw
    set filetail = "$filetail:r"
  end
  switch ("$ext")
  case ~*:
    continue
  endsw
  if (! $?foundsome) then
    echo -n "Available: "
  else
    echo -n ", "
  endif
  set foundsome
  echo -n "<A HREF=$linktarget>$filedescr</A>"
end
if ($?foundsome) echo '.  '

if ($debug) echo '</PRE>'
