#!/bin/sh
#++++++++++++++++
#.IDENTIFICATION sesame
#.LANGUAGE       Bourne shell
#.AUTHOR         Francois Ochsenbein [CDS]
#.VERSION  1.0   17-Oct-2008
#.PURPOSE        Query one of the Sesame servers.
#.COMMENTS       The following environment variables can be used:
#      SESAME_RESOLVER  (SNV  Simbad, Ned, VizieR in that order)
#      SESAME_SERVER    (cdswww.u-strasbg.fr/cgi-bin/nph-sesame)
#      SESAME_OUTPUT    XML 
#----------------

# Check the arguments: -o (output) -r (resolver) -S (server)
# -v just edits the URL called

verbop=0
if test $# -eq 0; then
   echo "Usage: $0 [-o{xIfHp}] [-r{SNVA}] [-S{servername}] 
         identifier [, identifier...]"
   echo "The options may be replaced by environment variables:"
   echo "-o = SESAME_OUTPUT   (default 'x' for XML; )"
   echo "-r = SESAME_RESOLVER (default SNV for Simbad/Ned/VizieR; A for All)"
   echo "-S = SESAME_SERVER   (default cds; might be cfa, cadc...)"
   echo "More details at  http://cds.u-strasbg.fr/doc/sesame.htx"
   exit 1
fi

# Which program to query HTTP server ?
#if test `which aclient | wc -w` -eq 1; then
#    prog="wwwget"
#else
#    prog="wget -O -"
#fi
prog="wget -O -"


# Set the default variables

test -z "$SESAME_OUTPUT"   && SESAME_OUTPUT=x
test -z "$SESAME_RESOLVER" && SESAME_RESOLVER=SNV
test -z "$SESAME_SERVER"   && SESAME_SERVER=cds

# Explore the arguments
q=""
while test $# -gt 0; do
    case "$1" in
      -v)  verbop=1; ;;
      -o*) SESAME_OUTPUT="$1"; ;;
      -r*) SESAME_RESOLVER="$1"; ;;
      -S*) SESAME_SERVER=`echo $1|cut -c3-`; ;;
        ,) q="$q&";  ;;
        *) q="$q$1 "; ;;
    esac
    shift
done

# Change the special characters
q=`echo "$q" | sed '
1,$ s/  *$//
1,$ s/ /%20/g
1,$ s/["]/%22/g
1,$ s/[#]/%23/g
1,$ s/['"'"']/%27/g
1,$ s/+/%2B/g
1,$ s/[*]/%2a/g
1,$ s/[<]/%3c/g
1,$ s/[>]/%3e/g
'`

# Complete the arguments
case "$SESAME_OUTPUT" in
     -o*)  ;;
      -*)  echo "#***Bad SESAME_OUTPUT: $SESAME_OUTPUT"; exit 1
           ;;
       *)  SESAME_OUTPUT="-o$SESAME_OUTPUT"
esac

case "$SESAME_RESOLVER" in
      -r*)  SESAME_RESOLVER=`echo $SESAME_RESOLVER|cut -c3-`; ;;
       -*)  echo "#***Bad SESAME_RESOLVER: $SESAME_RESOLVER"; exit 1
esac

#echo "#...SESAME_SERVER=$SESAME_SERVER" 1>&2
#echo "#...QUERY_STRING=<$QUERY_STRING>" 1>&2
SESAME_CMD=""
case "$SESAME_SERVER" in
    local) test ! -z "$QUERY_STRING" && exec sesame -nph; 
           SESAME_CMD=http://`hostname`/viz-bin/nph-sesame ; ;;
      cds) SESAME_CMD=http://cds.u-strasbg.fr/cgi-bin/nph-sesame ; ;;
      cfa) SESAME_CMD=http://vizier.cfa.harvard.edu/viz-bin/nph-sesame ; ;;
     cadc) SESAME_CMD=http://vizier.hia.nrc.ca/viz-bin/nph-sesame ; ;;
     cds*) SESAME_CMD=http://$SESAME_SERVER; ;;
     viz*) SESAME_CMD=http://vizier.u-strasbg.fr/cgi-bin/nph-sesame ; ;;
      glu) if [ "$GLUDIR" = "" ]; then
	      SESAME_CMD=`glufilter -r "<&openSesame,un $q $SESAME_OUTPUT $SESAME_RESOLVER>"`; 
	   else
	      SESAME_CMD=`glufilter -H "${GLUDIR}/" -r "<&openSesame,un $q $SESAME_OUTPUT $SESAME_RESOLVER>"`; 
	   fi
	   ;;
    http*) ;;
        *) echo "#+++ignored SESAME_SERVER (not http://?); use default" 1>&2;
	   SESAME_SERVER=http://cds.u-strasbg.fr/cgi-bin/nph-sesame ; ;;
esac

if [ $SESAME_SERVER = "glu" ]; then
        test $verbop -ne 0 && \
            echo "#...(glu) $prog $SESAME_CMD"
        $prog $SESAME_CMD
else
        test $verbop -ne 0 && \
            echo "#... $prog $SESAME_CMD/$SESAME_OUTPUT/$SESAME_RESOLVER?$q"
        $prog "$SESAME_CMD/$SESAME_OUTPUT/$SESAME_RESOLVER?$q"
fi
