#!/bin/sh

# Start everything for Axiom.
#
# axiom
#      [-ht   |-noht]	    whether to use HyperDoc
#      [-gr   |-nogr]	    whether to use Graphics
#      [-clef |-noclef]	    whether to use Clef
#      [-nag |-nonag]	    whether to use NAG
#      [-iw   |-noiw]	    start in interpreter window
#      [-ihere|-noihere]    start an interpreter buffer in the original window
#      [-nox]		    don't use X Windows
#      [-go  |-nogo]	    whether to start system
#      [-ws wsname]	    use named workspace
#      [-list]		    list workspaces only
#      [-grprog fname]	    use named program for Graphics
#      [-nagprog fname]	    use named program for Nag
#      [-htprog fname]	    use named program for HyperDoc
#      [-clefprog fname]    use named program for Clef
#      [-sessionprog fname] use named program for session
#      [-clientprog fname]  use named program for spadclient
#      [-h]		    show usage
#
#

## Where The Axiom system resides
prefix=@prefix@
exec_prefix=@exec_prefix@
AXIOM=@libdir@/open-axiom/target/@target@
export AXIOM

## We adjust the value of PATH here because, currently, some Axiom 
## programs are called from the executing shell, and relying on the 
## fact that the executables are reachable from the PATH.
PATH=$AXIOM/bin:$PATH

## If the system is built without Superman support, there is
## no point in trying to forcefully use Superman
use_sman=@axiom_use_sman@


MALLOCTYPE=3.1
export MALLOCTYPE

# NAGMAN needs to know the hostname
HOST=`hostname`
export HOST

# 0. Basic utilities

ciao() {
	echo "Goodbye."
	exit 1
}

needsubopt () {
	echo "The $1 option requires an argument."
	ciao
}


showuse() {
echo "axiom"
echo "     [-ht   |-noht]       whether to use HyperDoc"
echo "     [-gr   |-nogr]       whether to use Graphics"
echo "     [-clef |-noclef]     whether to use Clef"
echo "     [-nag |-nonag]       whether to use NAG"
echo "     [-iw   |-noiw]       start in interpreter window"
echo "     [-ihere|-noihere]    start an interpreter buffer in the original window."
echo "     [-nox]               don't use X Windows"
echo "     [-go  |-nogo]        whether to start system"
echo "     [-ws wsname]         use named workspace"
echo "     [-list]              list workspaces only"
#echo "     [-grprog fname]      use named program for Graphics"
#echo "     [-nagprog fname]      use named program for Nag"
#echo "     [-htprog fname]      use named program for HyperDoc"
#echo "     [-clefprog fname]    use named program for Clef"
#echo "     [-sessionprog fname] use named program for session"
#echo "     [-clientprog fname]  use named program for spadclient"
echo "     [-h]                 show usage"
}

# 1. Ensure the environment is set.

# Just process '-h'

if [ "$*" = "-h" ] ; then
     showuse
fi

if [ "$SPAD" = "" ] ; then
  if [ "$AXIOM" = "" ] ; then
    echo "AXIOM variable is not set"
    exit 1
  else
    SPAD=$AXIOM
  fi
  export SPAD
else
  if [ "$AXIOM" = "" ] ; then
    echo "AXIOM variable is not set"
    echo "but SPAD = $SPAD"
    echo "Using AXIOM = $SPAD"
    AXIOM=$SPAD
    export AXIOM
  else
    if [ ! "$SPAD" = "$AXIOM" ] ; then
       echo "ignoring SPAD variable"
       SPAD=$AXIOM
    fi
  fi
fi

if [ "$AXIOMXLROOT" = "" ] ; then 
AXIOMXLROOT=${AXIOM}/compiler
fi
export AXIOMXLROOT
PATH=$AXIOMXLROOT/bin:${PATH}
export PATH



if [ ! -d "$SPAD" ] ; then
  echo "The directory for Axiom, $SPAD, does not exist."
  ciao
fi

# Name the workspace directories.
rootwsdir=$SPAD/bin

# 2. Process command line arguments.

# Defaults for command-line arguments.
list=no
go=yes
wsname=AXIOMsys

otheropts=""

while [ "$*" != "" ] ; do

	case $1 in
        -list)  list=yes
                go=no;;
	-go)	go=yes ;;
	-nogo)	go=no ;;

	-ws)
		if [ "$2" = "" ] ; then needsubopt "$1" ; fi
		shift
		wsname="$1"
		;;

	-nagprog|-grprog|-htprog|-clefprog|-sessionprog|-clientprog|-paste|-rm|-rv)
		if [ "$2" = "" ] ; then needsubopt "$1" ; fi
		otheropts="$otheropts  $1 $2"
		shift
		;;
	-clef|-noclef|-gr|-nogr|-ht|-noht|-iw|-noiw|-ihere|-noihere|-nox|-nag|-nonag)
		otheropts="$otheropts $1"
		;;

	-h)
		go=no
		;;


	*)	echo "Unknown option: $1"
		echo "To use a specific workspace use, e.g.: spad -ws $1"
		ciao
		;;
	esac

	shift
done

# 3. List the available workspaces, if asked

listwspaces()
{
        echo "$1"
        ls -l $2 | grep "sys$"
        echo ""
}

if [ $list = yes ] ; then
          listwspaces "AXIOM workspaces in \$AXIOM/bin = $rootwsdir: " $rootwsdir
fi

# 5. Try to ensure a suitable workspace on this host.

if [ `expr $wsname : '.*/.*'` = 0 ] ; then
	serverws=$rootwsdir/$wsname
else
	serverws=$wsname
fi

if [ ! -f $serverws ] ; then
	showuse
	ciao
fi

# 6. Start processes

if [ $go = no ] ; then
	echo "Would now start the processes."
	echo exec $SPAD/bin/sman $otheropts -ws $serverws
	exit 0
fi

if [ $use_sman = "yes" ]; then
    exec $SPAD/bin/sman $otheropts -ws $serverws
else
    exec $serverws
fi