shellcheck fixes in 2020/kurdyukov2

try.sh now runs makegif.sh.

Fix makegif.sh to first compile the program, allow one to specify CC and
convert and check that the output file was created. In the case
convert(1) is not found or it fails to generate the output file it
suggests the user look at the FAQ entry about ImageMagick.
This commit is contained in:
Cody Boone Ferguson committed 2024-02-01 05:19:57 -08:00
1 parent 77a65587ff
commit 58fdcfdc2b
5 files changed
+72 -16

No files matched your search

+1 -1
View File
@@ -212,7 +212,7 @@ clean:
clobber: clean
${RM} -f ${TARGET} ${ALT_TARGET}
${RM} -rf *.dSYM *.gif *.ppm out*.jpg
${RM} -rf *.dSYM *.gif *.ppm out*.jpg gif/
@-if [ -e sandwich ]; then \
${RM} -f sandwich; \
echo 'ate sandwich'; \
+6 -3
View File
@@ -19,6 +19,7 @@ make
./prog 1000 selfie.jpg output.jpg
# Admire your portrait in cubist style
# Also try:
./try.sh
```
@@ -98,7 +99,7 @@ After that’s installed you need to run make with these options:
make LDFLAGS="-I/opt/local/include -L/opt/local/lib"
```
### Building on macOS with HomeBrew
### Building on macOS with Homebrew
First, make sure you have the compiler tools installed e.g. by:
@@ -106,7 +107,7 @@ First, make sure you have the compiler tools installed e.g. by:
sudo xcode-select --install
```
Make sure you install [HomeBrew](https://brew.sh).
Make sure you install [Homebrew](https://brew.sh).
Then:
@@ -139,9 +140,11 @@ You can use this command to make a GIF from output images (uses ImageMagick).
For instance after running the command suggested by the judges:
```sh
convert -delay 10 -dither none -loop 0 $(ls out*.jpg | sort -V) $(ls out*.jpg | sort -rV) +map out.gif
convert -delay 10 -dither none -loop 0 $(find . -maxdepth 1 -type f -name '*jpg' | sort -V) $(find . -maxdepth 1 -type f -name '*jpg' | sort -rV) +map out.gif
```
NOTE: the above is done in the [try.sh](try.sh) script.
Also provided `makegif.sh` to aid with GIF creation.
+45 -10
View File
@@ -4,28 +4,63 @@ output=${2:-"output.gif"}
prog=${3:-"./prog"}
ext="${image##*.}"
dir="gif"
[ $# -lt 3 ] && [ "$ext" = "png" -o "$ext" = "ppm" ] && prog="./prog_$ext"
[ -f "$image" ] || {
[[ $# -lt 3 ]] && [[ "$ext" = "png" || "$ext" = "ppm" ]] && prog="./prog_$ext"
[[ -f "$image" ]] || {
echo "Usage: $0 image.jpg output.gif ./prog"
echo "Dependencies: ImageMagick, bc (basic calculator)"
echo "Note: don't use large images (dimensions above 1000), ImageMagick may fail."
echo "Uses \"gif\" directory for temporary files."
exit 1
}
# 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" || ! -f "$CC" || ! -x "$CC" ]] && CC="cc"
make CC="$CC" all >/dev/null || exit 1
mkdir -p "$dir"
i=8 ; x=$i ; j=0
while [ $x -le 16000 ]; do
while [[ $x -le 16000 ]]; do
x="$(echo "a=$i*e(l(2)/4*$j)+0.5;scale=0;a/1" | bc -l)"
echo "### $j : $x"
list[j]="$dir/out$j.$ext"
"$prog" "$x" "$image" "$dir/out$j.$ext" ; j=$((j+1))
done
i=$j ; j=$((j-2))
while [ $j -ge 1 ]; do
### Uncomment the following line if you want to make a GIF in an image editor such as GIMP
# cp "$dir/out$j.$ext" "$dir/out$i.$ext"
list[i]="$dir/out$j.$ext"
i=$((i+1)) ; j=$((j-1))
done
convert -delay 10 -dither none -loop 0 "${list[@]}" +map "$output"
while [[ $j -ge 1 ]]; do
### Uncomment the following line if you want to make a GIF in an image editor such as GIMP
# cp "$dir/out$j.$ext" "$dir/out$i.$ext"
list[i]="$dir/out$j.$ext"
i=$((i+1)) ; j=$((j-1))
done
# try finding convert(1) from ImageMagick if CONVERT not passed to script or is
# not an executable file
convert_error()
{
echo 1>&2
echo "Warning: $CONVERT failed to generate out.gif. Is $CONVERT convert(1) from ImageMagick?" 1>&2
echo "See: https://github.com/ioccc-src/temp-test-ioccc/blob/master/faq.md#imagemagick." 1>&2
echo 1>&2
echo "Tip: if you have it in a different path, try: CONVERT=path ./try.sh" 1>&2
echo 1>&2
}
[[ -z "$CONVERT" || ! -f "$CONVERT" || ! -x "$CONVERT" ]] && CONVERT="$(type -P convert)"
if [[ -z "$CONVERT" || ! -f "$CONVERT" || ! -x "$CONVERT" ]]; then
echo 1>&2
echo "Could not fine convert(1) from ImageMagick." 1>&2
echo "See: https://github.com/ioccc-src/temp-test-ioccc/blob/master/faq.md#imagemagick." 1>&2
echo 1>&2
else
"$CONVERT" -delay 10 -dither none -loop 0 "${list[@]}" +map "$output"
if [[ ! -f "$output" ]]; then
convert_error
else
echo 1>&2
echo "Now look at $output with a graphics viewer that can show animated GIFs." 1>&2
echo "Warning: includes flashing colours." 1>&2
echo 1>&2
fi
fi
+14 -2
View File
@@ -27,6 +27,8 @@ convert_error()
echo 1>&2
}
# remove ppm files that we create
rm -f random.ppm output.ppm
echo "$ (echo P6 1024 1024 255; dd if=/dev/urandom bs=3M count=1) > random.ppm" 1>&2
(echo P6 1024 1024 255; dd if=/dev/urandom bs=3M count=1) > random.ppm
echo "Look at random.ppm. Do you see any patterns?" 1>&2
@@ -54,8 +56,13 @@ if [[ -n "$CONVERT" ]]; then
echo 1>&2
read -r -n 1 -p "Press any key to create GIF: "
echo 1>&2
echo "$ $CONVERT -delay 10 -dither none -loop 0 $(ls out*.jpg | sort -V) $(ls out*.jpg | sort -rV) +map out.gif" 1>&2
"$CONVERT" -delay 10 -dither none -loop 0 $(ls out*.jpg | sort -V) $(ls out*.jpg | sort -rV) +map out.gif
echo "$ $CONVERT -delay 10 -dither none -loop 0 $(find . -maxdepth 1 -type f -name '*jpg' | sort -V) $(find . -maxdepth 1 -type f -name '*jpg' | sort -rV) +map out.gif" 1>&2
# We want word splitting here so disable shellcheck warning SC2046.
#
# SC2046 (warning): Quote this to prevent word splitting.
# https://www.shellcheck.net/wiki/SC2046
# shellcheck disable=SC2046
"$CONVERT" -delay 10 -dither none -loop 0 $(find . -maxdepth 1 -type f -name '*jpg' | sort -V) $(find . -maxdepth 1 -type f -name '*jpg' | sort -rV) +map out.gif
if [[ ! -f out.gif ]]; then
convert_error
else
@@ -63,6 +70,11 @@ if [[ -n "$CONVERT" ]]; then
echo "Now look at out.gif with a graphics viewer that can show animated GIFs." 1>&2
echo "Warning: includes flashing colours." 1>&2
fi
read -r -n 1 -p "Press any key to run: ./makegif.sh sample.jpg kurdyukov2.gif ./prog: "
echo 1>&2
./makegif.sh sample.jpg kurdyukov2.gif ./prog
echo 1>&2
else
echo 1>&2
echo "Could not fine convert(1) from ImageMagick." 1>&2
+6
View File
@@ -4833,6 +4833,12 @@ the user has installed the appropriate library with
[MacPorts](https://www.macports.org) (with the default MacPorts prefix
`/opt/local`).
Cody also fixed the script [makegif.sh](2020/kurdyukov2/makegif.sh) in a variety
of ways: shellcheck(1), make sure the program is compiled first (allowing one to
specify which compiler to use with `CC=foo ./makegif.sh ...`), checking that
`convert(1)` is found and that it worked properly (linking to the proper FAQ
entry if not installed or it fails).
## <a name="2020_kurdyukov3"></a>[2020/kurdyukov3](/2020/kurdyukov3/prog.c) ([README.md](/2020/kurdyukov3/README.md))