#!/bin/sh
#
# Builds one or more font width tables or the typesetter description
# file on a PostScript printer. Assumes you have direct access to the
# printer's serial port. No arguments means build a standard collection
# of tables - usually the LaserWriter Plus set. See trofftable and the
# shell library files /usr/lib/font/dev*/shell.lib for more details.
#

set -e

POSTBIN=/usr/lbin/postscript
POSTLIB=/usr/lib/postscript
FONTDIR=/usr/lib/font

POSTIO=$POSTBIN/postio
TROFFTABLE=$POSTBIN/trofftable

BAUDRATE=
DEVICE=
LIBRARY=

while [ -n "$1" ]; do
    case $1 in
	-C)  shift; OPTIONS="$OPTIONS -C$1";;
	-C*) OPTIONS="$OPTIONS $1";;

	-F)  shift; FONTDIR=$1;;
	-F*) FONTDIR=`echo $1 | sed s/-F//`;;

	-H)  shift; OPTIONS="$OPTIONS -H$1";;
	-H*) OPTIONS="$OPTIONS $1";;

	-S)  shift; LIBRARY=$1;;
	-S*) LIBRARY=`echo $1 | sed s/-S//`;;

	-T)  shift; DEVICE=$1;;
	-T*) DEVICE=`echo $1 | sed s/-T//`;;

	-b)  shift; BAUDRATE=$1;;
	-b*) BAUDRATE=`echo $1 | sed s/-b//`;;

	-c)  shift; OPTIONS="$OPTIONS -c$1";;
	-c*) OPTIONS="$OPTIONS $1";;

	-l)  shift; LINE=$1;;
	-l*) LINE=`echo $1 | sed s/-l//`;;

	-s)  shift; OPTIONS="$OPTIONS -s$1";;
	-s*) OPTIONS="$OPTIONS $1";;

	-t)  shift; OPTIONS="$OPTIONS -t$1";;
	-t*) OPTIONS="$OPTIONS $1";;

	-?)  OPTIONS="$OPTIONS $1$2"; shift;;
	-?*) OPTIONS="$OPTIONS $1";;

	*)   break;;
    esac
    shift
done

if [ ! "$DEVICE" -a ! "$LIBRARY" ]; then
    echo "$0: no device or shell library" >&2
    exit 1
fi

LIBRARY=${LIBRARY:-${FONTDIR}/dev${DEVICE}/shell.lib}

#
# No arguments means build everything return by the AllTables function.
#

if [ $# -eq 0 ]; then
    . $LIBRARY
    set -- `AllTables`
fi

for i do
    SHORT=`echo $i | awk '{print $1}'`
    LONG=`echo $i | awk '{print $2}'`

    if [ "$LINE" ]
	then echo "==== Building table $SHORT ===="
	else echo "==== Creating table program $SHORT.ps ===="
    fi

    $TROFFTABLE -S$LIBRARY $OPTIONS $SHORT $LONG >$SHORT.ps

    if [ "$LINE" ]; then
	$POSTIO -t -l$LINE ${BAUDRATE:+-b${BAUDRATE}} $SHORT.ps >$SHORT
	rm -f $SHORT.ps
    fi
done

