
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, 2023  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 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)

By default speakup looks for the synthesizer on the ttyS0 serial port. This can
be changed with the device parameter of the modules, for instance for
DoubleTalk LT:

speakup_ltlk.dev=ttyUSB0

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 boot 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 himself ran the script, all the users will be able
to change from English to the language chosen 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.
