#! /bin/sh

[ -z $PRINTER_DEV ] && PRINTER_DEV=/dev/ttyS1

case "$1" in
  testpage)

  case "$2" in
    true|false)
      ;;
    *)
    echo "Usage: $0 testpage {true|false}"
    exit 1
    ;;
  esac

  echo "serverdict begin 0 exitserver" > $PRINTER_DEV
  echo "statusdict begin $2 setdostartpage" > $PRINTER_DEV

  ;;

  setname)

  if [ "$2" = "" ] ; then
    echo "Usage: $0 setname \"printer name\""
    exit 1
  fi

  echo $2 | grep '[@:]' &&
  {
    echo "$0: \"@\" and \":\" are not allowed in the printer name"
    exit 1;
  }

  echo "serverdict begin 0 exitserver" > $PRINTER_DEV
  echo "statusdict begin ($2) setprintername" > $PRINTER_DEV

  ;;

  setserial)
    if [ "$#" != "3" ]; then

cat <<EOF
Usage: $0 setserial options baud

baud:  300 600 1200 2400 3600 4800 9600 19200 38400 57600
options:  bitfield, sum of one from each category:

7 bits (32)
8 bits (64)

1 stop bit (0)
2 stop bits (128)

No parity (space) (0)
Odd (1)
Even (2)
No parity (Mark) (3)

Handshaking:
XON/XOFF (0)
DSR/DTR (4)
ETX/ACK (8)

EOF
      exit 1
    fi

cat <<EOSS > $PRINTER_DEV
statusdict begin 25 sccbatch exch pop
$2 eq {stop} if
serverdict begin 0 exitserver
statusdict begin 25 $3 $2 setsccbatch
EOSS

  ;;

  printserial)

cat << EOPS > $PRINTER_DEV
/Helvetica findfont 14 scalefont setfont
/cr{show 182 currentpoint 20 sub exch pop moveto}def
/tb{show 300 currentpoint exch pop moveto}def
/Which{5 -1 roll 4 exch sub -1 roll cr
3{pop}repeat}def
statusdict begin 25 sccbatch end 182 650 moveto
exch (Baud :)tb 10 string cvs cr
(Parity:)tb dup 30 bitshift -30 bitshift
(none-space)(odd)(even)(none-mark)  Which
(Handshake:)tb dup 27 bitshift -29 bitshift
(XON/XOFF)(DSR/DTR)(ETX/ACK)(bad value)  Which
(Data bits:)tb dup 25 bitshift -30 bitshift
(standard)(7)(8)(bad value)  Which
(Stop bits:)tb -7 bitshift 0 eq{(1)}{(2)}ifelse
show showpage
EOPS

  ;;

  *)
  echo "Usage: $0 {testpage|setname|setserial|printserial}"
  exit 1
  ;;

esac
