
The Speakup User's Guide
For Speakup 3.1.2 and Later
By Gene Collins
Updated by others
Last modified on Mon Sep 27 14:26:31 2010
Document version 1.3

Copyright (c) 2005  Gene Collins
Copyright (c) 2008  Samuel Thibault
Copyright (c) 2009, 2010  the Speakup Team

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no
Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
copy of the license is included in the section entitled "GNU Free
Documentation License".

Preface

The purpose of this document is to familiarize users with the user
interface to Speakup, a Linux Screen Reader.  If you need instructions
for installing or obtaining Speakup, visit the web site at
http://linux-speakup.org/.  Speakup is a set of patches to the standard
Linux kernel source tree.  It can be built as a series of modules, or as
a part of a monolithic kernel.  These details are beyond the scope of
this manual, but the user may need to be aware of the module
capabilities, depending on how your system administrator has installed
Speakup.  If Speakup is built as a part of a monolithic kernel, and the
user is using a hardware synthesizer, then Speakup will be able to
provide speech access from the time the kernel is loaded, until the time
the system is shutdown.  This means that if you have obtained Linux
installation media for a distribution which includes Speakup as a part
of its kernel, you will be able, as a blind person, to install Linux
with speech access unaided by a sighted person.  Again, these details
are beyond the scope of this manual, but the user should be aware of
them.  See the web site mentioned above for further details.

1.  Starting Speakup

If your system administrator has installed Speakup to work with your
specific synthesizer by default, then all you need to do to use Speakup
is to boot your system, and Speakup should come up talking.  This
assumes of course  that your synthesizer is a supported hardware
synthesizer, and that it is either installed in or connected to your
system, and is if necessary powered on.

It is possible, however, that Speakup may have been compiled into the
kernel with no default synthesizer.  It is even possible that your
kernel has been compiled with support for some of the supported
synthesizers and not others.  If you find that this is the case, and
your synthesizer is supported but not available, complain to the person
who compiled and installed your kernel.  Or better yet, go to the web
site, and learn how to patch Speakup into your own kernel source, and
build and install your own kernel.

If your kernel has been compiled with Speakup, and has no default
synthesizer set, or you would like to use a different synthesizer than
the default one, then you may issue the following command at the boot
prompt of your boot loader.

linux speakup.synth=ltlk

This command would tell Speakup to look for and use a LiteTalk or
DoubleTalk LT at boot up.  You may replace the ltlk synthesizer keyword
with the keyword for whatever synthesizer you wish to use.  The
speakup.synth parameter will accept the following keywords, provided
that support for the related synthesizers has been built into the
kernel.

acntsa -- Accent SA
acntpc -- Accent PC
apollo -- Apollo
audptr -- Audapter
bns -- Braille 'n Speak
dectlk -- DecTalk Express (old and new, db9 serial only)
decext -- DecTalk (old) External
dtlk -- DoubleTalk PC
keypc -- Keynote Gold PC
ltlk -- DoubleTalk LT, LiteTalk, or external Tripletalk (db9 serial only)
spkout -- Speak Out
txprt -- Transport
dummy -- Plain text terminal

Note: Speakup does * NOT * support usb connections!  Speakup also does *
NOT * support the internal Tripletalk!

Speakup does support two other synthesizers, but because they work in
conjunction with other software, they must be loaded as modules after
their related software is loaded, and so are not available at boot up.
These are as follows:

decpc -- DecTalk PC (not available at boot up)
soft -- One of several software synthesizers (not available at boot up)

See the sections on loading modules and software synthesizers later in
this manual for further details.  It should be noted here that the
speakup.synth boot parameter will have no effect if Speakup has been
compiled as modules.  In order for Speakup modules to be loaded during
the boot process, such action must be configured by your system
administrator.  This will mean that you will hear some, but not all,  of
the bootup messages.

2.  Basic operation

Once you have booted the system, and if necessary, have supplied the
proper bootup parameter for your synthesizer, Speakup will begin
talking as soon as the kernel is loaded.  In fact, it will talk a lot!
It will speak all the boot up messages that the kernel prints on the
screen during the boot process.  This is because Speakup is not a
separate screen reader, but is actually built into the operating
system.  Since almost all console applications must print text on the
screen using the kernel, and must get their keyboard input through the
kernel, they are automatically handled properly by Speakup.  There are a
few exceptions, but we'll come to those later.

Note:  In this guide I will refer to the numeric keypad as the keypad.
This is done because the speakupmap.map file referred to later in this
manual uses the term keypad instead of numeric keypad.  Also I'm lazy
and would rather only type one word.  So keypad it is.  Got it?  Good.

Most of the Speakup review keys are located on the keypad at the far
right of the keyboard.  The numlock key should be off, in order for these
to work.  If you toggle the numlock on, the keypad will produce numbers,
which is exactly what you want for spreadsheets and such.  For the
purposes of this guide, you should have the numlock turned off, which is
its default state at bootup.

You probably won't want to listen to all the bootup messages every time
you start your system, though it's a good idea to listen to them at
least once, just so you'll know what kind of information is available to
you during the boot process.  You can always review these messages after
bootup with the command:

dmesg | more

In order to speed the boot process, and to silence the speaking of the
bootup messages, just press the keypad enter key.  This key is located
in the bottom right corner of the keypad.  Speakup will shut up and stay
that way, until you press another key.

You can check to see if the boot process has completed by pressing the 8
key on the keypad, which reads the current line.  This also has the
effect of starting Speakup talking again, so you can press keypad enter
to silence it again if the boot process has not completed.

When the boot process is complete, you will arrive at a "login" prompt.
At this point, you'll need to type in your user id and password, as
provided by your system administrator.  You will hear Speakup speak the
letters of your user id as you type it, but not the password.  This is
because the password is not displayed on the screen for security
reasons.  This has nothing to do with Speakup, it's a Linux security
feature.

Once you've logged in, you can run any Linux command or program which is
allowed by your user id.  Normal users will not be able to run programs
which require root privileges.

When you are running a program or command, Speakup will automatically
speak new text as it arrives on the screen.  You can at any time silence
the speech with keypad enter, or use any of the Speakup review keys.

Here are some basic Speakup review keys, and a short description of what
they do.

keypad 1 -- read previous character
keypad 2 -- read current character (pressing keypad 2 twice rapidly will speak
	the current character phonetically)
keypad 3 -- read next character
keypad 4 -- read previous word
keypad 5 -- read current word (press twice rapidly to spell the current word)
keypad 6 -- read next word
keypad 7 -- read previous line
keypad 8 -- read current line (press twice rapidly to hear how much the
	text on the current line is indented)
keypad 9 -- read next line
keypad period -- speak current cursor position and announce current
	virtual console

It's also worth noting that the insert key on the keypad is mapped
as the speakup key.  Instead of pressing and releasing this key, as you
do under DOS or Windows, you hold it like a shift key, and press other
keys in combination with it.  For example, repeatedly holding keypad
insert, from now on called speakup, and keypad enter will toggle the
speaking of new text on the screen on and off.  This is not the same as
just pressing keypad enter by itself, which just silences the speech
until you hit another key.  When you hit speakup plus keypad enter,
Speakup will say, "You turned me off.", or "Hey, that's better."  When
Speakup is turned off, no new text on the screen will be spoken.  You
can still use the reading controls to review the screen however.

