#!/bin/sh
#
# pstopnm -- Convert PostScript to pbmplus.
#	Nick Holloway <alfie@dcs.warwick.ac.uk>, 4th June 1993
#
# Modification A.CARANANA (07/04/95):
#     Augmentation de la taille recuperee dans le Bounding Box
#     pour eviter les erreurs d'arrondi (perte d'une partie de trace)
#       -  + 1 aux valeurs urx et ury : coint haut-droit
#       -  - 1 aux valeurs llx et lly : coint bas-gauche
#     Une unite correspond a (1/72 inch).
#


O="`basename $0`"

usage () 
{
	echo	"usage: $O [ -D dpi ] [ -t <pbm|pgm|ppm>[raw] ] [ psfile ]" >&2
	exit 1
}

dpi=75
type=pbmraw

while	[ $# -gt 0 ]
do
	case	"$1" in

	-h)	usage ;;

	-D)	[ $# -eq 1 ] && usage

		case	"$2" in

		'' | 0 | *[!0-9]* )	echo "$O: non-numeric value for dpi: \"$2\"" >&2; usage
					;;
		*)			dpi=$2 ;;
		esac
		shift 2
		;;

	-t)	[ $# -eq 1 ] && usage

		case	"$2" in

		pbm | pbmraw | pgm | pgmraw | ppm | ppmraw | png256 | png16m)

			type=$2
			;;

		*)	echo "$O: bad image type \"$2\"" >&2
			usage
			;;
		esac
		shift 2
		;;

	--)	shift
		break
		;;

	-*)	echo "$O: unknown flag: \"$1\"" >&2
		usage
		;;

	*)	break ;;
	esac
done

case	$# in

	0)	file=${TMPDIR:-/tmp}/pstoppm.$$.ps
		trap 'rm -f $file' 0 1 2 15
		cat - > $file
		;;

	1)	file="$1"
		;;

	*)	echo "$O: too many arguments" >&2
		usage
		;;
esac

if	[ ! -r "$file" ]
then
	echo	"$O: can't read \"$file\"" >&2
	exit 1
fi

set -- `sed -n '/^%%BoundingBox:/{
	s/^[^:]*://
	s/\.[0-9]+//g
	p;q
}'	"$file"`

if	[ $# -ne 4 ]
then
	echo "$O: $file: No/Incorrect bounding box" >&2
	exit
fi

llx=$1 lly=$2 urx=$3 ury=$4

#
# Modification des valeurs du coin bas gauche (llx,lly)
#
if	[ $llx != 0 ] 
then 
	llx=`expr $llx - 1`
fi
if	[ $lly != 0 ] 
then 
	lly=`expr $lly - 1`
fi
#
# Modification des valeurs du coin haut droit (urx,ury)
#
urx=`expr $urx + 1`
ury=`expr $ury + 1`

width=`expr \( $urx - $llx \) \* $dpi / 72 + 1`
height=`expr \( $ury - $lly \) \* $dpi / 72 + 1`

echo "$llx neg $lly neg translate" |
	gs	-q -DNOPAUSE -sDEVICE=${type} -sOutputFile="|cat >&3" \
		-r${dpi} -g${width}x${height} - "$file" 3>&1 1>&2 

