#! /bin/sh
#
#  lprint
#
# Script pro tisk na lokalni tiskarnu terminalovym emulatorem ArcTel
# verze 4.10 / 3.60 / 2.60, rev 960819
#
# (C) FBL Group, 1992 - 1999
# Firma FBL Vam dava plne opravneni tento program menit, volne sirit
# nebo pouzit jako soucast jineho programu za techto predpokladu:
#   - zustane zachovano oznaceni autorskych prav (copyright)
#   - zustane zachovan tento text
#   - tento ci odvozeny program nebude komercne siren
#     (t.j. prodavan za ucelem dosazeni zisku)
#
usage() {
  echo "Pouziti: $0 [-n] [-a] [-b] [-m mode] [-p] [-v] soubor [soubor...]"
  echo "  n....cislo kanalu"
  echo "  -a...tisk s konverzi NL na CR LF"
  echo "  -b...binarni tisk"
  echo "  -m mode...rezim tisku (condens ...)"
  echo "  -p...prechod na novou stranku za souborem"
  echo "  -v...viditelne, tisk jde zaroven na terminal"
  echo "Tisk standardniho vstupu uvedete parametrem - misto jmena souboru."
}

if [ -z "$1" ]; then
  usage
  exit 1
fi

# definice prikazu echo

# priklad 1.
# echo potrebuje \c na konci pro potlaceni noveho radku
echo="echo"
nnl="\c"

# priklad 2. (linux)
# echo potlaci novy radek po parametru -n, interpretuje \ znaky po -e
#echo="echo -en"
#nnl=""

# priklad 3. (SCO)
# echo potlaci novy radek po parametru -n, interpretuje \ znaky po -e
#echo="echo -n"
#nnl=""

# definice ridicich sekvenci tiskarny

esc="\033"
ff="\014"

standard="\022${nnl}"
condens="\017${nnl}"


chan=
vis="5"
autoprn=
page=
ttyst=
endsq=
outdev="/dev/tty"
mode=
parmode=

startprint () {
  if [ -z "$endsq" ]; then
    $echo "${esc}[${autoprn}${vis}${chan}i${nnl}" >> $outdev
    endsq="${esc}[${autoprn}4i${nnl}"
  fi
  
  if [ -n "$mode" ]; then
    eval $echo '$'$mode >> $outdev
  fi
}

endprint() {
  if [ -n "$mode" ]; then
    $echo "$standard" >> $outdev
  fi
  if [ -n "$endsq" ]; then
    $echo "$endsq" >> $outdev
  fi
  if [ -n "$ttyst" ]; then
    # sem vlozte pripadne obnoveni mapovani kanalu prikazem mapchan
    stty "$ttyst" < /dev/tty 2>&-
  fi
}

trap endprint 1
trap endprint 2
trap endprint 15

for par
do
  if [ -n "$parmode" ]; then

    parmode=
    mode="$par"

  else
  
    case "$par" in
      -[?] ) endprint; usage; exit 1;;
      -1 ) chan=";1";;
      -2 ) chan=";2";;
      -3 ) chan=";3";;

      -a ) if [ -z "$ttyst" ]; then
             ttyst=`stty -g < /dev/tty`
           fi
           stty opost -olcuc onlcr -ocrnl -onocr -onlret -ofill < /dev/tty;;

      -b ) if [ -z "$ttyst" ]; then
             ttyst=`stty -g < /dev/tty`
           fi
           # sem vlozte pripadne zruseni mapovani kanalu prikazem mapchan
           stty -opost < /dev/tty;;

      -m ) parmode="$par";;
      -p ) page="${ff}${nnl}"; page_only=1;;
      -v ) if [ "$TERM" = ansi ]; then
             vis="6"
           else
             autoprn='?'
           fi;;

      * )  if [ "$par" = "-" -o -r "$par" ]; then
             startprint
             cat "$par" >> $outdev
             if [ -n "$page" ]; then
               $echo "$page" >> $outdev
               page_only=
             fi
           else
             endprint
             echo "Nemohu cist soubor $par!" >&2
             exit 2
           fi;;

    esac
  fi
done

if [ -n "$page_only" ]; then
  startprint
  $echo "$page" >> $outdev
fi

endprint
