diff --git a/2006/stewart/README.md b/2006/stewart/README.md index 64235b6f9..b15059129 100644 --- a/2006/stewart/README.md +++ b/2006/stewart/README.md @@ -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: diff --git a/2006/stewart/try.sh b/2006/stewart/try.sh new file mode 100755 index 000000000..1852b2a74 --- /dev/null +++ b/2006/stewart/try.sh @@ -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 diff --git a/thanks-for-help.md b/thanks-for-help.md index aa75671c2..ddaf57cbb 100644 --- a/thanks-for-help.md +++ b/thanks-for-help.md @@ -3488,8 +3488,11 @@ program in some systems he also added `-include ...` to the Makefile as well. ## [2006/stewart](/2006/stewart/stewart.c) ([README.md](/2006/stewart/README.md])) -[Cody](#cody) fixed it so that if the file cannot be opened it exits rather than trying -to read from the file. +[Cody](#cody) added the [try.sh](/2006/stewart/try.sh) script. + +Cody also fixed it so that if the file cannot be opened it exits rather than trying +to read from the file. This was done at a time when it was considered to be a +bug to fix. ## [2006/sykes1](/2006/sykes1/sykes1.c) ([README.md](/2006/sykes1/README.md]))