#!/bin/sh #+ # Name: # topcat # Purpose: # Invokes the TOPCAT application on unix # Description: # This shell script invokes the TOPCAT application. # It's not very complicated, but performs some argument manipulation # prior to invoking java with the right classpath and classname. # # 1. if a class path is specified using either the CLASSPATH # environment variable or the -classpath flag to this script, # it will be added to the application classpath # # 2. any command-line arguments which look like they are destined # for java itself (starting with -D or -X, or prefixed with -J) will # be sent to java, and the others will be sent to the application # Requisites: # - java should be on the path. # # - relative to the directory in which this script is installed, # one of the following jar files should exist and contain the # TOPCAT classes: # ./topcat-full.jar # ./topcat-lite.jar # ../../lib/topcat/topcat.jar # Authors: # MBT: Mark Taylor (Starlink) #- # Find where this script is located. scriptname="$0" while [ -L "$scriptname" ] do scriptname=`readlink "$scriptname" 2>/dev/null` done test -n "$scriptname" || scriptname=$0 bindir="`dirname $scriptname`" # Set locations of acceptable jar files. topcat_jars="$bindir/topcat-full.jar \ $bindir/topcat-lite.jar \ $bindir/../lib/topcat/topcat.jar" # Mac-specific items. javaArgs0="" if test -x /usr/bin/sw_vers && /usr/bin/sw_vers | grep -q 'OS.X'; then # Look for the jar in the resource bundle, since we may have been # installed that way. This is a bit of a mess, because of historical # changes in the locations of these scripts. bundle_jar="Java/topcat-full.jar" topcat_jars="$topcat_jars \ $bindir/../$bundle_jar \ $bindir/../TOPCAT.app/Contents/Resources/$bundle_jar" # Look for an icon file and prepare to start java in such a way that # it gets used for the dock icon (rather than the generic java one). icns_files="$bindir/../TOPCAT.app/Contents/Resources/Topcat.icns \ /Applications/TOPCAT.app/Contents/Resources/Topcat.icns \ $bindir/../lib/topcat/MacOS/Topcat.icns" icns_file="" for f in $icns_files; do if test -r "$f"; then icns_file="$f" fi done if test -r "$icns_file" && java -X 2>&1 | grep -q -- -Xdock:icon; then javaArgs0="$javaArgs0 "\'-Xdock:icon=$icns_file\' fi # Set Mac application name. javaArgs0="$javaArgs0 \ -Dcom.apple.mrj.application.apple.menu.about.name=TOPCAT" fi # Locate the application jar file. for j in $topcat_jars; do if test -z "$appjar" -a -f "$j"; then appjar="$j" fi done if test ! -f "$appjar" then echo 1>&2 "Can't find topcat classes relative to ${scriptname} - looked for:" echo " " "$topcat_jars" | sed 1>&2 's/ */\n /g' exit 1 fi # Divide the arguments into two parts: those destined as flags for # the java binary, and the rest. javaArgs="" appArgs="" while test "$1" do if echo $1 | grep -- '^-[XD]' >/dev/null; then javaArgs="$javaArgs "\'$1\' elif echo $1 | grep -- '^-J' >/dev/null; then javaArgs="$javaArgs "\'`echo $1 | sed s/^-J//`\' elif [ "$1" = "-classpath" -a -n "$2" ]; then shift export CLASSPATH="$1" else appArgs="$appArgs "\'$1\' fi shift done # Check for Cygwin and transform paths. case "`uname`" in CYGWIN*) if test -n "$CLASSPATH"; then CLASSPATH=`cygpath --path --windows "${appjar}:$CLASSPATH"` else CLASSPATH=`cygpath --windows "${appjar}"` fi ;; *) CLASSPATH="${appjar}:${CLASSPATH}" ;; esac # Run topcat. cmd="java \ $javaArgs0 \ $javaArgs \ -Duk.ac.starlink.topcat.cmdname=topcat \ -classpath \${CLASSPATH} uk.ac.starlink.topcat.Driver \ $appArgs" eval "$cmd"