#!/bin/sh
#
# talkwith -- switches speakup synthesizers on the fly
#
# Copyright (c) 2009 by the Speakup Team
# Copyright (c) 2008, 2009 by Charles Hallenbeck
#
# 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, see .
#
# Requirements: Linux speakup 3.1.0 or later
#
# To install, copy this script to a directory on the execution path
# e.g. /usr/sbin, or /usr/local/sbin.
# This script should be run as root.
# be sure we are root
if [ $(id -ru) -gt "0" ]; then
echo "$(basename $0) must be run as root."
exit
fi
# Define some variables
SPEAKUPDIR="/sys/accessibility/speakup"
# make sure speakup is loaded
if [ ! -d $SPEAKUPDIR ]; then
echo "Speakup does not seem to be installed."
exit
fi
# Check the command line for options
if [ "$1" = "" ]; then
echo
echo "Usage: $(basename $0) [options]"
echo
echo "synth - any synthesizer supported by speakup"
echo
echo "daemon - for the 'soft' synthesizer, this should be either"
echo "spd for speechd-up, or espeakup to run espeakup."
echo "For the other synthesizers, this is ignored."
echo
echo "options - for a software synthesizer, the rest of the command line"
echo "is passed on to the daemon; otherwise it is ignored."
echo
echo "Talkwith does not install or remove modules, so make sure any"
echo "required driver modules are installed or built into the kernel"
echo "before running talkwith."
echo
exit
fi
NEWMOD=$1
shift
# for backward compatibility
if [ "$NEWMOD" = "spd" -o "$NEWMOD" = "espeakup" ]; then
DAEMON=$NEWMOD
NEWMOD=soft
fi
if [ "$NEWMOD" = "soft" ]; then
if which espeakup > /dev/null 2>&1 ; then
HAVE_ESPEAKUP=1
fi
if which speechd-up > /dev/null 2>&1 ; then
HAVE_SPD=1
fi
if [ -z "$HAVE_ESPEAKUP" -a -z "$HAVE_SPD" ]; then
echo "no software speech synthesizers are installed."
exit
fi
if [ -z "$DAEMON" ]; then
DAEMON=$1
shift
fi
if [ -z "$DAEMON" -a ! -z "$HAVE_ESPEAKUP" ]; then
DAEMON="espeakup"
elif [ -z "$DAEMON" -a ! -z "$HAVE_SPD" ]; then
DAEMON="spd"
fi
if [ "$DAEMON" = "espeakup" -a -z "$HAVE_ESPEAKUP" ]; then
echo "espeakup does not appear to be available."
exit
elif [ "$DAEMON" = "spd" -a -z "$HAVE_SPD" ]; then
echo "speechd-up does not appear to be available."
exit
fi
fi
OLDMOD="$(cat $SPEAKUPDIR/synth)"
echo "$NEWMOD" > $SPEAKUPDIR/synth 2> /dev/null
if [ $? != 0 ]; then
echo "Unable to switch to the $NEWMOD synthesizer."
echo "This means that the driver is not built in, the module"
echo "is not loaded, or $NEWMOD is not a valid synthesizer."
exit 1
fi
if [ "$OLDMOD" = "soft" ]; then
if [ -f /var/run/espeakup.pid ]; then
kill $(cat /var/run/espeakup.pid) 2> /dev/null
if [ -f /var/run/espeakup.pid ]; then
rm -f /var/run/espeakup.pid
fi
fi
if [ -f /var/run/speechd-up.pid ]; then
kill $(cat /var/run/speechd-up.pid) 2> /dev/null
if [ -f /var/run/speechd-up.pid ]; then
rm -f /var/run/speechd-up.pid
fi
fi
sleep 2
fi
if [ "$NEWMOD" = "none" ]; then
exit
elif [ "$NEWMOD" = "soft" ]; then
if [ "$DAEMON" = "espeakup" ]; then
espeakup $*
elif [ "$DAEMON" = "spd" ]; then
nice -n 5 speechd-up $*
fi
fi