menu "Speakup console speech"

config SPEAKUP
	depends on VT
	tristate "Speakup core"
	---help---
		This is the Speakup screen reader.  Think of it as a
		video console for blind people.  If built in to the
		kernel, it can speak everything on the text console from
		boot up to shutdown.  For more information on Speakup,
		point your browser at <http://www.linux-speakup.org/>.
		There is also a mailing list at the above url that you
		can subscribe to.

		Supported synthesizers are accent sa, accent pc,
		appollo II., Auddapter, Braille 'n Speak, Dectalk
		external (old), Dectalk PC (full length isa board),
		Dectalk express, Doubletalk, Doubletalk LT or
		Litetalk, Keynote Gold internal PC, software
		synthesizers, Speakout, transport, and a dummy module
		that can be used with a plain text terminal.

		Speakup can either be built in or compiled as a module
		by answering y or m.  If you answer y here, then you
		must answer either y or m to at least one of the
		synthesizer drivers below.  If you answer m here, then
		the synthesizer drivers below can only be built as
		modules.

		These drivers are not standalone drivers, but must be
		used in conjunction with Speakup.  Think of them as
		video cards for blind people.


		The Dectalk pc driver can only be built as a module, and
		requires software to be pre-loaded on to the card before
		the module can be loaded.  See the decpc choice below
		for more details.

		If you are not a blind person, or don't have access to
		one of the listed synthesizers, you should say n.

if SPEAKUP
config SPEAKUP_SYNTH_ACNTSA
	tristate "Accent SA synthesizer support"
	---help---
		This is the Speakup driver for the Accent SA
		synthesizer.  You can say y to build it into the kernel,
		or m to build it as a module.  See the configuration
		help on the Speakup choice above for more info.

config SPEAKUP_SYNTH_ACNTPC
	tristate "Accent PC synthesizer support"
	---help---
		This is the Speakup driver for the accent pc
		synthesizer.  You can say y to build it into the kernel,
		or m to build it as a module.  See the configuration
		help on the Speakup choice above for more info.

config SPEAKUP_SYNTH_APOLLO
	tristate "Apollo II synthesizer support"
	---help---
		This is the Speakup driver for the Apollo II
		synthesizer.  You can say y to build it into the kernel,
		or m to build it as a module.  See the configuration
		help on the Speakup choice above for more info.

config SPEAKUP_SYNTH_AUDPTR
	tristate "Audapter synthesizer support"
	---help---
		This is the Speakup driver for the Audapter synthesizer.
		 You can say y to build it into the kernel, or m to
		build it as a module.  See the configuration help on the
		Speakup choice above for more info.

config SPEAKUP_SYNTH_BNS
	tristate "Braille 'n' Speak synthesizer support"
	---help---
		This is the Speakup driver for the Braille 'n' Speak
		synthesizer.  You can say y to build it into the kernel,
		or m to build it as a module.  See the configuration
		help on the Speakup choice above for more info.

config SPEAKUP_SYNTH_DECTLK
	tristate "DECtalk Express synthesizer support"
	---help---

		This is the Speakup driver for the DecTalk Express
		synthesizer.  You can say y to build it into the kernel,
		or m to build it as a module.  See the configuration
		help on the Speakup choice above for more info.

config SPEAKUP_SYNTH_DECEXT
	tristate "DECtalk External (old) synthesizer support"
	---help---

		This is the Speakup driver for the DecTalk External
		(old) synthesizer.  You can say y to build it into the
		kernel, or m to build it as a module.  See the
		configuration help on the Speakup choice above for more
		info.

config SPEAKUP_SYNTH_DECPC
	depends on m
	tristate "DECtalk PC (big ISA card) synthesizer support"
	---help---

		This is the Speakup driver for the DecTalk PC (full
		length ISA) synthesizer.  You can say m to build it as
		a module.  See the configuration help on the Speakup
		choice above for more info.

		In order to use the DecTalk PC driver, you must download
		the dec_pc.tgz file from linux-speakup.org.  It is in
		the pub/linux/goodies directory.  The dec_pc.tgz file
		contains the software which must be pre-loaded on to the
		DecTalk PC board in order to use it with this driver.
		This driver must be built as a module, and can not be
		loaded until the file system is mounted and the DecTalk
		PC software has been pre-loaded on to the board.

		See the README file in the dec_pc.tgz file for more
		details.

config SPEAKUP_SYNTH_DTLK
	tristate "DoubleTalk PC synthesizer support"
	---help---

		This is the Speakup driver for the internal DoubleTalk
		PC synthesizer.  You can say y to build it into the
		kernel, or m to build it as a module.  See the
		configuration help on the Speakup choice above for more
		info.

config SPEAKUP_SYNTH_KEYPC
	tristate "Keynote Gold PC synthesizer support"
	---help---

		This is the Speakup driver for the Keynote Gold
		PC synthesizer.  You can say y to build it into the
		kernel, or m to build it as a module.  See the
		configuration help on the Speakup choice above for more
		info.

config SPEAKUP_SYNTH_LTLK
	tristate "DoubleTalk LT/LiteTalk synthesizer support"
---help---

		This is the Speakup driver for the LiteTalk/DoubleTalk
		LT synthesizer.  You can say y to build it into the
		kernel, or m to build it as a module.  See the
		configuration help on the Speakup choice above for more
		info.

config SPEAKUP_SYNTH_SOFT
	tristate "Userspace software synthesizer support"
	---help---

		This is the software synthesizer device node.  It will
		register a device /dev/softsynth which midware programs
		and speech daemons may open and read to provide kernel
		output to software synths such as espeak, festival,
		flite and so forth.  You can select 'y' or 'm' to have
		it built-in to the kernel or loaded as a module.

config SPEAKUP_SYNTH_SPKOUT
	tristate "Speak Out synthesizer support"
	---help---

		This is the Speakup driver for the Speakout synthesizer.
		 You can say y to build it into the kernel, or m to
		build it as a module.  See the configuration help on the
		Speakup choice above for more info.

config SPEAKUP_SYNTH_TXPRT
	tristate "Transport synthesizer support"
	---help---

		This is the Speakup driver for the Transport
		synthesizer.  You can say y to build it into the kernel,
		or m to build it as a module.  See the configuration
		help on the Speakup choice above for more info.

config SPEAKUP_SYNTH_DUMMY
	tristate "Dummy synthesizer driver (for testing)"
	---help---

		This is a dummy Speakup driver for plugging a mere serial
		terminal.  This is handy if you want to test speakup but
		don't have the hardware.  You can say y to build it into
		the kernel, or m to build it as a module.  See the
		configuration help on the Speakup choice above for more info.

endif	# SPEAKUP
endmenu
