#! /bin/sh
#
# Brother Print filter
# Copyright (C) 2005-2011 Brother. Industries, Ltd.

# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2 of the License, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
# Place, Suite 330, Boston, MA  02111-1307  USA
#
# modified for voidlinux by Carlo Dormeletti carlo.dormeletti <at> email.it
# 2014/04/26 -- first version
# 2014/08/25 -- adapted to runit 
#


printer_model=""dcp197c""
cups_printer_name=`echo $printer_model | tr '[a-z]' '[A-Z]'`
device_name=`echo $cups_printer_name | eval sed -e 's/MFC/MFC-/' -e 's/DCP/DCP-/' -e 's/FAX/FAX-/'`
# pcfilename=`echo $cups_printer_name | tr -d '[A-Z]'`
device_model="Printers"
tmp_filter=/var/tmp/brlpdwrapper${printer_model}
ppd_file_name=/usr/share/ppd/cupsfilters/brother_${printer_model}_printer_en.ppd
brotherlpdwrapper=/usr/lib/cups/filter/brlpdwrapper${printer_model}


if [ "$1" = "-c" ]; then
  echo "----------  Printer  ----------"
  echo "printer_model      => " $printer_model
  echo "cups_printer_name  => " $cups_printer_name
  echo "device_name        => " $device_name
  echo "device_model       => " $device_model
  echo "--------  Filters File  --------"	
  echo "tmp_filter    => " $tmp_filter
  echo "ppd_file_name => " $ppd_file_name

  exit 0
fi



if [ "$1" = '-e' ]; then
  lpadmin -x ${cups_printer_name}
  rm -f $ppd_file_name
  rm -f $brotherlpdwrapper

  sv restart cups
  exit 0
fi

if [ "$1" = "-r" ]; then
  lpadmin -x ${cups_printer_name}

  sv restart cups
  exit 0
fi


if [ "$1" = "help" ] || [ "$1" = "-h" ]; then
  echo   'option -h : help'
  echo   '       -i : install'
  echo   '       -e : uninstall'
  echo   '       -r : remove printer'
  echo   '       -c : check variables'
  exit 0
fi

if [ -e "/opt/brother/${device_model}/${printer_model}/lpd/filter${printer_model}" ]; then
  :
else
  echo "ERROR : Brother LPD filter is not installed."
  echo "ERROR : please install it."
fi


cp "/opt/brother/${device_model}/${printer_model}/cupswrapper/brother_${printer_model}_printer_en.ppd" $ppd_file_name
chmod 644 $ppd_file_name

#
#	create temporary CUPS Filter
#

cat <<!ENDOFWFILTER! >$tmp_filter
#! /bin/sh
#
# Brother Print filter  >>
# Copyright (C) 2005-2011 Brother. Industries, Ltd.
#                                    Ver1.10

# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2 of the License, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
# Place, Suite 330, Boston, MA  02111-1307  USA
#
# modified for voidlinux by Carlo Dormeletti carlo.dormeletti <at> email.it
# modify date 201/04/26
#

LOGFILE="/dev/null"
LOGLEVEL="1"
LOGCLEVEL="7"
DEBUG=0
NUPENABLE=1
LOG_LATESTONLY=1
errorcode=0

if [ \$DEBUG != 0 ]; then
  LOGFILE=/tmp/br_cupsfilter_debug_log
fi

