shithub: riscv

ref: 8a4a2dea70aa77475a50968f4c5bd6cdab5d2fb1
dir: /sys/src/cmd/postscript/trofftable/trofftable.rc/

View raw version
#!/bin/rc
# Writes a PostScript program on standard output that builds a width
# table or typesetter description file. The program uses PostScript's
# print procedure, which means the table comes back on the printer's
# serial port. Try hardcopy if you don't have access to the port.
#

rfork e

POSTLIB=/sys/lib/postscript/prologues
FONTDIR=/sys/lib/troff/font

PROLOGUE=$POSTLIB/trofftable.ps
DPOSTPROLOGUE=$POSTLIB/dpost.ps

COPYFILE=()
HOSTFONTDIR=()
DEVICE=()
LIBRARY=()
TEMPLATE=R

SLOWDOWN=25
STARTCOMMENTS=256

NONCONFORMING='%!PS'
ENDPROLOG='%%EndProlog'
BEGINSETUP='%%BeginSetup'
ENDSETUP='%%EndSetup'
TRAILER='%%Trailer'

while (! ~ $#* 0 && ~ $1 -*) {
	switch ($1) {
	case -C;  shift; COPYFILE=($COPYFILE $1)
	case -C*; COPYFILE=($COPYFILE `{echo $1 | sed s/-C//})

	case -F;  shift; FONTDIR=$1
	case -F*; FONTDIR=`{echo $1 | sed s/-F//}

	case -H;  shift; HOSTFONTDIR=$1
	case -H*; HOSTFONTDIR=`{echo $1 | sed s/-H//}

	case -L;  shift; PROLOGUE=$1
	case -L*; PROLOGUE=`{echo $1 | sed s/-L//}

	case -S;  shift; LIBRARY=$1
	case -S*; LIBRARY=`{echo $1 | sed s/-S//}

	case -T;  shift; DEVICE=$1
	case -T*; DEVICE=`{echo $1 | sed s/-T//}

	case -c;  shift; STARTCOMMENTS=$1
	case -c*; STARTCOMMENTS=`{echo $1 | sed s/-c//}

	case -o;  shift; OCTALESCAPES=$1		# only for Latin1 tables
	case -o*; OCTALESCAPES=`{echo $1 | sed s/-o//}

	case -s;  shift; SLOWDOWN=$1
	case -s*; SLOWDOWN=`{echo $1 | sed s/-s//}

	case -t;  shift; TEMPLATE=$1
	case -t*; TEMPLATE=`{echo $1 | sed s/-t//}

	case -*;  echo $0: illegal option $1 >[1=2]; exit 1
	}
	shift
}

if (~ $#DEVICE 0  && ~ $#LIBRARY 0) {
    echo $0: no device or shell library >[1=2]
    exit 1
}

if (! ~ $#* 1 2) {
    echo $0: bad argument count >[1=2]
    exit 1
}

if (! ~ $#HOSTFONTDIR 0 && test -d $HOSTFONTDIR -a -f $HOSTFONTDIR/$1) {
    COPYFILE=($COPYFILE $HOSTFONTDIR/$1)
}

#
# Include the shell library and get the command used to build the table.
# Make awk call a separate library function??
#
if (~ $#LIBRARY 0) LIBRARY=$FONTDIR/dev$DEVICE/shell.lib

. $LIBRARY

if (~ $#* 1) TEMPLATE=$1

if (~ $#* 2) pname=$2
if not pname=''

CMD=`{BuiltinTables | awk '$2 == template"" {
	if ( pname == "" )
		pname = $3
	printf "%s %s %s", $1, tname, pname
	exit 0
}' 'template='$TEMPLATE 'tname='$1 'pname='$pname}

if (~ $#CMD 0) {
    echo $0: $TEMPLATE not found >[1=2]
    exit 1
}

#
# Build the PostScript font table program.
#

echo $NONCONFORMING
cat $PROLOGUE
echo /DpostPrologue 100 dict dup begin
cat $DPOSTPROLOGUE
echo end def
echo $ENDPROLOG

echo $BEGINSETUP
if (! ~ $#COPYFILE 0)
	cat $COPYFILE
echo /slowdown $SLOWDOWN def
echo /startcomments $STARTCOMMENTS def
echo $ENDSETUP

$CMD

echo $TRAILER