mirror of
https://github.com/Mercury-Language/mercury.git
synced 2025-12-13 04:44:39 +00:00
Add new options --tty', --window', and `--window-cmd',
Estimated hours taken: 4 scripts/mdb.in: Add new options `--tty', `--window', and `--window-cmd', for redirecting I/O to a different tty or to a new window.
This commit is contained in:
165
scripts/mdb.in
165
scripts/mdb.in
@@ -1,41 +1,170 @@
|
||||
#!/bin/sh
|
||||
#---------------------------------------------------------------------------#
|
||||
#-----------------------------------------------------------------------------#
|
||||
# Copyright (C) 1998 The University of Melbourne.
|
||||
# This file may only be copied under the terms of the GNU General
|
||||
# Public License - see the file COPYING in the Mercury distribution.
|
||||
#---------------------------------------------------------------------------#
|
||||
#-----------------------------------------------------------------------------#
|
||||
#
|
||||
# IMPORTANT: the manpage is produced automatically from this help
|
||||
# message, so if you change the help message, don't forget to check
|
||||
# that the manpage still looks OK.
|
||||
Help="\
|
||||
Name: mdb - Mercury debugger
|
||||
Usage: mdb <executable> [<options>]...
|
||||
Usage: mdb [<options>] <executable> [<args>]...
|
||||
Description:
|
||||
The arguments of this command form a command line.
|
||||
If the executable named by this command line is a Mercury program
|
||||
compiled with debugging enabled (e.g. via the \`--debug' option),
|
||||
or if it invokes such a program, then mdb will cause the program
|
||||
to be executed under the supervision of the Mercury internal debugger.
|
||||
Otherwise, mdb will execute the command line as if the mdb prefix
|
||||
weren't there.
|
||||
\`mdb' invokes the specified command \`<executable> <args>...'
|
||||
with Mercury debugging enabled. If that command is a Mercury
|
||||
program that was compiled with debugging enabled (e.g. using
|
||||
the \`--debug' option), or if that command invokes such a
|
||||
program, then mdb will cause the program to be executed under
|
||||
the supervision of the Mercury internal debugger. Otherwise,
|
||||
mdb will execute the command line as if the mdb prefix weren't
|
||||
there.
|
||||
|
||||
By default, all the output of the debugger and the output of the
|
||||
program being debugged will be interleaved on the same terminal
|
||||
window. This can be avoided using the \`--tty' or \`--window'
|
||||
options described below.
|
||||
|
||||
Options:
|
||||
-t <file-name>, --tty <file-name>
|
||||
Redirect all of the I/O for the debugger to the device
|
||||
specified by <file-name>. The I/O for the program
|
||||
being debugged will not be redirected.
|
||||
|
||||
-w, --window
|
||||
Run the program in a new window, with the program's I/O
|
||||
going to that window, but with mdb's I/O going to the
|
||||
current terminal.
|
||||
|
||||
-c <window-command>, --window-command <window-command>
|
||||
Specify the command used by the \`--window' option for
|
||||
executing a command in a new window. The default such
|
||||
command is \`xterm -e'.
|
||||
|
||||
Environment variables:
|
||||
MERCURY_OPTIONS, MERCURY_DEBUGGER_INIT.
|
||||
"
|
||||
|
||||
tty=
|
||||
window=false
|
||||
window_cmd="xterm -e"
|
||||
|
||||
#-----------------------------------------------------------------------------#
|
||||
#
|
||||
# process the command line options
|
||||
#
|
||||
|
||||
case $# in
|
||||
0) echo "Usage: mdb <executable> [<arg> ...]" 1>&2
|
||||
exit 1;;
|
||||
0) echo "Usage: mdb [<options>] <executable> [<arg> ...]" 1>&2
|
||||
exit 1 ;;
|
||||
esac
|
||||
|
||||
case $1 in
|
||||
--help)
|
||||
echo "$Help"
|
||||
exit 0;;
|
||||
while : ; do
|
||||
case "$1" in
|
||||
--help)
|
||||
echo "$Help"
|
||||
exit 0 ;;
|
||||
-t|--tty)
|
||||
tty="$2";
|
||||
shift; shift ;;
|
||||
-t*)
|
||||
tty="` expr $1 : '-t\(.*\)' `"
|
||||
shift ;;
|
||||
-w|--window)
|
||||
window=true
|
||||
shift ;;
|
||||
-w-|--no-window)
|
||||
window=false
|
||||
shift ;;
|
||||
-c|--window-command)
|
||||
window_cmd="$2";
|
||||
shift; shift ;;
|
||||
--)
|
||||
shift; break ;;
|
||||
-*)
|
||||
echo "$0: unknown option \`$1'" 1>&2
|
||||
exit 1 ;;
|
||||
*)
|
||||
break ;;
|
||||
esac
|
||||
done
|
||||
|
||||
#-----------------------------------------------------------------------------#
|
||||
#
|
||||
# Figure out how we should invoke the command
|
||||
#
|
||||
|
||||
invoke_cmd=
|
||||
case "$window" in true)
|
||||
invoke_cmd="$window_cmd"
|
||||
#
|
||||
# If windowing is enabled, check that DISPLAY is set, and if not,
|
||||
# issue a warning message. This is needed because the default error
|
||||
# message from xterm is very poor.
|
||||
#
|
||||
case "$DISPLAY" in "")
|
||||
echo "$0: warning: environment variable \`DISPLAY' not set" 1>&2 ;;
|
||||
esac ;;
|
||||
esac
|
||||
|
||||
MERCURY_OPTIONS="$MERCURY_OPTIONS -Di"
|
||||
#-----------------------------------------------------------------------------#
|
||||
#
|
||||
# Figure out if/how we should redirect the mdb I/O streams
|
||||
#
|
||||
|
||||
case "$tty" in
|
||||
"")
|
||||
case "$window" in
|
||||
true)
|
||||
#
|
||||
# On Linux, we can use special files in /proc
|
||||
# that refer to the file descriptors for a
|
||||
# particular process.
|
||||
#
|
||||
stdin=/proc/$$/fd/0
|
||||
stdout=/proc/$$/fd/1
|
||||
stderr=/proc/$$/fd/2
|
||||
if [ -f $stdin -a -f $stdout -a -f $stderr ]; then
|
||||
redirect_opts="
|
||||
--mdb-in $stdin
|
||||
--mdb-out $stdout
|
||||
--mdb-err $stderr
|
||||
"
|
||||
else
|
||||
# In the general case, we can use the `tty' command.
|
||||
# But that will only work if we're actually running
|
||||
# on a terminal.
|
||||
tty="`tty`"
|
||||
case "$tty" in ""|"not a tty")
|
||||
echo "$0: standard input stream is not a tty" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
redirect_opts="--mdb-tty $tty"
|
||||
fi
|
||||
;;
|
||||
false)
|
||||
redirect_opts=""
|
||||
;;
|
||||
esac ;;
|
||||
*)
|
||||
redirect_opts="--mdb-tty $tty"
|
||||
;;
|
||||
esac
|
||||
|
||||
#-----------------------------------------------------------------------------#
|
||||
#
|
||||
# Set the environment variables used by the Mercury runtime to the
|
||||
# the appropriate values to enabled debugging and to redirect mdb I/O,
|
||||
# and then finally use $invoke_cmd to invoke the command.
|
||||
#
|
||||
|
||||
enable_mdb_opt="-Di"
|
||||
MERCURY_OPTIONS="$MERCURY_OPTIONS $redirect_opts $enable_mdb_opt"
|
||||
export MERCURY_OPTIONS
|
||||
MERCURY_DEBUGGER_INIT=${MERCURY_DEBUGGER_INIT-@DEFAULT_MERCURY_DEBUGGER_INIT_DIR@/mdbrc}
|
||||
export MERCURY_DEBUGGER_INIT
|
||||
exec "$@"
|
||||
exec $invoke_cmd "$@"
|
||||
|
||||
#-----------------------------------------------------------------------------#
|
||||
|
||||
Reference in New Issue
Block a user