Add 2006/stewart/try.sh

It will run the program on a few files but before it runs it on the
remaining files (as there are quite a lot) it will ask you if you wish
to do so. It only asks once. If convert is found it will run convert on
the xbm images to convert to png. If it's not installed it will only
warn the user once so as to not spam them. If convert fails (say because
the convert is not convert from ImageMagick) it will warn once at the
end of the script. In any event if any files were converted it will list
the png files that exist at the end of the script. Otherwise it'll list
the xbm files. It does not first check if any of those file types exist
as it is presumed that at least a few will exist. If none do it is
likely an error in the program or a corrupted data file.
This commit is contained in:
Cody Boone Ferguson committed 2024-01-22 09:40:16 -08:00
1 parent 1cd8c28280
commit ceb9bf768a
3 files changed
+105 -11

No files matched your search

+10 -9
View File
@@ -30,17 +30,18 @@ NOTE: `convert(1)` belongs to [ImageMagick](https://imagemagick.org/index.php).
## Try:
```sh
./stewart 400 1000000 maze > maze.xbm
convert maze.xbm maze.png
./stewart 1024 1000000 gasket > gasket.xbm
convert gasket.xbm gasket.png
./stewart 1024 1500000 dragon3 > dragon3.xbm
convert dragon3.xbm dragon3.png
./try.sh
```
Now open the images in your favourite graphics viewer or a web browser.
After running the program on a few files it will ask you if you wish to run it
on the remaining files.
The script will try converting the xbm files created by the program to png
files. If it does it will list those that exist in the directory, at the end of
the script. If you do not have `convert(1)` it will warn you once. In that case
you'll have to open the xbm files in a graphics viewer capable of viewing xbm
images. In any case choose your favourite graphics viewer to look at the images
created.
## Judges' remarks:
+90
View File
@@ -0,0 +1,90 @@
#!/usr/bin/env bash
#
# try.sh - demonstrate IOCCC winner 2006/stewart
#
# 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
# try and find convert(1) from ImageMagick
CONVERT="$(type -P convert)"
# keep track if we converted anything
CONVERTED=""
FAILED_CONVERT=""
stewart()
{
if [[ "$#" != 3 ]]; then
echo "$0: stewart() expects 3 args, got: $#" 1>&2
return
fi
if [[ ! -f "$3" || ! -r "$3" ]]; then
echo "$0: file does not exist or not readable: $3" 1>&2
return
fi
if [[ -f "$3.xbm" ]]; then
rm -f "$3.xbm"
fi
read -r -n 1 -p "Press any key to run: ./stewart $1 $2 $3 > $3.xbm: "
echo 1>&2
./stewart "$1" "$2" "$3" > "$3.xbm"
echo 1>&2
if [[ -n "$CONVERT" ]]; then
read -r -n 1 -p "Press any key to run: $CONVERT $3.xbm $3.png: "
echo 1>&2
"$CONVERT" "$3.xbm" "$3.png"
if [[ "$?" = 0 && -f "$3.png" ]]; then
echo "Converted $3.xbm to $3.png for you to view." 1>&2
CONVERTED="true"
else
FAILED_CONVERT="true"
fi
echo 1>&2
fi
}
# we only warn them once if they do not have convert
if [[ -z "$CONVERT" ]]; then
echo "$0: convert(1) not found: you will have to find a viewer of xbm images." 1>&2
fi
stewart 400 1000000 maze
stewart 1024 1000000 gasket
stewart 1024 1500000 dragon3
read -r -p "Do you want to run this on the remaining files (Y/N)? "
echo 1>&2
if [[ "$REPLY" = "Y" || "$REPLY" = "y" ]]; then
for f in altar box box2 box3 carpet circles cross cross2 cross3 crystal curve \
diamonds diamonds2 dragon dragon2 fern gasket_mod gasket_mod2 ioccc \
octagon pentagon pentagons rings rings2 spirals spirals2 spirals3 spirals4 \
squares stars stars2 tree tree2 tree3 tree4 triangle; do
stewart 1024 1000000 "$f"
done
fi
if [[ -n "$FAILED_CONVERT" ]]; then
echo "Failed to convert one or more files to png." 1>&2
fi
if [[ -n "$CONVERTED" ]]; then
echo "The following png files exist: "
ls -1 ./*.png
else
echo "The following xbm files exist: "
ls -1 ./*.xbm
fi