PPDC=\`printenv | grep "PPD="\`
PPDC=\`echo \$PPDC | sed -e 's/PPD=//'\`

if [ "\$PPDC" = "" ]; then
  PPDC=$ppd_file_name
fi


if [ \$LOGFILE != "/dev/null" ]; then
  if [ \$LOG_LATESTONLY == "1" ]; then
    rm -f \$LOGFILE
    date  >\$LOGFILE
  else
    if [ -e \$LOGFILE ]; then
	    date >>\$LOGFILE
    else
	    date >\$LOGFILE
    fi
  fi
    echo "arg0 = \$0"        >>\$LOGFILE
    echo "arg1 = \$1"        >>\$LOGFILE
    echo "arg2 = \$2"        >>\$LOGFILE
    echo "arg3 = \$3"        >>\$LOGFILE
    echo "arg4 = \$4"        >>\$LOGFILE
    echo "arg5 = \$5"        >>\$LOGFILE
    echo "arg6 = \$6"        >>\$LOGFILE
    echo "PPD  = \$PPD"      >>\$LOGFILE
fi

INPUT_TEMP_PS=\`mktemp /tmp/br_input_ps.XXXXXX\`

nup="cat"
if [ "`echo \$5 | grep 'Nup='`" != '' ] && [ \$NUPENABLE != 0 ]; then

  if   [ "`echo \$5 | grep 'Nup=64'`" != '' ]; then
    nup="psnup -64"
  elif [ "`echo \$5 | grep 'Nup=32'`" != '' ]; then
    nup="psnup -32"
  elif [ "`echo \$5 | grep 'Nup=25'`" != '' ]; then
    nup="psnup -25"
  elif [ "`echo \$5 | grep 'Nup=16'`" != '' ]; then
    nup="psnup -16"
  elif [ "`echo \$5 | grep 'Nup=8'`" != '' ]; then
    nup="psnup -8"
  elif [ "`echo \$5 | grep 'Nup=6'`" != '' ]; then
    nup="psnup -6"
  elif [ "`echo \$5 | grep 'Nup=4'`" != '' ]; then
    nup="psnup -4"
  elif [ "`echo \$5 | grep 'Nup=2'`" != '' ]; then
    nup="psnup -2"
  elif [ "`echo \$5 | grep 'Nup=1'`" != '' ]; then
    nup="cat"
  fi
  echo   "NUP=\$nup"         >>\$LOGFILE
  if [ -e /usr/bin/psnup ]; then
    if [ \$# -ge 7 ]; then
      cat \$6  | \$nup > \$INPUT_TEMP_PS
    else
      cat       | \$nup > \$INPUT_TEMP_PS
    fi
  else
    if [ \$# -ge 7 ]; then
      cp \$6  \$INPUT_TEMP_PS
    else
      cat    > \$INPUT_TEMP_PS
    fi
  fi
else
  if [ \$# -ge 7 ]; then
    cp \$6  \$INPUT_TEMP_PS
  else
    cat    > \$INPUT_TEMP_PS
  fi
fi

if [ -e "/opt/brother/${device_model}/${printer_model}/lpd/filter${printer_model}" ]; then
  :
else
  echo "ERROR: /opt/brother/${device_model}/${printer_model}/lpd/filter${printer_model} does not exist"   >>\$LOGFILE
  errorcode=30
  exit
fi

CUPSOPTION=\`echo "\$5 Copies=\$4" | sed -e 's/BrMirror=OFF/MirrorPrint=OFF/' -e 's/BrMirror=ON/MirrorPrint=ON/' -e 's/BrChain/Chain/' -e 's/BrBrightness/Brightness/' -e 's/BrContrast/Contrast/' -e 's/BrHalfCut/HalfCut/' -e 's/BrAutoTapeCut/AutoCut/' -e 's/BrHalftonePattern/Halftone/' -e 's/Binary/Binary/' -e 's/Dither/Dither/' -e 's/ErrorDiffusion/ErrorDiffusion/' -e 's/PageSize/media/' -e 's/BrSheets/Sheets/' -e 's/multiple-document-handling/Collate/' -e 's/separate-documents-collated-copies/ON/' -e 's/separate-documents-uncollated-copies/OFF/'\`

if [ -e "/opt/brother/${device_model}/${printer_model}/cupswrapper/brcupsconfpt1" ]; then
  if [ \$DEBUG = 0 ]; then
     /opt/brother/${device_model}/${printer_model}/cupswrapper/brcupsconfpt1  ${cups_printer_name}  \$PPDC 0 "\$CUPSOPTION" "${printer_model}">> /dev/null
  else
     /opt/brother/${device_model}/${printer_model}/cupswrapper/brcupsconfpt1  ${cups_printer_name}  \$PPDC \$LOGCLEVEL "\$CUPSOPTION" "${printer_model}">>\$LOGFILE
  fi
fi

if [ \$DEBUG -lt 10 ]; then
  cat    \$INPUT_TEMP_PS | /opt/brother/${device_model}/${printer_model}/lpd/filter${printer_model} "\$\$" "CUPS" "USB"

  if [ \$LOGLEVEL -gt 2 ];  then
    if [ \$LOGFILE != "/dev/null" ]; then
      echo ""                                  >>\$LOGFILE
      echo "    ------PostScript Data-------"  >>\$LOGFILE
      cat    \$INPUT_TEMP_PS                   >>\$LOGFILE
    fi
  fi
fi

rm -f  \$INPUT_TEMP_PS

exit $errorcode

!ENDOFWFILTER!

chmod 755 $tmp_filter

#
# check brotherlpdwrapper in /usr/lib/cups/filter
#

if [ -d /usr/lib/cups/filter ]; then
  rm -f  $brotherlpdwrapper
  cp $tmp_filter $brotherlpdwrapper
fi

#
#  remove temporary script file
#

rm -f  $tmp_filter

chmod a+w /opt/brother/${device_model}/${printer_model}/inf/br${printer_model}rc
chmod a+w /opt/brother/${device_model}/${printer_model}/inf

sleep 2s

sv restart cups

port2=`lpinfo -v | grep -i 'usb://Brother/${device_name}' | head -1`

if [ "$port2" = '' ];then
  port2=`lpinfo -v | grep 'usb://Brother' | head -1`
fi

if [ "$port2" = '' ];then
  port2=`lpinfo -v | grep 'usb://' | head -1`
fi

port=`echo $port2| sed s/direct//g`

if [ "$port" = '' ];then
  port=usb:/dev/usb/lp0
fi

lpadmin -p ${cups_printer_name} -E -v $port -P $ppd_file_name

exit 0

