magic/tcltk/magic.sh.in

73 lines
2.1 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
#
# For installation, put this file (magic.sh) in a known executable path.
# Put startup script "magic.tcl", shared library "tclmagic.so", and
# "wish" replacement "magicexec" in ${CAD_ROOT}/magic/tcl/.
#
# This script starts magic under the Tcl interpreter,
# reading commands from a special startup script which
# launches magic and retains the Tcl interactive interpreter.
# Parse for the argument "-c[onsole]". If it exists, run magic
# with the TkCon console. Strip this argument from the argument list.
TCL_MAG_DIR=${CAD_ROOT}/magic/tcl
if [ "${TCL_MAG_DIR}" = "/magic/tcl" ]; then
TCL_MAG_DIR=TCL_DIR
fi
TKCON=true
DNULL=
if [ -z "$MAGIC_WISH" ]; then
MAGIC_WISH=WISH_EXE
export MAGIC_WISH
fi
# Hacks for Cygwin
if [ "`uname | cut -d_ -f1`" = "CYGWIN" ]; then
export PATH="$PATH:TCLLIB_DIR"
export DISPLAY=${DISPLAY:=":0"}
fi
# Preserve quotes in arguments
arglist=''
for i in "$@" ; do
case $i in
-noc*) TKCON=;;
-dnull) DNULL=true;;
--version) TKCON=; DNULL=true;;
--commit) TKCON=; DNULL=true;;
--prefix) TKCON=; DNULL=true;;
*) arglist="$arglist${arglist:+ }\"${i//\"/\\\"}\"";;
esac
done
if [ $TKCON ]; then
if [ $DNULL ]; then
exec $TCL_MAG_DIR/tkcon.tcl -eval "source $TCL_MAG_DIR/console.tcl" \
-slave "set argc $#; set argv [list $*]; source $TCL_MAG_DIR/magic.tcl"
else
exec $TCL_MAG_DIR/tkcon.tcl -eval "source $TCL_MAG_DIR/console.tcl" \
-slave "package require Tk; set argc $#; set argv [list $arglist]; \
source $TCL_MAG_DIR/magic.tcl"
fi
else
#
# Run the stand-in for wish (magicexec), which acts exactly like "wish"
# except that it replaces ~/.wishrc with magic.tcl. This executable is
# *only* needed when running without the console; the console itself is
# capable of sourcing the startup script.
#
# With option "-dnull" we set up for operation without Tk (simple interpreter
# only, efficient for running in batch mode).
#
if [ $DNULL ]; then
exec $TCL_MAG_DIR/magicdnull -nowrapper "$@"
else
exec $TCL_MAG_DIR/magicexec -- "$@"
fi
fi