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:
1 parent
1cd8c28280
commit
ceb9bf768a
3 files changed
+105
-11
No files matched your search
+10
-9
@@ -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:
|
||||
|
||||
Executable
+90
@@ -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
|
||||
Reference in new issue
Block a user