#! /bin/sh read l case "$l" in *[!\ 0-9]*) echo "Invalid spec (bad char): $l" 1>&2 exit 1 ;; esac set $l size=$1 #echo "size = $size" 1>&2 shift i=0 while [ $# -ge 1 ]; do n=$1 for var in bx by ax ay; do eval val=$(($n % $size)) if [ $val -lt 0 -o $val -ge $size ]; then echo "Invalid spec (bad $var value $val in $1): $l" 1>&2 exit 1 fi eval $var=$val n=$(($n / $size)) done case $n in 0) ;; *) echo "Invalid spec (overflow $n in $1): $l" 1>&2 esac eval ax$i=$ax eval ay$i=$ay eval bx$i=$bx eval by$i=$by # echo "$i = ($ax,$ay) - ($bx,$by)" 1>&2 i=$(($i+1)) shift done ( echo "ppmmake \#7f7f7f $(((50*$size)+2)) $(((50*$size)+2)) | pnmdepth 255 | pnmmpaste "\\ coords=`count from 0 to $(($size-1))` for y in $coords; do for x in $coords; do echo " greysquare $((($x*50)+1)) $((($y*50)+1)) "\\ done done count from $(($i-1)) to 0 | while read j do for e in a b; do eval x=\$$e\x$j eval y=\$$e\y$j # echo "paste $i at ($x,$y)" 1>&2 echo " circle.$j $((($x*50)+2)) $((($y*50)+2)) "\\ done done echo '' ) | sh