Files
ioccc/1996/gandalf/try.sh
T
Cody Boone Ferguson af05d9dac1 Slight UI improvements in 1996/gandalf/try.sh
Rather than showing something like:

    Showing diff between 'cmd' and 'cmd':
    Press any key to run: diff ...

it now shows instead (for example):

    $ diff hatcat.txt cathat.txt (diff between 'hatcat' and './cathat'):
    Press any key to continue:

The reason it's two lines is because having it on one line makes it a
kind long line. Probably not an issue with modern systems but I have
tried to keep the lines close to 80 columns and not doing it this way
would make it almost 90.

The script now has -C 1 used to show context. This way the file names
are shown in the output to help distinguish the files being compared. Of
course it might be possible to diff the command outputs themselves but
this works better because it will show the files that are the same
(when they are) rather than '.. and - are identical'.
2024-01-24 05:34:40 -08:00

115 lines
3.2 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# try.sh - show IOCCC winner 1996/gandalf
#
# BTW: it is absolutely perilous to 'try' the patience of Gandalf: go ahead,
# 'try it'! :-)
#
# make sure CC is set so that when we do make CC="$CC" it isn't empty. Doing it
# this way allows us to have the user specify a different compiler in an easy
# way.
if [[ -z "$CC" ]]; then
CC="cc"
fi
make CC="$CC" all >/dev/null || exit 1
# clear screen after compilation so that only the entry is shown
clear
if [[ "$#" -gt 0 ]]; then
if [[ "${1@L}" = "gandalf" ]]; then
echo "It is perilous to try the patience of Gandalf!" 1>&2
read -r -p "Are you sure you wish to do this (Y/N)? "
echo 1>&2
if [[ "$REPLY" != "y" && "$REPLY" != "Y" ]]; then
echo "Wise move, will not try Gandalf's patience!" 1>&2
exit 0
else
echo "Fool of a ${USER@u}!" 1>&2
echo "Oh well, never mind that, moving on ..." 1>&2
echo 1>&2
fi
fi
fi
# remove temporary files to show later
rm -f hatcat.txt cathat.txt hatcat2.txt cathat2.txt hatcat3.txt cathat3.txt
trap 'rm -f hatcat.txt cathat.txt hatcat2.txt cathat2.txt hatcat3.txt cathat3.txt; exit' 0 1 2 3 15
show_diff()
{
if [[ "$#" -ne 3 ]]; then
echo "$0: show_diff expects two args, got: $#" 1>&2
exit 1
fi
echo "$ diff $1 $2 ($3): " 1>&2
read -r -n 1 -p "Press any key to continue: "
echo 1>&2
diff -C 1 "$1" "$2" && echo "$1 and $2 are identical"
echo 1>&2
}
read -r -n 1 -p "Press any key to run: diff -s hatcat cathat: "
echo 1>&2
diff -s hatcat cathat
echo 1>&2
echo "Next notice how running both cathat and hatcat in different ways" 1>&2
echo "shows different output." 1>&2
read -r -n 1 -p "Press any key to run: PATH=.:\$PATH: "
echo 1>&2
PATH=.:$PATH
read -r -n 1 -p "Press any key to run: hatcat | tee hatcat.txt (no path): "
echo 1>&2
hatcat | tee hatcat.txt
echo 1>&2
read -r -n 1 -p "Press any key to run: cathat | tee cathat.txt (no path): "
echo 1>&2
cathat | tee cathat.txt
echo 1>&2
show_diff hatcat.txt cathat.txt "diff between 'hatcat' and './cathat'"
read -r -n 1 -p "Press any key to run: ./hatcat | tee hatcat2.txt: "
echo 1>&2
./hatcat | tee hatcat2.txt
read -r -n 1 -p "Press any key to run: ./cathat | tee cathat2.txt: "
echo 1>&2
./cathat | tee cathat2.txt
show_diff hatcat.txt hatcat2.txt "diff between 'hatcat' and './hatcat'"
read -r -n 1 -p "Press any key to run: \$(pwd)/cathat | tee cathat3.txt: "
echo 1>&2
"$(pwd)"/cathat | tee cathat3.txt
read -r -n 1 -p "Press any key to run: \$(pwd)/hatcat | tee hatcat3.txt: "
echo 1>&2
"$(pwd)"/hatcat | tee hatcat3.txt
show_diff hatcat2.txt cathat2.txt "diff between './hatcat' and './cathat'"
show_diff hatcat3.txt cathat3.txt "diff between '\$(pwd)/hatcat' and '\$(pwd)/cathat'"
show_diff hatcat3.txt hatcat.txt "diff between '\$(pwd)/hatcat' and 'hatcat'"
show_diff hatcat3.txt hatcat2.txt "diff between '\$(pwd)/hatcat' and './hatcat'"
show_diff cathat3.txt cathat.txt "diff between \$(pwd)/cathat' and 'cathat'"
show_diff cathat3.txt cathat2.txt "diff between '\$(pwd)/cathat' and './cathat'"
# remove temporary files
rm -f hatcat.txt cathat.txt hatcat2.txt cathat2.txt hatcat3.txt cathat3.txt
echo 1>&2
echo "Now answer: why did some of the same programs execute differently?" 1>&2
rm -f hatcat.txt cathat.txt hatcat2.txt cathat2.txt hatcat3.txt cathat3.txt