Blame editor/pnmindex.sh

Packit 78deda
#!/bin/sh
Packit 78deda
#
Packit 78deda
# pnmindex - build a visual index of a bunch of PNM images
Packit 78deda
#
Packit 78deda
# Copyright (C) 1991 by Jef Poskanzer.
Packit 78deda
#
Packit 78deda
# Permission to use, copy, modify, and distribute this software and its
Packit 78deda
# documentation for any purpose and without fee is hereby granted, provided
Packit 78deda
# that the above copyright notice appear in all copies and that both that
Packit 78deda
# copyright notice and this permission notice appear in supporting
Packit 78deda
# documentation.  This software is provided "as is" without express or
Packit 78deda
# implied warranty.
Packit 78deda
Packit 78deda
size=100        # make the images about this big
Packit 78deda
across=6        # show this many images per row
Packit 78deda
colors=256      # quantize results to this many colors
Packit 78deda
back="-white"   # default background color
Packit 78deda
doquant=true    # quantize or not
Packit 78deda
title=""        # default title (none)
Packit 78deda
Packit 78deda
usage ()
Packit 78deda
{
Packit 78deda
  echo "usage: $0 [-size N] [-across N] [-colors N] [-black] pnmfile ..."
Packit 78deda
  exit 1
Packit 78deda
}
Packit 78deda
Packit 78deda
while :; do
Packit 78deda
    case "$1" in
Packit 78deda
Packit 78deda
    -s*)
Packit 78deda
        if [ $# -lt 2 ]; then usage; fi
Packit 78deda
        size="$2"
Packit 78deda
        shift
Packit 78deda
        shift
Packit 78deda
    ;;
Packit 78deda
Packit 78deda
    -a*)
Packit 78deda
        if [ $# -lt 2 ]; then usage; fi
Packit 78deda
        across="$2"
Packit 78deda
        shift
Packit 78deda
        shift
Packit 78deda
    ;;
Packit 78deda
Packit 78deda
    -t*)
Packit 78deda
        if [ $# -lt 2 ]; then usage; fi
Packit 78deda
        title="$2"
Packit 78deda
        shift
Packit 78deda
        shift
Packit 78deda
    ;;
Packit 78deda
Packit 78deda
    -c*)
Packit 78deda
        if [ $# -lt 2 ]; then usage; fi
Packit 78deda
        colors="$2"
Packit 78deda
        shift
Packit 78deda
        shift
Packit 78deda
    ;;
Packit 78deda
Packit 78deda
    -b*)
Packit 78deda
        back="-black"
Packit 78deda
        shift
Packit 78deda
    ;;
Packit 78deda
Packit 78deda
    -w*)
Packit 78deda
        back="-white"
Packit 78deda
        shift
Packit 78deda
    ;;
Packit 78deda
Packit 78deda
    -noq*)
Packit 78deda
        doquant=false
Packit 78deda
        shift
Packit 78deda
    ;;
Packit 78deda
Packit 78deda
    -q*)
Packit 78deda
        doquant=true
Packit 78deda
        shift
Packit 78deda
    ;;
Packit 78deda
Packit 78deda
    -*)
Packit 78deda
        usage
Packit 78deda
    ;;
Packit 78deda
Packit 78deda
    *)
Packit 78deda
        break
Packit 78deda
    ;;
Packit 78deda
    esac
Packit 78deda
done
Packit 78deda
Packit 78deda
if [ $# -eq 0 ]; then
Packit 78deda
    usage
Packit 78deda
fi
Packit 78deda
Packit 78deda
tempdir="${TMPDIR-/tmp}/pnmindex.$$"
Packit 78deda
mkdir -m 0700 $tempdir || \
Packit 78deda
  { echo "Could not create temporary file. Exiting."; exit 1;}
Packit 78deda
trap 'rm -rf $tempdir' 0 1 3 15
Packit 78deda
Packit 78deda
tmpfile=$tempdir/pi.tmp
Packit 78deda
maxformat=PBM
Packit 78deda
Packit 78deda
rowfiles=()
Packit 78deda
imagefiles=()
Packit 78deda
row=1
Packit 78deda
col=1
Packit 78deda
Packit 78deda
if [ "$title"x != ""x ] ; then
Packit 78deda
#    rowfile=`tempfile -p pirow -m 600`
Packit 78deda
    rowfile=$tempdir/pi.${row}
Packit 78deda
    pbmtext "$title" > $rowfile
Packit 78deda
    rowfiles=(${rowfiles[*]} $rowfile )
Packit 78deda
    row=$(($row + 1))
Packit 78deda
fi
Packit 78deda
Packit 78deda
for i in "$@"; do
Packit 78deda
Packit 78deda
    description=(`pnmfile $i`)
Packit 78deda
Packit 78deda
    format=${description[1]}
Packit 78deda
    width=${description[3]}
Packit 78deda
    height=${description[5]}
Packit 78deda
Packit 78deda
    if [ $? -ne 0 ]; then
Packit 78deda
        echo pnmfile returned an error
Packit 78deda
        exit $?
Packit 78deda
    fi
Packit 78deda
Packit 78deda
    if [ $width -le $size ] && \
Packit 78deda
       [ $height -le $size ]; then
Packit 78deda
        cat $i > $tmpfile
Packit 78deda
    else
Packit 78deda
        case $format in
Packit 78deda
Packit 78deda
        PBM) 
