#!/bin/bash
#
### BEGIN INIT INFO
# Provides:          gpm
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Should-Start:
# Should-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: gpm sysv init script
# Description:       general purpose mouse event server
### END INIT INFO
#

PIDFILE=/var/run/gpm.pid
GPM=/usr/sbin/gpm
CFG=/etc/gpm.conf

test -x $GPM || exit 0

. /lib/lsb/init-functions

if [ "$(id -u)" != "0" ]
then
  log_failure_msg "You must be root to start, stop or restart gpm."
  exit 1
fi


cmdln=
niceness=0

if [ -f $CFG ]; then
  . $CFG
  if [ -n "$device" ]; then cmdln="$cmdln -m $device"; fi
  if [ -n "$type" ]; then cmdln="$cmdln -t $type"; fi
  if [ -n "$responsiveness" ]; then cmdln="$cmdln -r $responsiveness"; fi
  if [ -n "$sample_rate" ]; then cmdln="$cmdln -s $sample_rate"; fi
  # Yes, this /IS/ correct! There is no space after -R!!!!!!
  # I reserve the right to throw manpages at anyone who disagrees.
  if [ -n "$repeat_type" ] && [ "$repeat_type" != "none" ]; then
    cmdln="$cmdln -R$repeat_type"
  fi
  if [ -n "$append" ]; then cmdln="$cmdln $append"; fi
  # If both the second device and type are specified, use it.
  if [ -n "$device2" ] && [ -n "$type2" ] ; then
    cmdln="$cmdln -M -m $device2 -t $type2"
  fi
fi

gpm_strace () {
  log_daemon_msg "Running mouse interface server under strace" "gpm"
  eval strace -T -o /root/gpm.strace $GPM -V -D -e $cmdln > /root/gpm.out 2>&1
  log_end_msg $?
  return $?
}

gpm_start () {
  log_daemon_msg "Starting mouse interface server" "gpm"
  # HACK - kernel module init is asynchronous in kernel 2.6, EVEN FROM
  # REQUEST_MODULE().  That would include 'mousedev'.  The correct
  # solution is a hotplug script, but we cannot depend on hotplug being
  # available just yet, either kernel-side or user-side.
  for foo in 1 2 3; do
    if :< ${device-/dev/mouse}; then break; fi
    sleep 1
  done
  eval start-stop-daemon --start --quiet --nicelevel $niceness --exec $GPM \
    -- $cmdln
  log_end_msg $?
  return $?
}

gpm_stop () {
  # Bail early if there was a "lean" boot parameter and no gpm running
  CMDLINE=${CMDLINE:-$(cat /proc/cmdline)}
  for param in $CMDLINE; do
    case "$param" in
      lean|antiX=*[Ll]*|aX=*[Ll]*) LEAN="true";;
    esac
  done
    
  [ "$LEAN" ] && ! ps -u root -o cmd | grep -q ^$GPM && exit 0
  log_daemon_msg "Stopping mouse interface server" "gpm"
  $GPM -k
  log_end_msg $?
  return $?
}


case "$1" in
  strace)
     gpm_strace || exit 1
     ;;
  start)
     gpm_start || exit 1
     ;;
  stop)
     gpm_stop || exit 1
     ;;
  force-reload|restart)
     gpm_stop && sleep 3
     gpm_start || exit 1
     ;;
  *)
     echo "Usage: /etc/init.d/gpm {start|stop|restart|force-reload|strace}"
     exit 1
esac

exit 0
