linuxcnc/scripts/halrun.in
Chris Morley 223b98de3d halrun -add -e option and allow -s and -e with interactive.
While you still can't have halrun -sk with no filename (legal in 2.5),
-Is or -s gets you the same. -Ise is legal (adds command echo)
-s still get you no prompt (different from 2.5)

Thanks Dewey for the suggestion.
2014-01-06 01:25:02 -08:00

155 lines
3.4 KiB
Bash

#!/bin/bash
PATH=@EMC2_BIN_DIR@:$PATH
REALTIME=@REALTIME@
THIS=$(basename $0)
export HAL_RTMOD_DIR=@EMC2_RTLIB_DIR@
help () {
halcmd -h
cat <<EOF
$THIS Usage:
$THIS [-I] [halcmd_opts] [filename[.hal|.tcl]]
$THIS -T [halcmd_opts] [filename[.hal|.tcl]]
$THIS -h this help
$THIS -U forcibly cause the realtime environment to exit
filename[.hal|.tcl] may also be specified as '-f filename[.hal|.tcl]'
halcmd_opts apply for .hal files only
Interactive if: no filename (runs halcmd)
or -I (runs halcmd)
or -T (runs haltcl)
EOF
}
INTERACTIVE=""
inifile=""
theargs=""
while getopts "ef:hi:kqsvIRQTUV" opt ; do
case $opt in
h) help; exit 0;;
U) halcmd -R
halcmd stop
halcmd unload all
$REALTIME stop
exit 0;;
f) filename=$OPTARG;;
i) inifile=$OPTARG;;
I) INTERACTIVE="halcmd -kf";;
T) INTERACTIVE="haltcl";;
e) theargs="$theargs -$opt";;
k) theargs="$theargs -$opt";;
q) theargs="$theargs -$opt";;
s) theargs="$theargs -$opt";;
v) theargs="$theargs -$opt";;
R) theargs="$theargs -$opt";;
Q) theargs="$theargs -$opt";;
V) theargs="$theargs -$opt";;
\?) echo ""
echo "For usage try: $THIS -h"
exit 1;;
esac
done
shift $(($OPTIND - 1))
if [ $# -gt 1 ] ; then
echo "$THIS: too many arguments <$*>"
exit 1
fi
# filename can be specified two ways:
# as parameter for -f ('f filename')
# or as trailing parameter
if [ $# -gt 0 ] ; then
if [ "X$filename" = "X" ] ; then
filename=$1
shift
else
echo "$THIS: Error: Specified '-f $1' and also <$filename>"
exit 1
fi
fi
if $REALTIME status > /dev/null; then
echo "$THIS: Realtime already running. Use 'halrun -U' to stop existing realtime session." 1>&2
exit 1
fi
HAVEFILE=false
IS_HALTCL=false
case $filename in
*.hal) HAVEFILE=true
if [ -n "$inifile" ] ; then
theargs="$theargs -i $inifile"
fi
# halcmd uses all $theargs:
set -- "$theargs -f $filename";;
*.tcl) HAVEFILE=true
IS_HALTCL=true
# haltcl uses only -i arg
if [ -n "$inifile" ] ; then
tclargs="-i $inifile"
else
tclargs=""
fi
# haltcl only uses inifilename and filename:
set -- "$tclargs $filename";;
"") # for nil filename, support interactive halcmd
# or haltcl if -T was used
if [ "$INTERACTIVE" != "haltcl" ] ; then
INTERACTIVE="halcmd $theargs -kf"
fi
;;
*) echo "$THIS: Unknown file extension for filename=<$filename>"
exit 1
;;
esac
case "$INTERACTIVE" in
halcmd*) if [ -n "$inifile" ] ; then
INTERACTIVE="$INTERACTIVE -i $inifile"
fi
;;
haltcl) if $IS_HALTCL ; then
if [ "$theargs" != "" ] ; then
echo "$THIS: args not accepted for haltcl <$theargs>"
exit 1
fi
else
# allowed -T (tcl interactive) with startup .hal file
:
fi
if [ -n "$inifile" ] ; then
INTERACTIVE="haltcl -i $inifile"
fi
;;
esac
$REALTIME start || exit $?
if $HAVEFILE ; then
if $IS_HALTCL; then
haltcl $@; result=$?
else
halcmd $@; result=$?
fi
fi
if [ ! -z "$INTERACTIVE" ]; then $INTERACTIVE; fi
halcmd stop || result=$?
halcmd unload all || result=$?
$REALTIME stop || result=$?
exit $result