#!/bin/sh
#++++++++++++++++
# Copyright:    (C) 2008-2017 UDS/CNRS
# License:       GNU General Public License
#.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

# 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-`; ;;
    -hel*) exec $0; ;;
        ,) q="$q&";  ;;
        *) q="$q$1 "; ;;
    esac
    shift
done

# Remove trailing blanks and change the special characters
q=`echo "$q" | sed '
1,$ s/  */ /g
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
case "$SESAME_SERVER" in
    local) test ! -z "$QUERY_STRING" && exec sesame -nph; 
           SESAME_SERVER=http://`hostname`/viz-bin/nph-sesame ; ;;
      cds) SESAME_SERVER=http://cds.u-strasbg.fr/cgi-bin/nph-sesame ; ;;
      cfa) SESAME_SERVER=http://vizier.cfa.harvard.edu/viz-bin/nph-sesame ; ;;
     cadc) SESAME_SERVER=http://vizier.hia.nrc.ca/viz-bin/nph-sesame ; ;;
     adac) SESAME_SERVER=http://vizier.nao.ac.jp/viz-bin/nph-sesame ; ;;
     cds*) SESAME_SERVER=http://$SESAME_SERVER; ;;
     viz*) SESAME_SERVER=http://vizier.u-strasbg.fr/cgi-bin/nph-sesame ; ;;
    http*) ;;
        *) echo "#+++ignored SESAME_SERVER (not http://?); use default" 1>&2;
	   SESAME_SERVER=http://cds.u-strasbg.fr/cgi-bin/nph-sesame ; ;;
esac

#echo "#...url= $SESAME_SERVER/$SESAME_OUTPUT/$SESAME_RESOLVER?$q" 1>&2
test $verbop -ne 0 && \
echo "#... $prog '$SESAME_SERVER/$SESAME_OUTPUT/$SESAME_RESOLVER?$q'"
exec $prog "$SESAME_SERVER/$SESAME_OUTPUT/$SESAME_RESOLVER?$q"
