#!/bin/sh -
umask 077

# code - convenience front-end for crypt2 file encryption command
# Steve Kinzler, steve@kinzler.com, Mar 93
# https://kinzler.com/me/home.html#unix

force=; secure=; bad=

while :
do
	case $# in
	0)	break;;
	*)	case "$1" in
		-f)	force=$1;;
		-s)	secure=$1;;
		-[kp])	shift; CODEKEY="$1";;

		--)	shift; break;;
		-h)	bad=t; break;;
		-*)	bad=t; echo "$0: unknown option ($1)" 1>&2;;
		*)	break;;
		esac
		shift;;
	esac
done

case "$#,$bad" in
0,*|*,?*)	cat << EOF 1>&2
usage: $0 [ -f ] [ -k key ] file ...
	-f	force file overwrites and directory replacements
	-k	use the given encryption key
EOF
	exit 1;;
esac

for old
do
	if test \! -f "$old" -o \! -r "$old"
	then
		echo "$0: $old is not a readable file" 1>&2
		continue
	fi

	case "$old" in
	*.x)	new=`echo "$old" | sed 's/..$//'`;;
	*)	new="$old.x";;
	esac

	if test -f "$new" -o -d "$new"
	then
		case "$force" in
		?*)	rm -r "$new"
			if test -f "$new" -o -d "$new"
			then
				echo "$0: cannot remove $new" 1>&2
				continue
			fi;;
		*)	echo "$0: $new already exists" 1>&2
			continue;;
		esac
	fi

	trap 'rm -f "$new"; exit' 1 2 13 15

	chmod 600 "$new" > "$new" &&
	echo "$old -> $new" &&
	crypt2 $secure ${CODEKEY+"$CODEKEY"} < "$old" > "$new"

	case $? in
	0)	trap 'rm -f "$old"; exit' 1 2 13 15
		rm "$old";;
	*)	rm "$new";;
	esac

	trap exit 1 2 13 15
done