Packit 78deda
            pamscale -quiet -xysize $size $size $i | pgmtopbm > $tmpfile
Packit 78deda
        ;;
Packit 78deda
Packit 78deda
        PGM)
Packit 78deda
            pamscale -quiet -xysize $size $size $i > $tmpfile
Packit 78deda
            if [ $maxformat = PBM ]; then
Packit 78deda
                maxformat=PGM
Packit 78deda
            fi
Packit 78deda
        ;;
Packit 78deda
Packit 78deda
        *) 
Packit 78deda
            if [ "$doquant" = "true" ] ; then
Packit 78deda
                pamscale -quiet -xysize $size $size $i | \
Packit 78deda
                pnmquant -quiet $colors > $tmpfile
Packit 78deda
            else
Packit 78deda
                pamscale -quiet -xysize $size $size $i > $tmpfile
Packit 78deda
            fi
Packit 78deda
            maxformat=PPM
Packit 78deda
        ;;
Packit 78deda
        esac
Packit 78deda
    fi
Packit 78deda
Packit 78deda
    imagefile=$tempdir/pi.${row}.${col}
Packit 78deda
    rm -f $imagefile
Packit 78deda
    if [ "$back" = "-white" ]; then
Packit 78deda
        pbmtext "$i" | pnmcat $back -tb $tmpfile - > $imagefile
Packit 78deda
    else
Packit 78deda
        pbmtext "$i" | pnminvert | pnmcat $back -tb $tmpfile - > $imagefile
Packit 78deda
    fi
Packit 78deda
    imagefiles=( ${imagefiles[*]} $imagefile )
Packit 78deda
Packit 78deda
    if [ $col -ge $across ]; then
Packit 78deda
        rowfile=$tempdir/pi.${row}
Packit 78deda
        rm -f $rowfile
Packit 78deda
Packit 78deda
        if [ $maxformat != PPM -o "$doquant" = "false" ]; then
Packit 78deda
            pnmcat $back -lr -jbottom ${imagefiles[*]} > $rowfile
Packit 78deda
        else
Packit 78deda
            pnmcat $back -lr -jbottom ${imagefiles[*]} | \
Packit 78deda
            pnmquant -quiet $colors > $rowfile
Packit 78deda
        fi
Packit 78deda
Packit 78deda
        rm -f ${imagefiles[*]}
Packit 78deda
        unset imagefiles
Packit 78deda
        imagefiles=()
Packit 78deda
        rowfiles=( ${rowfiles[*]} $rowfile )
Packit 78deda
        col=1
Packit 78deda
        row=$(($row + 1))
Packit 78deda
    else
Packit 78deda
        col=$(($col + 1))
Packit 78deda
    fi
Packit 78deda
done
Packit 78deda
Packit 78deda
# All the full rows have been put in row files.  
Packit 78deda
# Now put the final partial row in its row file.
Packit 78deda
Packit 78deda
if [ ${#imagefiles[*]} -gt 0 ]; then
Packit 78deda
    rowfile=$tempdir/pi.${row}
Packit 78deda
    rm -f $rowfile
Packit 78deda
    if [ $maxformat != PPM -o "$doquant" = "false" ]; then
Packit 78deda
        pnmcat $back -lr -jbottom ${imagefiles[*]} > $rowfile
Packit 78deda
    else
Packit 78deda
        pnmcat $back -lr -jbottom ${imagefiles[*]} | \
Packit 78deda
        pnmquant -quiet $colors > $rowfile
Packit 78deda
    fi
Packit 78deda
    rm -f ${imagefiles[*]}
Packit 78deda
    rowfiles=( ${rowfiles[*]} $rowfile )
Packit 78deda
fi
Packit 78deda
Packit 78deda
if [ ${#rowfiles[*]} -eq 1 ]; then
Packit 78deda
    cat $rowfiles
Packit 78deda
else
Packit 78deda
    if [ $maxformat != PPM -o "$doquant" = "false" ]; then
Packit 78deda
        pnmcat $back -tb ${rowfiles[*]}
Packit 78deda
    else
Packit 78deda
        pnmcat $back -tb ${rowfiles[*]} | pnmquant -quiet $colors
Packit 78deda
    fi
Packit 78deda
fi
Packit 78deda
rm -f ${rowfiles[*]}
Packit 78deda
Packit 78deda
exit 0
Packit 78deda