#! /bin/sh
# DoublePrint.sh
# Reads PNM each of 2 specified files, writes PPM to standard output
# containing both inputs, the second either below or to the right of
# the first, of dimensions such that each input fits within
# 3.375"x2.531" when printed as 4"x6".
#
# Uses 'pnmfile', 'ppmmake', and 'pnmpaste'
#
# November 4, 2011
# For latest version, see gopher -p users/julianbr sdf.org
if [ -z "$2" ] || [ -n "$3" ]; then
echo >&2 Usage ${0##*/} \(input pnm file \#1\) \(input pnm file \#2\)
echo >&2 Writes PPM to standard output containing both inputs
exit 0
fi
InputDimensions=$(pnmfile "$1")
InputDimensions=${InputDimensions#*, }
InputDimensions=${InputDimensions# }
Input1Width=${InputDimensions%% *}
InputDimensions=${InputDimensions#* }
InputDimensions=${InputDimensions# }
InputDimensions=${InputDimensions#* }
InputDimensions=${InputDimensions# }
Input1Height=${InputDimensions%% *}
InputDimensions=$(pnmfile "$2")
InputDimensions=${InputDimensions#*, }
InputDimensions=${InputDimensions# }
Input2Width=${InputDimensions%% *}
InputDimensions=${InputDimensions#* }
InputDimensions=${InputDimensions# }
InputDimensions=${InputDimensions#* }
InputDimensions=${InputDimensions# }
Input2Height=${InputDimensions%% *}
WidestInput=$Input1Width
if [ $WidestInput -lt $Input2Width ]; then
WidestInput=$Input2Width
fi
HighestInput=$Input1Height
if [ $HighestInput -lt $Input2Height ]; then
HighestInput=$Input2Height
fi
if [ $WidestInput -gt $HighestInput ]; then
OutputWidth=$(expr $WidestInput \* 32 / 27 + 2)
OutputHeight=$(expr \( $Input1Height + $Input2Height \) \* 32 / 27 + 3)
if [ $(expr $OutputWidth \* 3) -gt $(expr $OutputHeight \* 2) ]; then
OutputHeight=$(expr \( $OutputWidth + 1 \) / 2 \* 3)
OutputWidth=$(expr \( $OutputWidth + 1 \) / 2 \* 2)
else
OutputWidth=$(expr \( $OutputHeight + 2 \) / 3 \* 2)
OutputHeight=$(expr \( $OutputHeight + 2 \) / 3 \* 3)
fi
ppmmake rgb:7F/7F/7F $OutputWidth $OutputHeight \
| pnmpaste "$1" \
$(expr \( $OutputWidth - $Input1Width \) / 2) \
$(expr \( $OutputHeight - $Input1Height - $Input2Height \) \
/ 3) \
| pnmpaste "$2" \
$(expr \( $OutputWidth - $Input2Width \) / 2) \
$(expr $OutputHeight - $Input2Height \
- \( $OutputHeight - $Input1Height - $Input2Height \) \
/ 3)
else
OutputWidth=$(expr \( $Input1Width + $Input2Width \) \* 32 / 27 + 3)
OutputHeight=$(expr $HighestInput \* 32 / 27 + 2)
if [ $(expr $OutputWidth \* 2) -gt $(expr $OutputHeight \* 3) ]; then
OutputHeight=$(expr \( $OutputWidth + 2 \) / 3 \* 2)
OutputWidth=$(expr \( $OutputWidth + 2 \) / 3 \* 3)
else
OutputWidth=$(expr \( $OutputHeight + 1 \) / 2 \* 3)
OutputHeight=$(expr \( $OutputHeight + 1 \) / 2 \* 2)
fi
ppmmake rgb:7F/7F/7F $OutputWidth $OutputHeight \
| pnmpaste "$1" \
$(expr \( $OutputWidth - $Input1Width - $Input2Width \) \
/ 3) \
$(expr \( $OutputHeight - $Input1Height \) / 2) \
| pnmpaste "$2" \
$(expr $OutputWidth - $Input2Width \
- \( $OutputWidth - $Input1Width - $Input2Width \) \
/ 3) \
$(expr \( $OutputHeight - $Input2Height \) / 2)
fi
echo >&2 ${0##*/}: Writing ${OutputWidth}x${OutputHeight}