diff --git a/2018/bellard/README.md b/2018/bellard/README.md index 2aa24d3c9..cf6dccd09 100644 --- a/2018/bellard/README.md +++ b/2018/bellard/README.md @@ -17,18 +17,20 @@ code](#alternate-code) below. ## Try: -```sh -eog lena.ppm # On Linux -open -a Preview lena.ppm # On macOS +First open [Lenna.png](Lenna.png) in your graphics viewer of choice. Next, after +running the above command (`./prog > lena.ppm`), open `lena.ppm` in your +graphics viewer of choice. After that try: -pngtopam < Lenna.png | pnmscale 0.25 | cjpeg -arithmetic -dct float -quality 14 > small.jpg +```sh +./try.sh ``` -NOTE: `pngtopam(1)` (or `pngtopnm(1)` for older versions) and `pnmscale` come from -the netpbm project and `cjpeg(1)` comes from `libjpeg-turbo`. If you don't have -these tools already see [FAQ 3.15 - How do I compile and install netpbm for -entries that require it?](/faq.md#netpbm) and [FAQ 3.16 - How do I compile and -install libjpeg-turbo for entries that require it?](/faq.md#libjpeg). +NOTE: the script uses the tools `pngtopam(1)` (or `pngtopnm(1)` for older +versions) and `pnmscale` come from the netpbm project and `cjpeg(1)` comes from +`libjpeg-turbo`. If you don't have these tools already see [FAQ 3.15 - How do I +compile and install netpbm for entries that require it?](/faq.md#netpbm) and +[FAQ 3.16 - How do I compile and install libjpeg-turbo for entries that require +it?](/faq.md#libjpeg). NOTE: [Lenna.png](Lenna.png) is from . diff --git a/2018/bellard/try.sh b/2018/bellard/try.sh new file mode 100755 index 000000000..1cf92002f --- /dev/null +++ b/2018/bellard/try.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash +# +# try.sh - demonstrate IOCCC winner 2018/bellard +# + +# 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. +[[ -z "$CC" ]] && CC="cc" + +make CC="$CC" all >/dev/null || exit 1 + +# clear screen after compilation so that only the entry is shown +clear + +# find out if we have necessary tools +PNGTOPAM="$(type -P pngtopam)" +PNMSCALE="$(type -P pnmscale)" +PNGTOPNM="$(type -P pngtopnm)" +CJPEG="$(type -P cjpeg)" + +rm -f small.jpg + +if [[ -n "$PNGTOPAM" && -n "$PNMSCALE" && -n "$CJPEG" ]]; then + echo "$ $PNGTOPAM < Lenna.png | $PNMSCALE 0.25 | $CJPEG -arithmetic -dct float -quality 14 > small.jpg" 1>&2 + read -r -n 1 -p "Press any key to continue: " + echo 1>&2 + "$PNGTOPAM" < Lenna.png | "$PNMSCALE" 0.25 | "$CJPEG" -arithmetic -dct float -quality 14 > small.jpg + if [[ -f small.jpg ]]; then + echo "Now open small.jpg in your graphics viewer of choice." 1>&2 + fi +elif [[ -n "$PNGTOPNM" && -n "$PNMSCALE" && -n "$CJPEG" ]]; then + echo "$ $PNGTOPNM < Lenna.png | $PNMSCALE 0.25 | $CJPEG -arithmetic -dct float -quality 14 > small.jpg" 1>&2 + read -r -n 1 -p "Press any key to continue: " + echo 1>&2 + "$PNGTOPNM" < Lenna.png | "$PNMSCALE" 0.25 | "$CJPEG" -arithmetic -dct float -quality 14 > small.jpg + if [[ -f small.jpg ]]; then + echo "Now open small.jpg in your graphics viewer of choice." 1>&2 + fi +else + if [[ -z "$PNGTOPAM" || -z "$PNGTOPNM" || "$PNMSCALE" ]]; then + echo "Cannot find pngtopam(1) or pnmscale(1). Try installing netpbm first." 1>&2 + echo "See https://github.com/ioccc-src/temp-test-ioccc/blob/master/faq.md#netpbm" 1>&2 + echo 1>&2 + fi + if [[ -z "$CJPEG" ]]; then + echo "Cannot find cjpeg. Try installing libjpeg-turbo." 1>&2 + echo "See https://github.com/ioccc-src/temp-test-ioccc/blob/master/faq.md#libjpeg." 1>&2 + echo 1>&2 +fi diff --git a/thanks-for-help.md b/thanks-for-help.md index bc529d2b0..acefd8efa 100644 --- a/thanks-for-help.md +++ b/thanks-for-help.md @@ -4364,11 +4364,13 @@ He also added the [try.sh](/2015/yang/try.sh) script. ## [2018/bellard](/2018/bellard/prog.c) ([README.md](/2018/bellard/README.md)) -[Cody](#cody), out of abundance of caution, added a second arg to `main()` -because some versions of clang object to the number of args of `main()`, saying -that it must be 0, 2 or 3. The version this has been observed in does not -actually object to 1 arg but it is entirely possible that this changes so a -second arg (that's not needed and is unused) has been added just in case. +[Cody](#cody) added the [try.sh](/2018/bellard/try.sh) script. + +Cody also, out of abundance of caution, added a second arg to `main()` because +some versions of clang object to the number of args of `main()`, saying that it +must be 0, 2 or 3. The version this has been observed in does not actually +object to 1 arg but it is entirely possible that this changes so a second arg +(that's not needed and is unused) has been added just in case. Cody also added explicit linking of libm (`-lm`) for systems that do not do this (Linux doesn't seem to but macOS does).