NAME
xcwcp - Xwindows-based Morse tutor program
SYNOPSIS
xcwcp [-s sound] [--sound=sound] [-x sdevice] [--sdevice=sdevice] [-y
mdevice] [--mdevice=mdevice] [-d cdevice] [--cdevice=cdevice] [-w WPM]
[--wpm=WPM] [-t tone] [--tone=tone] [--hz=tone] [-v volume]
[--volume=volume] [-g gap] [--gap=gap]
xcwcp also accepts the -h, --help, -v and --version options.
The LINUX version understands both short form and long form command
line options. Other versions may understand only the short form
options.
Options may be predefined in the environment variable XCWCP_OPTIONS.
If defined, these options are used first; command line options take
precedence.
DESCRIPTION
xcwcp is a Xwindows-based interactive Morse code tutor program. It
lets you choose from a number of options for practice, including
sending random characters, random words, and characters from the
keyboard. It will also receive Morse code that you send using the
keyboard or mouse as a Morse keyer, and display the characters it sees.
COMMAND LINE OPTIONS
xcwcp understands the following command line options. The long form
options may not be available in non-LINUX versions.
-s, --sound
Specifies the way that xcwcp generates tones. Valid values are
’soundcard’ for tones through the system sound card, ’console’
for tones through the console speaker, or ’both’. These may be
shortened to ’s’, ’c’, or ’b’. The default value is
’soundcard’.
-x, --sdevice
Specifies the device file to open for access to the sound card.
The default device is /dev/audio, and this is generally the
correct device on most systems. See NOTES ON USING A SOUND CARD
below. This option is invalid if xcwcp is generating tones only
on the console.
-y, --mdevice
Specifies the device file to open for access to the sound mixer.
The default device is /dev/mixer. See NOTES ON USING A SOUND
CARD below. This option is invalid if cw is generating tones
only on the console.
-d, --cdevice
Specifies the device file to open for sound using the console
speaker. The default device here is /dev/console, although in
general it is likely to be necessary to provide a suitable value
for this option if console sound is selected. The value should
be a console device file, capable of KIOCSOUND. See SELECTING
SUITABLE SOUND DEVICE FILES below. This option is invalid if
xcwcp is generating tones only on the soundcard.
-i, --inifile
Specifies a text file that xcwcp can read to configure its
practice text. See CREATING CONFIGURATION FILES below.
-w, --wpm
Sets the initial sending speed in words per minute. The value
must be between 8 and 60. The default value is 12 WPM.
-t, --hz, --tone
Sets the initial sounder pitch in Hz. This value must be
between 0 and 4,000. The default value is 800Hz.
-v, --volume
Sets the initial sending volume, as a percentage. The value
must be between 0 and 100. The default value is 70 %. Sound
volumes work fully for sound card tones, but xcwcp cannot
control the volume of tones from the console speaker. In this
case, a volume of zero is silent, and all other volume values
are simply sounded.
-g, --gap
Sets the initial extra gap, in dot lengths, between characters
(the ’Farnsworth’ delay). It must be between 0 and 60. The
default is 0.
USER INTERFACE
xcwcp offers GUI controls for changing the speed, tone frequency,
’Farnsworth’ gap, and mode of the program. All of the major controls
are placed on the application toolbar.
The main GUI window is used to display the characters that xcwcp sends
or receives.
To find out more about what a particular GUI control does, use the
"What’s this..." icon (the ’?’ at the far right of the toolbar).
RANDOM CHARACTERS AND WORDS
xcwcp sends random characters in groups of five, with a space between
each group.
When sending random words, xcwcp sends the complete word, followed by a
space. Because short words are easier to copy without writing, xcwcp’s
default dictionary contains only three, four, and five-letter words in
its random words list.
xcwcp chooses at random from a list of around 3000 words in its default
dictionary. You can change this text using a configuration file, read
at startup. See CREATING CONFIGURATION FILES below.
RECEIVING MORSE
xcwcp can receive Morse code, and display it in its main GUI window.
To key Morse code into the program, select the Receive Keyed CW mode,
and press the stop/start button. Now, place the mouse cursor over the
central window of the program. By pressing the middle mouse button,
you should be able to key Morse into the program as if the mouse button
was a straight Morse key.
For better keying, you can use the left and right mouse buttons as if
they were paddles on an Iambic keyer. This will send Morse code at the
exact rate set on the Speed control.
You can also use the keyboard for keying. In this case, any of the Up
or Down cursor keys, Space, Enter, or Return may be used as the
straight key, and the Left and Right cursor keys act as the two paddles
of an Iambic keyer.
By default, xcwcp will try to follow the speed of the Morse code that
you send to it. It is possible to switch this tracking off, in which
case the program switches to receiving only at the exact speed set on
the Speed control. However, fixed speed receiving is very, very picky
about receiving only extremely accurately timed Morse code, so unless
you are striving for complete perfection, you may find that speed
tracking is more comfortable.
The speed tracking in xcwcp can sometime be confused by very wide and
abrupt changes in speed. If it is having difficulty finding the speed
you are sending at, you can use the File pulldown menu to synchronize
the receive speed to the speed set on the Speed control.
At any time, the mode selection combowidget can get focus by using
Alt+M. You can then use the space bar or the up/down keys to change
the mode. The Tab key moves to the next widget, so you can change
speed, etc. Shift+Tab moves backwards.
NOTES ON USING A SOUND CARD
By default, xcwcp uses the sound device "/dev/audio" to access the
system sound card. This is generally the correct device to use, but
for systems with special requirements, or those with multiple sound
cards, the option -x or --sdevice can be used to specify the device for
sound card access. If the sound card device cannot be set up, xcwcp
prints the error message
cannot set up soundcard sound
and exits.
Sound card devices are usually single-access devices, so that when one
process has opened the device, other processes are prevented from using
it. If xcwcp finds that the sound card is busy, it prints the error
message
open /dev/audio: Device or resource busy
but continues to retry on each new tone until it can access the device.
Once it has control of the sound card, xcwcp will only use it as long
as it has Morse code tones to sound. It will close the device during
pauses in output, to allow other programs to use it.
The main sound card device will often allow xcwcp to control tone
volumes directly, but where this is not possible, xcwcp uses the mixer
device instead. By default, this is "/dev/mixer", but the device can
be specified with the -y or --mdevice options. In general, as with the
main sound card device, the default mixer device is usually the correct
one to use.
The mixer device is only used if the sound card does not allow volume
control through the main sound card device.
cw will of course conflict with any other programs that expect
exclusive use of the system sound card (for example, MP3 players).
The sound card device is not used if xcwcp is only sending tones on the
console speaker.
SELECTING SUITABLE SOUND DEVICE FILES
When xcwcp sounds Morse code on the UNIX console speaker, it uses the
KIOCSOUND ioctl. By default, it will try to use the device
"/dev/console", unless the -d or --cdevice option is used. If the
device refuses to create tones, xcwcp prints the error message
cannot set up console sound
and exits.
If the default device is not available, or if xcwcp has no permissions
to use it, xcwcp will need to be told which device to use. Which
device files are suitable will depend on which operating system is
running, and which system user ID runs xcwcp. They must however be
console multiscreen devices, for example /dev/tty1 and up on LINUX.
For console sound on LINUX, it is normally possible to run xcwcp as
superuser, with the default /dev/console as the sound device; this
combination will usually work. Unless running as superuser, xcwcp
won’t have the necessary permission to access a ’foreign’ tty. Making
xcwcp an suid binary avoids this problem. The program does not fork()
or exec(), so making it suid should be relatively safe.
There is no need to worry about console sound devices if xcwcp is only
sending tones on the system sound card.
CREATING CONFIGURATION FILES
xcwcp contains a default set of modes and practice text that should be
enough to begin with. It can however read in a file at startup that
reconfigures these to provide different character groupings, word sets,
and other practice data.
To read a configuration file, use the -i or --inifile command line
option. The file should introduce each xcwcp mode with a section
header in ’[’ ... ’]’ characters, followed by the practice text for
that mode, with elements separated by whitespace. Lines starting with
a semicolon or hash are treated as comments. For example
; Simple example mode
[ A to Z ]
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
xcwcp will generate five character groups for modes whose elements are
all single characters, and treat other modes as having elements that
are complete words. As a starting point for customized modes, xcwcp
will write its default configuration to a file if given the
undocumented -# option, for example "xcwcp -# /tmp/xcwcp.ini".
NOTES
xcwcp is an Xwindows rewrite of cwcp. Both programs borrow heavily
from the the DOS Morse code tutor CP222C.EXE, by VU2ZAP.
The characters echoed in the main GUI window may be ASCII equivalents
of Morse procedural signals; see the cw(7,LOCAL) man page for details.
HINTS ON LEARNING MORSE CODE
Here are a few hints and tips that may help with the process of
learning Morse code.
Firstly, do NOT think of the elements as dots and dashes. Instead,
think of them as dits and dahs (so ’A’ is di-dah). If you think of
them in this way, the process of translating sound into characters will
be learned much more easily.
Do not learn the characters from a table. Learn them by watching the
groups appear on the screen, and listening to the sounds produced as
each is sent. In the very initial stages, it may be beneficial if you
can find a person to take you through the first stages of recognising
characters.
Do not waste your time learning Morse code at 5 WPM. Set the speed to
12 or 15 WPM, but use extra spacing (the Gap window) to reduce the
effective speed to much lower - around four or five WPM effective
speed. This way, you will learn the rhythm of the characters as they
are sent, but still have plenty of time between characters. As you
practice, decrease the gap to zero.
Learn in stages. Start by learning the EISH5 group, then progress down
through the menu as each group is mastered. The groups contain
characters which are in some way related, either by sound, or by type
of character.
Once you have completed all the groups EISH5 to ,?.;)/ (or 23789 if you
do not want to learn procedural signals yet), use the full character
set options, and the words and CW words options, to sharpen your skill.
If you have difficulties with particular characters, return to that
group and practice again with a smaller character set.
Resist the temptation to try to learn or improve your speed by copying
off-air. You will not know what speed you are working at, and much
hand-sent Morse is not perfectly formed. What you can gain off-air
though is a general ’resilience’, a tolerance for Morse code where the
timing of individual elements, or spacing between characters and words,
is not 100% accurate.
If working to attain a particular speed for a test, always set the
speed slightly higher. For example, if aiming for 12 WPM, set the
tutor speed to 14 or 15 WPM. This way, when you drop back to 12 WPM
you will feel much more relaxed about copying. Be aware that xcwcp is
not necessarily going to send at exactly the speed you set, due to
limitations in what can be done with UNIX timers. It often sends at a
slower speed than you set, so be very careful with this if you have a
target speed that you need to reach.
Use the program to make cassette tapes that you can take with you in a
walkman or in the car, for long journeys. You do not have to write
down everything you hear to practice Morse code. Simply listening to
the shapes of characters over a period will help to train your brain
into effortless recognition. In fact, slavishly writing everything
down becomes a barrier at speeds of 15-20 WPM and above, so if you can
begin to copy without writing each character down, you will find
progress much easier above these speeds. But do not over-use these
tapes, otherwise you will quickly memorise them. Re-record them with
new contents at very regular intervals.
Try to spend at least 15-30 minutes each day practicing. Much less
than this will make progress glacially slow. But significantly more
than an hour or so may just result in you becoming tired, but not
improving. Recognise when it is time to stop for the day.
Do not worry if you reach a speed ’plateau’. This is common, and you
will soon pass it with a little perseverance.
At higher speeds, CW operators tend to recognise the ’shape’ of whole
words, rather than the individual characters within the words. The CW
words menu option can be used to help to practice and develop this
skill.
Neither the mouse buttons nor the keyboard are ideal for use a keys or
keyer paddles, for sending practice. Try to use a proper key for
sending where possible. It is hard even for experienced operators to
get good keying using the mouse or keyboard. Of the two, the mouse is
probably the better option, though, in a pinch.
ERRORS AND OMISSIONS
The calibration option is a bit ropy. It simply sends PARIS
repeatedly, and relies on you to time the sending and then work out if
any adjustment to the speed is really necessary. Automatic calibration
by making measurements over a given period would be a lot better.
SEE ALSO
Man pages for cw(7,LOCAL), cwlib(3,LOCAL), cw(1,LOCAL), cwgen(1,LOCAL),
and xcwcp(1,LOCAL).