3.  Using the Speakup Help System

In order to enter the Speakup help system, press and hold the speakup
key (remember that this is the keypad insert key), and press the f1 key.
You will hear the message:

"Press space to leave help, cursor up or down to scroll, or a letter to
go to commands in list."

When you press the spacebar to leave the help system, you will hear:

"Leaving help."

While you are in the Speakup help system, you can scroll up or down
through the list of available commands using the cursor keys.  The list
of commands is arranged in alphabetical order.  If you wish to jump to
commands in a specific part of the alphabet, you may press the letter of
the alphabet you wish to jump to.

You can also just explore by typing keyboard keys.  Pressing keys will
cause Speakup to speak the command associated with that key.  For
example, if you press the keypad 8 key, you will hear:

"Keypad 8 is line, say current."

You'll notice that some commands do not have keys assigned to them.
This is because they are very infrequently used commands, and are also
accessible through the sys system.  We'll discuss the sys system later
in this manual.

You'll also notice that some commands have two keys assigned to them.
This is because Speakup has a built in set of alternative key bindings
for laptop users.  The alternate speakup key is the caps lock key.  You
can press and hold the caps lock key, while pressing an alternate
speakup command key to activate the command.  On most laptops, the
numeric keypad is defined as the keys in the j k l area of the keyboard.

There is usually a function key which turns this keypad function on and
off, and some other key which controls the numlock state.  Toggling the
keypad functionality on and off can become a royal pain.  So, Speakup
gives you a simple way to get at an alternative set of key mappings for
your laptop.  These are also available by default on desktop systems,
because Speakup does not know whether it is running on a desktop or
laptop.  So you may choose which set of Speakup keys to use.  Some
system administrators may have chosen to compile Speakup for a desktop
system without this set of alternate key bindings, but these details are
beyond the scope of this manual.  To use the caps lock for its normal
purpose, hold the shift key while toggling the caps lock on and off.  We
should note here, that holding the caps lock key and pressing the z key
will toggle the alternate j k l keypad on and off.

4.  Keys and Their Assigned Commands

In this section, we'll go through a list of all the speakup keys and
commands.  You can also get a list of commands and assigned keys from
the help system.

The following list was taken from the speakupmap.map file.  Key
assignments are on the left of the equal sign, and the associated
Speakup commands are on the right.  The designation "spk" means to press
and hold the speakup key, a.k.a. keypad insert, a.k.a. caps lock, while
pressing the other specified key.

spk key_f9 = punc_level_dec
spk key_f10 = punc_level_inc
spk key_f11 = reading_punc_dec
spk key_f12 = reading_punc_inc
spk key_1 = vol_dec
spk key_2 =  vol_inc
spk key_3 = pitch_dec
spk key_4 = pitch_inc
spk key_5 = rate_dec
spk key_6 = rate_inc
key_kpasterisk = toggle_cursoring
spk key_kpasterisk = speakup_goto
spk key_f1 = speakup_help
spk key_f2 = set_win
spk key_f3 = clear_win
spk key_f4 = enable_win
spk key_f5 = edit_some
spk key_f6 = edit_most
spk key_f7 = edit_delim
spk key_f8 = edit_repeat
shift spk key_f9 = edit_exnum
 key_kp7 = say_prev_line
spk key_kp7 = left_edge
 key_kp8 = say_line
double  key_kp8 = say_line_indent
spk key_kp8 = say_from_top
 key_kp9 = say_next_line
spk  key_kp9 = top_edge
 key_kpminus = speakup_parked
spk key_kpminus = say_char_num
 key_kp4 = say_prev_word
spk key_kp4 = say_from_left
 key_kp5 = say_word
double key_kp5 = spell_word
spk key_kp5 = spell_phonetic
 key_kp6 = say_next_word
spk key_kp6 = say_to_right
 key_kpplus = say_screen
spk key_kpplus = say_win
 key_kp1 = say_prev_char
spk key_kp1 = right_edge
 key_kp2 = say_char
spk key_kp2 = say_to_bottom
double key_kp2 = say_phonetic_char
 key_kp3 = say_next_char
spk  key_kp3 = bottom_edge
 key_kp0 = spk_key
 key_kpdot = say_position
spk key_kpdot = say_attributes
key_kpenter = speakup_quiet
spk key_kpenter = speakup_off
key_sysrq = speech_kill
 key_kpslash = speakup_cut
spk key_kpslash = speakup_paste
spk key_pageup = say_first_char
spk key_pagedown = say_last_char
key_capslock = spk_key
 spk key_z = spk_lock
key_leftmeta = spk_key
ctrl spk key_0 = speakup_goto
spk key_u = say_prev_line
spk key_i = say_line
double spk key_i = say_line_indent
spk key_o = say_next_line
spk key_minus = speakup_parked
shift spk key_minus = say_char_num
spk key_j = say_prev_word
spk key_k = say_word
double spk key_k = spell_word
spk key_l = say_next_word
spk key_m = say_prev_char
spk key_comma = say_char
double spk key_comma = say_phonetic_char
spk key_dot = say_next_char
spk key_n = say_position
 ctrl spk key_m = left_edge
 ctrl spk key_y = top_edge
 ctrl spk key_dot = right_edge
ctrl spk key_p = bottom_edge
spk key_apostrophe = say_screen
spk key_h = say_from_left
spk key_y = say_from_top
spk key_semicolon = say_to_right
spk key_p = say_to_bottom
spk key_slash = say_attributes
 spk key_enter = speakup_quiet
 ctrl  spk key_enter = speakup_off
 spk key_9 = speakup_cut
spk key_8 = speakup_paste
shift spk key_m = say_first_char
 ctrl spk key_semicolon = say_last_char
spk key_r = read_all_doc

5.  The Speakup Sys System

The Speakup screen reader also creates a speakup subdirectory as a part
of the sys system.

As a convenience, run as root

ln -s /sys/accessibility/speakup /speakup

to directly access speakup parameters from /speakup.
You can see these entries by typing the command:

