#!/bin/sh

DIR_PERMS=1777
FILE_PERMS=444
from=""
MODE=""
OP="cp"

progname="`basename $0`"
TEXMF=`kpsexpand '$TEXMF'`
default_namepart=tmp
DESTROOT=${MTPK_DESTROOT-"$TEXMF/fonts"}
NAMEMAPDIR="$TEXMF/fontmaps"

while true ; do
	case "$1" in
	  -m)   MODE=$2 ; shift ; shift ;;
	  -d)	OP=mv ; shift ;;
	  *)	break ;;
	esac
done

if [ $# = 0 ] ; then
	echo >&2
	echo "Usage: $progname [ -d ] [ -m mode ] path ..." >&2
	echo >&2
	echo "Copy tfm and pk fonts from path into the $DESTROOT hierarchy." >&2
	echo "   -m MetaFont mode for pk files" >&2
	echo "   -d delete files after copying" >&2
	exit
fi

destdir()
{

  NAME=$1 

  if [ ! -r $NAMEMAPDIR/special.map ] ; then
    echo "$progname: Could not find $NAMEMAPDIR/special.map." >&2
    echo $default_namepart
    return ;
  fi

  namepart=`awk '{if ($1 == NAME || (substr (NAME, 1, length ($1)) == $1 \
    && substr (NAME, length (NAME), 1) ~ /[0-9]/)) \
    { print $2 "/" $3; exit; }}' NAME=$NAME $NAMEMAPDIR/special.map`

  if [ -n "$namepart" ] ; then
    echo "$namepart"
    return ;
  fi

  s=`echo $NAME | cut -c 1-1`
  sourcedir=`awk '{ if ($1 == x) { print $2; exit; }}' x=$s $NAMEMAPDIR/source.map`

  if [ -z "$sourcedir" ] ; then
    echo "$progname: Could not map source abbreviation $s." >&2
    echo $default_namepart
    return ;
  fi

  t=`echo $NAME | cut -c 2-3`
  typefacedir=`awk '{ if ($1 == t) { print $2; exit; }}' t=$t $NAMEMAPDIR/typeface.map`

  if [ -z "$typefacedir" ] ; then
    echo "$progname: Could not map typeface abbreviation $t." >&2
    echo $default_namepart
    return ;
  fi

  echo $sourcedir/$typefacedir
}

for i in `find "$@" -name \*.*[0-9]pk` ; do
	test -n "$MODE" || { echo "$progname: no mode given. Skipping pk files." >&2 ; break }
	dir=`dirname $i`
	file=`basename $i`
	res=`echo $file | sed 's/.*\.//;s/pk//'`
	base=`basename $file .${res}pk`
	DESTDIR=$DESTROOT/`destdir $base`/pk/$MODE

	test -f "$DESTDIR/$file" &&
	  { echo "$DESTDIR/$file" ; continue }

	test -d $DESTDIR ||
	  (mkdir $DESTDIR && chmod $DIR_PERMS $DESTDIR) || continue

	$OP -f $i $DESTDIR/pktmp.$$ || continue

	mv -f $DESTDIR/pktmp.$$ $DESTDIR/$file || continue
	chmod $FILE_PERMS $DESTDIR/$file || continue
	echo "$DESTDIR/$file"
	append_db $DESTDIR $file
done

for i in `find "$@" -name \*.pk` ; do
	test -n "$MODE" || { echo "$progname: no mode given. Skipping pk files." >&2 ; break }
	dir=`dirname $i`
	base=`basename $i .pk`
	res=`echo $dir | sed 's/.*dpi\([0-9]*\).*$/\1/'`
	file="$base.${res}pk"
	if [ $res = $dir ] ; then
		echo "Cannot determine resolution of $i. Skipped." >&2
		continue
	fi
	DESTDIR=$DESTROOT/`destdir $base`/pk/$MODE

	test -f "$DESTDIR/$file" &&
	  { echo "$DESTDIR/$file" ; continue }

	test -d $DESTDIR ||
	  (mkdir $DESTDIR && chmod $DIR_PERMS $DESTDIR) || continue

	$OP -f $i $DESTDIR/pktmp.$$ || continue

	mv -f $DESTDIR/pktmp.$$ $DESTDIR/$file || continue
	chmod $FILE_PERMS $DESTDIR/$file || continue
	echo "$DESTDIR/$file"
	append_db $DESTDIR $file
done

for i in `find "$@" -name \*.tfm` ; do
	dir=`dirname $i`
	file=`basename $i`
	base=`basename $file .tfm`
	DESTDIR=$DESTROOT/`destdir $base`/tfm

	test -f "$DESTDIR/$file" &&
	  { echo "$DESTDIR/$file" ; continue }

	test -d $DESTDIR ||
	  (mkdir $DESTDIR && chmod $DIR_PERMS $DESTDIR) || continue

	$OP -f $i $DESTDIR/tfmtmp.$$ || continue

	mv -f $DESTDIR/tfmtmp.$$ $DESTDIR/$file || continue
	chmod $FILE_PERMS $DESTDIR/$file || continue
	echo "$DESTDIR/$file"
	append_db $DESTDIR $file
done