ls -1 /speakup/*

If you issue the above ls command, you will get back something like
this:

/speakup/attrib_bleep
/speakup/bell_pos
/speakup/bleep_time
/speakup/bleeps
/speakup/cursor_time
/speakup/delimiters
/speakup/ex_num
/speakup/key_echo
/speakup/keymap
/speakup/no_interrupt
/speakup/punc_all
/speakup/punc_level
/speakup/punc_most
/speakup/punc_some
/speakup/reading_punc
/speakup/repeats
/speakup/say_control
/speakup/say_word_ctl
/speakup/silent
/speakup/spell_delay
/speakup/synth
/speakup/synth_direct
/speakup/version

/speakup/i18n:
announcements
characters
chartab
colors
ctl_keys
formatted
function_names
key_names
states

/speakup/soft:
caps_start
caps_stop
delay_time
direct
freq
full_time
jiffy_delta
pitch
inflection
punct
rate
tone
trigger_time
voice
vol

Notice the two subdirectories of /speakup: /speakup/i18n and
/speakup/soft.
The i18n subdirectory is described in a later section.
The files under /speakup/soft represent settings that are specific to the
driver for the software synthesizer.  If you use the LiteTalk, your
synthesizer-specific settings would be found in /speakup/ltlk.  In other words,
a subdirectory named /speakup/KWD is created to hold parameters specific
to the device whose keyword is KWD.
These parameters include volume, rate, pitch, and others.

In addition to using the Speakup hot keys to change such things as
volume, pitch, and rate, you can also echo values to the appropriate
entry in the /speakup directory.  This is very useful, since it
lets you control Speakup parameters from within a script.  How you
would write such scripts is somewhat beyond the scope of this manual,
but I will include a couple of simple examples here to give you a
general idea of what such scripts can do.

Suppose for example, that you wanted to control both the punctuation
level and the reading punctuation level at the same time.  For
simplicity, we'll call them punc0, punc1, punc2, and punc3.  The scripts
might look something like this:

#!/bin/bash
# punc0
# set punc and reading punc levels to 0
echo 0 >/speakup/punc_level
echo 0 >/speakup/reading_punc
echo Punctuation level set to 0.

#!/bin/bash
# punc1
# set punc and reading punc levels to 1
echo 1 >/speakup/punc_level
echo 1 >/speakup/reading_punc
echo Punctuation level set to 1.

#!/bin/bash
# punc2
# set punc and reading punc levels to 2
echo 2 >/speakup/punc_level
echo 2 >/speakup/reading_punc
echo Punctuation level set to 2.

#!/bin/bash
# punc3
# set punc and reading punc levels to 3
echo 3 >/speakup/punc_level
echo 3 >/speakup/reading_punc
echo Punctuation level set to 3.

If you were to store these four small scripts in a directory in your
path, perhaps /usr/local/bin, and set the permissions to 755 with the
chmod command, then you could change the default reading punc and
punctuation levels at the same time by issuing just one command.  For
example, if you were to execute the punc3 command at your shell prompt,
then the reading punc and punc level would both get set to 3.

I should note that the above scripts were written to work with bash, but
regardless of which shell you use, you should be able to do something
similar.

The Speakup sys system also has another interesting use.  You can echo
Speakup parameters into the sys system in a script during system
startup, and speakup will return to your preferred parameters every time
the system is rebooted.

Most of the Speakup sys parameters can be manipulated by a regular user
on the system.  However, there are a few parameters that are dangerous
enough that they should only be manipulated by the root user on your
system.  There are even some parameters that are read only, and cannot
be written to at all.  For example, the version entry in the Speakup
sys system is read only.  This is because there is no reason for a user
to tamper with the version number which is reported by Speakup.  Doing
an ls -l on /speakup/version will return this:

-r--r--r--    1 root     root            0 Mar 21 13:46 /speakup/version

As you can see, the version entry in the Speakup sys system is read
only, is owned by root, and belongs to the root group.  Doing a cat of
/speakup/version will display the Speakup version number, like
this:

cat /speakup/version
Speakup v-2.00 CVS: Thu Oct 21 10:38:21 EDT 2004
synth dtlk version 1.1

The display shows the Speakup version number, along with the version
number of the driver for the current synthesizer.

Looking at entries in the Speakup sys system can be useful in many
ways.  For example, you might wish to know what level your volume is set
at.  You could type:

cat /speakup/KWD/vol
# Replace KWD with the keyword for your synthesizer, E.G., ltlk for LiteTalk.
5

The number five which comes back is the level at which the synthesizer
volume is set at.

All the entries in the Speakup sys system are readable, some are
writable by root only, and some are writable by everyone.  Unless you
know what you are doing, you should probably leave the ones that are
writable by root only alone.  Most of the names are self explanatory.
Vol for controlling volume, pitch for pitch, inflection for pitch range, rate
for controlling speaking rate, etc.  If you find one you aren't sure about, you
can post a query on the Speakup list.

6.  Changing Synthesizers

It is possible to change to a different synthesizer while speakup is
running.  In other words, it is not necessary to reboot the system
in order to use a different synthesizer.  You can simply echo the
synthesizer keyword to the /speakup/synth sys entry.
Depending on your situation, you may wish to echo none to the synth
sys entry, to disable speech while one synthesizer is disconnected and
a second one is connected in its place.  Then echo the keyword for the
new synthesizer into the synth sys entry in order to start speech
with the newly connected synthesizer.  See the list of synthesizer
keywords in section 1 to find the keyword which matches your synth.

7.  Loading modules

As mentioned earlier, Speakup can either be completely compiled into the
kernel, with the exception of the help module, or it can be compiled as
a series of modules.   When compiled as modules, Speakup will only be
able to speak some of the bootup messages if your system administrator
has configured the system to load the modules at boo time. The modules
can  be loaded after the file systems have been checked and mounted, or
from an initrd.  There is a third possibility.  Speakup can be compiled
with some components built into the kernel, and others as modules.  As
we'll see in the next section, this is particularly useful when you are
working with software synthesizers.

If Speakup is completely compiled as modules, then you must use the
modprobe command to load Speakup.  You do this by loading the module for
the synthesizer driver you wish to use.  The driver modules are all
named speakup_<keyword>, where <keyword> is the keyword for the
synthesizer you want.  So, in order to load the driver for the DecTalk
Express, you would type the following command:

modprobe speakup_dectlk

Issuing this command would load the DecTalk Express driver and all other
related Speakup modules necessary to get Speakup up and running.

To completely unload Speakup, again presuming that it is entirely built
as modules, you would give the command:

modprobe -r speakup_dectlk

The above command assumes you were running a DecTalk Express.  If you
were using a different synth, then you would substitute its keyword in
place of dectlk.

If you have multiple drivers loaded, you need to unload all of them, in
order to completely unload Speakup.
For example, if you have loaded both the dectlk and ltlk drivers, use the
command:
modprobe -r speakup_dectlk speakup_ltlk

You cannot unload the driver for software synthesizers when a user-space
daemon is using /dev/softsynth.  First, kill the daemon.  Next, remove
the driver with the command:
modprobe -r speakup_soft

Now, suppose we have a situation where the main Speakup component
is built into the kernel, and some or all of the drivers are built as
modules.  Since the main part of Speakup is compiled into the kernel, a
partial Speakup sys system has been created which we can take advantage
of by simply echoing the synthesizer keyword into the
/speakup/synth sys entry.  This will cause the kernel to
automatically load the appropriate driver module, and start Speakup
talking.  To switch to another synth, just echo a new keyword to the
synth sys entry.  For example, to load the DoubleTalk LT driver,
you would type:

echo ltlk >/speakup/synth

You can use the modprobe -r command to unload driver modules, regardless
of whether the main part of Speakup has been built into the kernel or
not.

8.  Using Software Synthesizers

Using a software synthesizer requires that some other software be
installed and running on your system.  For this reason, software
synthesizers are not available for use at bootup, or during a system
installation process.
There are two freely-available solutions for software speech: Espeakup and
Speech Dispatcher.
These are described in subsections 8.1 and 8.2, respectively.

During the rest of this section, we assume that speakup_soft is either
built in to your kernel, or loaded as a module.

If your system does not have udev installed , before you can use a
software synthesizer, you must have created the /dev/softsynth device.
If you have not already done so, issue the following commands as root:

cd /dev
mknod softsynth c 10 26

While we are at it, we might just as well create the /dev/synth device,
which can be used to let user space programs send information to your
synthesizer.  To create /dev/synth, change to the /dev directory, and
issue the following command as root:

mknod synth c 10 25

of both.

8.1. Espeakup

Espeakup is a connector between Speakup and the eSpeak software synthesizer.
Espeakup may already be available as a package for your distribution
of Linux.  If it is not packaged, you need to install it manually.
You can find it in the contrib/ subdirectory of the Speakup sources.
The filename is espeakup-$VERSION.tar.bz2, where $VERSION
depends on the current release of Espeakup.  The Speakup 3.1.2 source
ships with version 0.71 of Espeakup.
The README file included with the Espeakup sources describes the process
of manual installation.

Assuming that Espeakup is installed, either by the user or by the distributor,
follow these steps to use it.

Tell Speakup to use the "soft driver:
echo soft > /speakup/synth

Finally, start the espeakup program.  There are two ways to do it.
Both require root privileges.

If Espeakup was installed as a package for your Linux distribution,
you probably have a distribution-specific script that controls the operation
of the daemon.  Look for a file named espeakup under /etc/init.d or
/etc/rc.d.  Execute the following command with root privileges:
/etc/init.d/espeakup start
Replace init.d with rc.d, if your distribution uses scripts located under
/etc/rc.d.
Your distribution will also have a procedure for starting daemons at
boot-time, so it is possible to have software speech as soon as user-space
daemons are started by the bootup scripts.
These procedures are not described in this document.

If you built Espeakup manually, the "make install" step placed the binary
under /usr/bin.
Run the following command as root:
/usr/bin/espeakup
Espeakup should start speaking.

8.2. Speech Dispatcher

For this option, you must have a package called
Speech Dispatcher running on your system, and it must be configured to
work with one of its supported software synthesizers.

Two open source synthesizers you might use are Flite and Festival.  You
might also choose to purchase the Software DecTalk from Fonix Sales Inc.
If you run a google search for Fonix, you'll find their web site.

You can obtain a copy of Speech Dispatcher from free(b)soft at
http://www.freebsoft.org/.  Follow the installation instructions that
come with Speech Dispatcher in order to install and configure Speech
Dispatcher.  You can check out the web site for your Linux distribution
in order to get a copy of either Flite or Festival.  Your Linux
distribution may also have a precompiled Speech Dispatcher package.

Once you've installed, configured, and tested Speech Dispatcher with your
chosen software synthesizer, you still need one more piece of software
in order to make things work.  You need a package called speechd-up.
You get it from the free(b)soft web site mentioned above.  After you've
compiled and installed speechd-up, you are almost ready to begin using
your software synthesizer.

Now you can begin using your software synthesizer.  In order to do so,
echo the soft keyword to the synth sys entry like this:

echo soft >/speakup/synth

Next run the speechd_up command like this:

speechd_up &

Your synth should now start talking, and you should be able to adjust
the pitch, rate, etc.

9.  Using The DecTalk PC Card

The DecTalk PC card is an ISA card that is inserted into one of the ISA
slots in your computer.  It requires that the DecTalk PC software be
installed on your computer, and that the software be loaded onto the
Dectalk PC card before it can be used.

You can get the dec_pc.tgz file from the linux-speakup.org site.  The
dec_pc.tgz file is in the ~ftp/pub/linux/speakup directory.

After you have downloaded the dec_pc.tgz file, untar it in your home
directory, and read the Readme file in the newly created dec_pc
directory.

The easiest way to get the software working is to copy the entire dec_pc
directory into /user/local/lib.  To do this, su to root in your home
directory, and issue the command:

cp dec_pc /usr/local/lib

You will need to copy the dtload command from the dec_pc directory to a
directory in your path.  Either /usr/bin or /usr/local/bin is a good
choice.

You can now run the dtload command in order to load the DecTalk PC
software onto the card.  After you have done this, echo the decpc
keyword to the synth entry in the sys system like this:

echo decpc >/speakup/synth

Your DecTalk PC should start talking, and then you can adjust the pitch,
rate, volume, voice, etc.  The voice entry in the Speakup sys system
will accept a number from 0 through 7 for the DecTalk PC synthesizer,
which will give you access to some of the DecTalk voices.

10.  Using Cursor Tracking

In Speakup version 2.0 and later, cursor tracking is turned on by
default.  This means that when you are using an editor, Speakup will
automatically speak characters as you move left and right with the
cursor keys, and lines as you move up and down with the cursor keys.
This is the traditional sort of cursor tracking.
Recent versions of Speakup provide two additional ways to control the
text that is spoken when the cursor is moved:
"highlight tracking" and "read window."
They are described later in this section.
Sometimes, these modes get in your way, so you can disable cursor tracking
altogether.

You may select among the various forms of cursor tracking using the keypad
asterisk key.
Each time you press this key, a new mode is selected, and Speakup speaks
the name of the new mode.  The names for the four possible states of cursor
tracking are: "cursoring on", "highlight tracking", "read window",
and "cursoring off."  The keypad asterisk key moves through the list of
modes in a circular fashion.

If highlight tracking is enabled, Speakup tracks highlighted text,
rather than the cursor itself. When you move the cursor with the arrow keys,
Speakup speaks the currently highlighted information.
This is useful when moving through various menus and dialog boxes.
If cursor tracking isn't helping you while navigating a menu,
try highlight tracking.

With the "read window" variety of cursor tracking, you can limit the text
that Speakup speaks by specifying a window of interest on the screen.
See section 15 for a description of the process of defining windows.
When you move the cursor via the arrow keys, Speakup only speaks
the contents of the window.  This is especially helpful when you are hearing
superfluous speech.  Consider the following example.

Suppose that you are at a shell prompt.  You use bash, and you want to
explore your command history using the up and down arrow keys.  If you
have enabled cursor tracking, you will hear two pieces of information.
Speakup speaks both your shell prompt and the current entry from the
command history.  You may not want to hear the prompt repeated
each time you move, so you can silence it by specifying a window.  Find
the last line of text on the screen.  Clear the current window by pressing
the key combination speakup f3.  Use the review cursor to find the first
character that follows your shell prompt.  Press speakup + f2 twice, to
define a one-line window.  The boundaries of the window are the
character following the shell prompt and the end of the line.  Now, cycle
through the cursor tracking modes using keypad asterisk, until Speakup
says "read window."  Move through your history using your arrow keys.
You will notice that Speakup no longer speaks the redundant prompt.

Some folks like to turn cursor tracking off while they are using the
lynx web browser.  You definitely want to turn cursor tracking off when
you are using the alsamixer application.  Otherwise, you won't be able
to hear your mixer settings while you are using the arrow keys.

11.  Cut and Paste

One of Speakup's more useful features is the ability to cut and paste
text on the screen.  This means that you can capture information from a
program, and paste that captured text into a different place in the
program, or into an entirely different program, which may even be
running on a different console.

For example, in this manual, we have made references to several web
sites.  It would be nice if you could cut and paste these urls into your
web browser.  Speakup does this quite nicely.  Suppose you wanted to
past the following url into your browser:

http://linux-speakup.org/

Use the speakup review keys to position the reading cursor on the first
character of the above url.  When the reading cursor is in position,
press the keypad slash key once.  Speakup will say, "mark".  Next,
position the reading cursor on the rightmost character of the above
url. Press the keypad slash key once again to actually cut the text
from the screen.  Speakup will say, "cut".  Although we call this
cutting, Speakup does not actually delete the cut text from the screen.
It makes a copy of the text in a special buffer for later pasting.

Now that you have the url cut from the screen, you can paste it into
your browser, or even paste the url on a command line as an argument to
your browser.

Suppose you want to start lynx and go to the Speakup site.

You can switch to a different console with the alt left and right
arrows, or you can switch to a specific console by typing alt and a
function key.  These are not Speakup commands, just standard Linux
console capabilities.

Once you've changed to an appropriate console, and are at a shell prompt,
type the word lynx, followed by a space.  Now press and hold the speakup
key, while you type the keypad slash character.  The url will be pasted
onto the command line, just as though you had typed it in.  Press the
enter key to execute the command.

The paste buffer will continue to hold the cut information, until a new
mark and cut operation is carried out.  This means you can paste the cut
information as many times as you like before doing another cut
operation.

You are not limited to cutting and pasting only one line on the screen.
You can also cut and paste rectangular regions of the screen.  Just
position the reading cursor at the top left corner of the text to be
cut, mark it with the keypad slash key, then position the reading cursor
at the bottom right corner of the region to be cut, and cut it with the
keypad slash key.

12.  Changing the Pronunciation of Characters

Through the /speakup/i18n/characters sys entry, Speakup gives you the
ability to change how Speakup pronounces a given character.  You could,
for example, change how some punctuation characters are spoken.  You can
even change how Speakup will pronounce certain letters.

You may, for example, wish to change how Speakup pronounces the z
character.  The author of Speakup, Kirk Reiser, is Canadian, and thus
believes that the z should be pronounced zed.  If you are an American,
you might wish to use the zee pronunciation instead of zed.  You can
change the pronunciation of both the upper and lower case z with the
following two commands:

echo 90 zee >/speakup/characters
echo 122 zee >/speakup/characters

Let's examine the parts of the two previous commands.  They are issued
at the shell prompt, and could be placed in a startup script.

The word echo tells the shell that you want to have it display the
string of characters that follow the word echo.  If you were to just
type:

echo hello.

You would get the word hello printed on your screen as soon as you
pressed the enter key.  In this case, we are echoing strings that we
want to be redirected into the sys system.

The numbers 90 and 122 in the above echo commands are the ascii numeric
values for the upper and lower case z, the characters we wish to change.

The string zee is the pronunciation that we want Speakup to use for the
upper and lower case z.

The > symbol redirects the output of the echo command to a file, just
like in DOS, or at the Windows command prompt.

And finally, /speakup/i18n/characters is the file entry in the sys system
where we want the output to be directed.  Speakup looks at the numeric
value of the character we want to change, and inserts the pronunciation
string into an internal table.

You can look at the whole table with the following command:

cat /speakup/i18n/characters

Speakup will then print out the entire character pronunciation table.  I
won't display it here, but leave you to look at it at your convenience.

13.  Mapping Keys

Speakup has the capability of allowing you to assign or "map" keys to
internal Speakup commands.  This section necessarily assumes you have a
Linux kernel source tree installed, and that it has been patched and
configured with Speakup.  How you do this is beyond the scope of this
manual.  For this information, visit the Speakup web site at
http://linux-speakup.org/.  The reason you'll need the kernel source
tree patched with Speakup is that the genmap utility you'll need for
processing keymaps is in the
/usr/src/linux-<version_number>/drivers/char/speakup directory.  The
<version_number> in the above directory path is the version number of
the Linux source tree you are working with.

So ok, you've gone off and gotten your kernel source tree, and patched
and configured it.  Now you can start manipulating keymaps.

You can either use the
/usr/src/linux-<version_number>/drivers/char/speakup/speakupmap.map file
included with the Speakup source, or you can cut and paste the copy in
section 4 into a separate file.  If you use the one in the Speakup
source tree, make sure you make a backup of it before you start making
changes.  You have been warned!

Suppose that you want to swap the key assignments for the Speakup
say_last_char and the Speakup say_first_char commands.  The
speakupmap.map lists the key mappings for these two commands as follows:

spk key_pageup = say_first_char
spk key_pagedown = say_last_char

You can edit your copy of the speakupmap.map file and swap the command
names on the right side of the = (equals) sign.  You did make a backup,
right?  The new keymap lines would look like this:

spk key_pageup = say_last_char
spk key_pagedown = say_first_char

After you edit your copy of the speakupmap.map file, save it under a new
file name, perhaps newmap.map.  Then exit your editor and return to the
shell prompt.

You are now ready to load your keymap with your swapped key assignments.
 Assuming that you saved your new keymap as the file newmap.map, you
would load your keymap into the sys system like this:

/usr/src/linux-<version_number>/drivers/char/speakup/genmap newmap.map
>/speakup/keymap

Remember to substitute your kernel version number for the
<version_number> in the above command.  Also note that although the
above command wrapped onto two lines in this document, you should type
it all on one line.

Your say first and say last characters should now be swapped.  Pressing
speakup pagedown should read you the first non-whitespace character on
the line your reading cursor is in, and pressing speakup pageup should
read you the last character on the line your reading cursor is in.

You should note that these new mappings will only stay in effect until
you reboot, or until you load another keymap.

One final warning.  If you try to load a partial map, you will quickly
find that all the mappings you didn't include in your file got deleted
from the working map.  Be extremely careful, and always make a backup!
You have been warned!

14.  Internationalizing Speakup

Speakup indicates various conditions to the user by speaking messages.
For instance, when you move to the left edge of the screen with the
review keys, Speakup says, "left."
Prior to version 3.1.0 of Speakup, all of these messages were in English,
and they could not be changed.  If you used a non-English synthesizer,
you still heard English messages, such as "left" and "cursoring on."
In version 3.1.0 or higher, one may load translations for the various
messages via the /sys filesystem.

The directory /speakup/i18n contains several collections of messages.
Each group of messages is stored in its own file.
The following section lists all of these files, along with a brief description
of each.

14.1.  Files Under the i18n Subdirectory

* announcements:
This file contains various general announcements, most of which cannot
be categorized.  You will find messages such as "You killed Speakup",
"I'm alive", "leaving help", "parked", "unparked", and others.
You will also find the names of the screen edges and cursor tracking modes
here.

* characters:
See section 12 for a description of this file.

* chartab:
See section 12.  Unlike the rest of the files in the i18n subdirectory,
this one does not contain messages to be spoken.

* colors:
When you use the "say attributes" function, Speakup says the name of the
foreground and background colors.  These names come from the i18n/colors
file.

* ctl_keys:
Here, you will find names of control keys.  These are used with Speakup's
say_control feature.

* formatted:
This group of messages contains embedded formatting codes, to specify
the type and width of displayed data.  If you change these, you must
preserve all of the formatting codes, and they must appear in the order
used by the default messages.

* function_names:
Here, you will find a list of names for Speakup functions.  These are used
by the help system.  For example, suppose that you have activated help mode,
and you pressed keypad 3.  Speakup says:
"keypad 3 is character, say next."
The message "character, say next" names a Speakup function, and it
comes from this function_names file.

* key_names:
Again, key_names is used by Speakup's help system.  In the previous
example, Speakup said that you pressed "keypad 3."
This name came from the key_names file.

* states:
This file contains names for key states.
Again, these are part of the help system.  For instance, if you had pressed
speakup + keypad 3, you would hear:
"speakup keypad 3 is go to bottom edge."
The speakup key is depressed, so the name of the key state is speakup.
This part of the message comes from the states collection.

14.2.  Changing language

14.2.1. Loading Your Own Messages

The files under the i18n subdirectory all follow the same format.
They consist of lines, with one message per line.
Each message is represented by a number, followed by the text of the message.
The number is the position of the message in the given collection.
For example, if you view the file /speakup/i18n/colors, you will see the
following list:

0	black
1	blue
2	green
3	cyan
4	red
5	magenta
6	yellow
7	white
8	grey

You can change one message, or you can change a whole group.
To load a whole collection of messages from a new source, simply use
the cp command:
cp ~/my_colors /speakup/i18n/colors
You can change an individual message with the echo command,
as shown in the following example.

The Spanish name for the color blue is azul.
Looking at the colors file, we see that the name "blue" is at position 1
within the colors group.  Let's change blue to azul:
echo '1 azul' > /speakup/i18n/colors
The next time that Speakup says message 1 from the colors group, it will
say "azul", rather than "blue."

14.2.2. Choose a language

In the future, translations into various languages will be made available,
and most users will just load the files necessary for their language. So far,
only French language is available beyond native Canadian English language.

French is only available after you are logged in.

Canadian English is the default language. To toggle another language,
download the source of Speakup and untar it in your home directory. The
following command should let you do this:

tar xvjf speakup-<version>.tar.bz2

where <version> is the version number of the application.

Next, change to the newly created directory, then into the tools/ directory, and
run the script speakup_setlocale. You are asked the language that you want to
use. Type the number associated to your language (e.g. fr for French) then press
Enter. Needed files are copied in the i18n directory.

Note: the speakupconf must be installed on your system so that settings are saved.
Otherwise, you will have an error: your language will be loaded but you will
have to run the script again every time Speakup restarts.
See section 16.1. for information about speakupconf.

You will have to repeat these steps for any change of locale, i.e. if you wish
change the speakup's language or charset (iso-8859-15 ou UTF-8).

If you wish store the settings, note that at your next login, you will need to
do:

speakup load

Alternatively, you can add the above line to your file
~/.bashrc or ~/.bash_profile.

If your system administrator ran himself the script, all the users will be able
to change from English to the language choosed by root and do directly
speakupconf load (or add this to the ~/.bashrc or
~/.bash_profile file). If there are several languages to handle, the
administrator (or every user) will have to run the first steps until speakupconf
save, choosing the appropriate language, in every user's home directory. Every
user will then be able to do speakupconf load, Speakup will load his own settings.

14.3.  No Support for Non-Western-European Languages

As of the current release, Speakup only supports Western European languages.
Support for the extended characters used by languages outside of the Western
European family of languages is a work in progress.

15.  Using Speakup's Windowing Capability

Speakup has the capability of defining and manipulating windows on the
screen.  Speakup uses the term "Window", to mean a user defined area of
the screen.  The key strokes for defining and manipulating Speakup
windows are as follows:

speakup + f2 -- Set the bounds of the window.
Speakup + f3 -- clear the current window definition.
speakup + f4 -- Toggle window silence on and off.
speakup + keypad plus -- Say the currently defined window.

These capabilities are useful for tracking a certain part of the screen
without rereading the whole screen, or for silencing a part of the
screen that is constantly changing, such as a clock or status line.

There is no way to save these window settings, and you can only have one
window defined for each virtual console.  There is also no way to have
windows automatically defined for specific applications.

In order to define a window, use the review keys to move your reading
cursor to the beginning of the area you want to define.  Then press
speakup + f2.  Speakup will tell you that the window starts at the
indicated row and column position.  Then move the reading cursor to the
end of the area to be defined as a window, and press speakup + f2 again.
 If there is more than one line in the window, Speakup will tell you
that the window ends at the indicated row and column position.  If there
is only one line in the window, then Speakup will tell you that the
window is the specified line on the screen.  If you are only defining a
one line window, you can just press speakup + f2 twice after placing the
reading cursor on the line you want to define as a window.  It is not
necessary to position the reading cursor at the end of the line in order
to define the whole line as a window.

16.  Tools for Controlling Speakup

The speakup distribution includes extra tools (in the tools directory)
which were written to make speakup easier to use.  This section will
briefly describe the use of these tools.

16.1.  Speakupconf

speakupconf began life as a contribution from Steve Holmes, a member of
the speakup community.  We would like to thank him for his work on the
early versions of this project.

This script may be installed as part of your linux distribution, but if
it isn't, the recommended places to put it are /usr/local/bin or
/usr/bin.  This script can be run by any user, so it does not require
root privileges.

Speakupconf allows you to save and load your Speakup settings.  It works
by reading and writing the /sys files described above.

The directory that speakupconf uses to store your settings depends on
whether it is run from the root account.  If you execute speakupconf as
root, it uses the directory /etc/speakup.  Otherwise, it uses the directory
~/.speakup, where ~ is your home directory.
Anyone who needs to use Speakup from your console can load his own custom
settings with this script.

speakupconf takes one required argument: load or save.
Use the command
speakupconf save
to save your Speakup settings, and
speakupconf load
to load them into Speakup.
A second argument may be specified to use an alternate directory to
load or save the speakup parameters.

16.2.  Talkwith

Charles Hallenbeck, another member of the speakup community, wrote the
initial versions of this script, and we would also like to thank him for
his work on it.

This script needs root privileges to run, so if it is not installed as
part of your linux distribution, the recommended places to install it
are /usr/local/sbin or /usr/sbin.

Talkwith allows you to switch synthesizers on the fly.  It takes a synthesizer
name as an argument.  For instance,
talkwith dectlk
causes Speakup to use the DecTalk Express.  If you wish to switch to a
software synthesizer, you must also indicate which daemon you wish to
use.  There are two possible choices:
spd and espeakup.  spd is an abbreviation for speechd-up.
If you wish to use espeakup for software synthesis, give the command
talkwith soft espeakup
To use speechd-up, type:
talkwith soft spd
Any arguments that follow the name of the daemon are passed to the daemon
when it is invoked.  For instance:
talkwith espeakup --default-voice=fr
causes espeakup to use the French voice.
Note that talkwith must always be executed with root privileges.

Talkwith does not attempt to load your settings after the new
synthesizer is activated.  You can use speakupconf to load your settings
if desired.

                GNU Free Documentation License
                  Version 1.2, November 2002


 Copyright (C) 2000,2001,2002  Free Software Foundation, Inc.
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.


0. PREAMBLE

The purpose of this License is to make a manual, textbook, or other
functional and useful document "free" in the sense of freedom: to
assure everyone the effective freedom to copy and redistribute it,
with or without modifying it, either commercially or noncommercially.
Secondarily, this License preserves for the author and publisher a way
to get credit for their work, while not being considered responsible
for modifications made by others.

This License is a kind of "copyleft", which means that derivative
works of the document must themselves be free in the same sense.  It
complements the GNU General Public License, which is a copyleft
license designed for free software.

We have designed this License in order to use it for manuals for free
software, because free software needs free documentation: a free
program should come with manuals providing the same freedoms that the
software does.  But this License is not limited to software manuals;
it can be used for any textual work, regardless of subject matter or
whether it is published as a printed book.  We recommend this License
principally for works whose purpose is instruction or reference.


1. APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work, in any medium, that
contains a notice placed by the copyright holder saying it can be
distributed under the terms of this License.  Such a notice grants a
world-wide, royalty-free license, unlimited in duration, to use that
work under the conditions stated herein.  The "Document", below,
refers to any such manual or work.  Any member of the public is a
licensee, and is addressed as "you".  You accept the license if you
copy, modify or distribute the work in a way requiring permission
under copyright law.

A "Modified Version" of the Document means any work containing the
Document or a portion of it, either copied verbatim, or with
modifications and/or translated into another language.

A "Secondary Section" is a named appendix or a front-matter section of
the Document that deals exclusively with the relationship of the
publishers or authors of the Document to the Document's overall subject
(or to related matters) and contains nothing that could fall directly
within that overall subject.  (Thus, if the Document is in part a
textbook of mathematics, a Secondary Section may not explain any
mathematics.)  The relationship could be a matter of historical
connection with the subject or with related matters, or of legal,
commercial, philosophical, ethical or political position regarding
them.

The "Invariant Sections" are certain Secondary Sections whose titles
are designated, as being those of Invariant Sections, in the notice
that says that the Document is released under this License.  If a
section does not fit the above definition of Secondary then it is not
allowed to be designated as Invariant.  The Document may contain zero
Invariant Sections.  If the Document does not identify any Invariant
Sections then there are none.

The "Cover Texts" are certain short passages of text that are listed,
as Front-Cover Texts or Back-Cover Texts, in the notice that says that
the Document is released under this License.  A Front-Cover Text may
be at most 5 words, and a Back-Cover Text may be at most 25 words.

A "Transparent" copy of the Document means a machine-readable copy,
represented in a format whose specification is available to the
general public, that is suitable for revising the document
straightforwardly with generic text editors or (for images composed of
pixels) generic paint programs or (for drawings) some widely available
drawing editor, and that is suitable for input to text formatters or
for automatic translation to a variety of formats suitable for input
to text formatters.  A copy made in an otherwise Transparent file
format whose markup, or absence of markup, has been arranged to thwart
or discourage subsequent modification by readers is not Transparent.
An image format is not Transparent if used for any substantial amount
of text.  A copy that is not "Transparent" is called "Opaque".

Examples of suitable formats for Transparent copies include plain
ASCII without markup, Texinfo input format, LaTeX input format, SGML
or XML using a publicly available DTD, and standard-conforming simple
HTML, PostScript or PDF designed for human modification.  Examples of
transparent image formats include PNG, XCF and JPG.  Opaque formats
include proprietary formats that can be read and edited only by
proprietary word processors, SGML or XML for which the DTD and/or
processing tools are not generally available, and the
machine-generated HTML, PostScript or PDF produced by some word
processors for output purposes only.

The "Title Page" means, for a printed book, the title page itself,
plus such following pages as are needed to hold, legibly, the material
this License requires to appear in the title page.  For works in
formats which do not have any title page as such, "Title Page" means
the text near the most prominent appearance of the work's title,
preceding the beginning of the body of the text.

A section "Entitled XYZ" means a named subunit of the Document whose
title either is precisely XYZ or contains XYZ in parentheses following
text that translates XYZ in another language.  (Here XYZ stands for a
specific section name mentioned below, such as "Acknowledgements",
"Dedications", "Endorsements", or "History".)  To "Preserve the Title"
of such a section when you modify the Document means that it remains a
section "Entitled XYZ" according to this definition.

The Document may include Warranty Disclaimers next to the notice which
states that this License applies to the Document.  These Warranty
Disclaimers are considered to be included by reference in this
License, but only as regards disclaiming warranties: any other
implication that these Warranty Disclaimers may have is void and has
no effect on the meaning of this License.


2. VERBATIM COPYING

You may copy and distribute the Document in any medium, either
commercially or noncommercially, provided that this License, the
copyright notices, and the license notice saying this License applies
to the Document are reproduced in all copies, and that you add no other
conditions whatsoever to those of this License.  You may not use
technical measures to obstruct or control the reading or further
copying of the copies you make or distribute.  However, you may accept
compensation in exchange for copies.  If you distribute a large enough
number of copies you must also follow the conditions in section 3.

You may also lend copies, under the same conditions stated above, and
you may publicly display copies.


3. COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have
printed covers) of the Document, numbering more than 100, and the
Document's license notice requires Cover Texts, you must enclose the
copies in covers that carry, clearly and legibly, all these Cover
Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
the back cover.  Both covers must also clearly and legibly identify
you as the publisher of these copies.  The front cover must present
the full title with all words of the title equally prominent and
visible.  You may add other material on the covers in addition.
Copying with changes limited to the covers, as long as they preserve
the title of the Document and satisfy these conditions, can be treated
as verbatim copying in other respects.

If the required texts for either cover are too voluminous to fit
legibly, you should put the first ones listed (as many as fit
reasonably) on the actual cover, and continue the rest onto adjacent
pages.

If you publish or distribute Opaque copies of the Document numbering
more than 100, you must either include a machine-readable Transparent
copy along with each Opaque copy, or state in or with each Opaque copy
a computer-network location from which the general network-using
public has access to download using public-standard network protocols
a complete Transparent copy of the Document, free of added material.
If you use the latter option, you must take reasonably prudent steps,
when you begin distribution of Opaque copies in quantity, to ensure
that this Transparent copy will remain thus accessible at the stated
location until at least one year after the last time you distribute an
Opaque copy (directly or through your agents or retailers) of that
edition to the public.

It is requested, but not required, that you contact the authors of the
Document well before redistributing any large number of copies, to give
them a chance to provide you with an updated version of the Document.


4. MODIFICATIONS

You may copy and distribute a Modified Version of the Document under
the conditions of sections 2 and 3 above, provided that you release
the Modified Version under precisely this License, with the Modified
Version filling the role of the Document, thus licensing distribution
and modification of the Modified Version to whoever possesses a copy
of it.  In addition, you must do these things in the Modified Version:

A. Use in the Title Page (and on the covers, if any) a title distinct
   from that of the Document, and from those of previous versions
   (which should, if there were any, be listed in the History section
   of the Document).  You may use the same title as a previous version
   if the original publisher of that version gives permission.
B. List on the Title Page, as authors, one or more persons or entities
   responsible for authorship of the modifications in the Modified
   Version, together with at least five of the principal authors of the
   Document (all of its principal authors, if it has fewer than five),
   unless they release you from this requirement.
C. State on the Title page the name of the publisher of the
   Modified Version, as the publisher.
D. Preserve all the copyright notices of the Document.
E. Add an appropriate copyright notice for your modifications
   adjacent to the other copyright notices.
F. Include, immediately after the copyright notices, a license notice
   giving the public permission to use the Modified Version under the
   terms of this License, in the form shown in the Addendum below.
G. Preserve in that license notice the full lists of Invariant Sections
   and required Cover Texts given in the Document's license notice.
H. Include an unaltered copy of this License.
I. Preserve the section Entitled "History", Preserve its Title, and add
   to it an item stating at least the title, year, new authors, and
   publisher of the Modified Version as given on the Title Page.  If
   there is no section Entitled "History" in the Document, create one
   stating the title, year, authors, and publisher of the Document as
   given on its Title Page, then add an item describing the Modified
   Version as stated in the previous sentence.
J. Preserve the network location, if any, given in the Document for
   public access to a Transparent copy of the Document, and likewise
   the network locations given in the Document for previous versions
   it was based on.  These may be placed in the "History" section.
   You may omit a network location for a work that was published at
   least four years before the Document itself, or if the original
   publisher of the version it refers to gives permission.
K. For any section Entitled "Acknowledgements" or "Dedications",
   Preserve the Title of the section, and preserve in the section all
   the substance and tone of each of the contributor acknowledgements
   and/or dedications given therein.
L. Preserve all the Invariant Sections of the Document,
   unaltered in their text and in their titles.  Section numbers
   or the equivalent are not considered part of the section titles.
M. Delete any section Entitled "Endorsements".  Such a section
   may not be included in the Modified Version.
N. Do not retitle any existing section to be Entitled "Endorsements"
   or to conflict in title with any Invariant Section.
O. Preserve any Warranty Disclaimers.

If the Modified Version includes new front-matter sections or
appendices that qualify as Secondary Sections and contain no material
copied from the Document, you may at your option designate some or all
of these sections as invariant.  To do this, add their titles to the
list of Invariant Sections in the Modified Version's license notice.
These titles must be distinct from any other section titles.

You may add a section Entitled "Endorsements", provided it contains
nothing but endorsements of your Modified Version by various
parties--for example, statements of peer review or that the text has
been approved by an organization as the authoritative definition of a
standard.

You may add a passage of up to five words as a Front-Cover Text, and a
passage of up to 25 words as a Back-Cover Text, to the end of the list
of Cover Texts in the Modified Version.  Only one passage of
Front-Cover Text and one of Back-Cover Text may be added by (or
through arrangements made by) any one entity.  If the Document already
includes a cover text for the same cover, previously added by you or
by arrangement made by the same entity you are acting on behalf of,
you may not add another; but you may replace the old one, on explicit
permission from the previous publisher that added the old one.

The author(s) and publisher(s) of the Document do not by this License
give permission to use their names for publicity for or to assert or
imply endorsement of any Modified Version.


5. COMBINING DOCUMENTS

You may combine the Document with other documents released under this
License, under the terms defined in section 4 above for modified
versions, provided that you include in the combination all of the
Invariant Sections of all of the original documents, unmodified, and
list them all as Invariant Sections of your combined work in its
license notice, and that you preserve all their Warranty Disclaimers.

The combined work need only contain one copy of this License, and
multiple identical Invariant Sections may be replaced with a single
copy.  If there are multiple Invariant Sections with the same name but
different contents, make the title of each such section unique by
adding at the end of it, in parentheses, the name of the original
author or publisher of that section if known, or else a unique number.
Make the same adjustment to the section titles in the list of
Invariant Sections in the license notice of the combined work.

In the combination, you must combine any sections Entitled "History"
in the various original documents, forming one section Entitled
"History"; likewise combine any sections Entitled "Acknowledgements",
and any sections Entitled "Dedications".  You must delete all sections
Entitled "Endorsements".


6. COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents
released under this License, and replace the individual copies of this
License in the various documents with a single copy that is included in
the collection, provided that you follow the rules of this License for
verbatim copying of each of the documents in all other respects.

You may extract a single document from such a collection, and distribute
it individually under this License, provided you insert a copy of this
License into the extracted document, and follow this License in all
other respects regarding verbatim copying of that document.


7. AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate
and independent documents or works, in or on a volume of a storage or
distribution medium, is called an "aggregate" if the copyright
resulting from the compilation is not used to limit the legal rights
of the compilation's users beyond what the individual works permit.
When the Document is included in an aggregate, this License does not
apply to the other works in the aggregate which are not themselves
derivative works of the Document.

If the Cover Text requirement of section 3 is applicable to these
copies of the Document, then if the Document is less than one half of
the entire aggregate, the Document's Cover Texts may be placed on
covers that bracket the Document within the aggregate, or the
electronic equivalent of covers if the Document is in electronic form.
Otherwise they must appear on printed covers that bracket the whole
aggregate.


8. TRANSLATION

Translation is considered a kind of modification, so you may
distribute translations of the Document under the terms of section 4.
Replacing Invariant Sections with translations requires special
permission from their copyright holders, but you may include
translations of some or all Invariant Sections in addition to the
original versions of these Invariant Sections.  You may include a
translation of this License, and all the license notices in the
Document, and any Warranty Disclaimers, provided that you also include
the original English version of this License and the original versions
of those notices and disclaimers.  In case of a disagreement between
the translation and the original version of this License or a notice
or disclaimer, the original version will prevail.

If a section in the Document is Entitled "Acknowledgements",
"Dedications", or "History", the requirement (section 4) to Preserve
its Title (section 1) will typically require changing the actual
title.


9. TERMINATION

You may not copy, modify, sublicense, or distribute the Document except
as expressly provided for under this License.  Any other attempt to
copy, modify, sublicense or distribute the Document is void, and will
automatically terminate your rights under this License.  However,
parties who have received copies, or rights, from you under this
License will not have their licenses terminated so long as such
parties remain in full compliance.


10. FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new, revised versions
of the GNU Free Documentation License from time to time.  Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.  See
https://www.gnu.org/copyleft/.

Each version of the License is given a distinguishing version number.
If the Document specifies that a particular numbered version of this
License "or any later version" applies to it, you have the option of
following the terms and conditions either of that specified version or
of any later version that has been published (not as a draft) by the
Free Software Foundation.  If the Document does not specify a version
number of this License, you may choose any version ever published (not
as a draft) by the Free Software Foundation.


ADDENDUM: How to use this License for your documents

To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and
license notices just after the title page:

    Copyright (c)  YEAR  YOUR NAME.
    Permission is granted to copy, distribute and/or modify this document
    under the terms of the GNU Free Documentation License, Version 1.2
    or any later version published by the Free Software Foundation;
    with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
    A copy of the license is included in the section entitled "GNU
    Free Documentation License".

If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
replace the "with...Texts." line with this:

    with the Invariant Sections being LIST THEIR TITLES, with the
    Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.

If you have Invariant Sections without Cover Texts, or some other
combination of the three, merge those two alternatives to suit the
situation.

If your document contains nontrivial examples of program code, we
recommend releasing these examples in parallel under your choice of
free software license, such as the GNU General Public License,
to permit their use in free software.

The End.
