1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
UNIX Morse Code Tutor, Version 2
--------------------------------
Introduction
------------
The original Unixcw package, version 1, grew out of a desire to have a
program available under Linux that was very similar to the one I was
used to under DOS. While several Linux Morse Tutors were, in fact,
still are, available, I never quite found one that did the stuff I
wanted.
From the original Unixcw package came version 2. This is almost a
total rewrite, although it includes the same basic binaries as were in
version 1. The two major changes are the addition of an extensive,
general purpose CW library, and also an Xwindows-based CW tutor
program.
The CW library
--------------
The heart of the package is 'libcw'. This is a library which, when
built, offers the following basic CW services to a caller program:
o Morse code character translation tables, and lookup functions
o Morse code low-level timing calculations
o A 'sidetone' generation and queueing system, using the console
speaker
o Optional keying control for an external device, say a transmitter,
or an oscillator
o CW character and string send routines, tied in with the character
lookup
o CW receive routines, also tied in to the character lookup
o Adaptive speed tracking of received CW
o An iambic keyer, with both Curtis 8044 types A and B timing
o Straight key emulation
The library uses signals extensively to create a background task in
which to do the majority of its work, leaving the main program free to
handle other tasks. For example, the simplest CW sending program that
uses the library looks like:
#include <cwlib.h>
int main (int argc, char **argv)
{
/* Start the string sending in the background. */
cw_send_string ("Hello, world");
/* Wait for the string send to complete. */
cw_tone_queue_wait ();
}
Instead of the cw_tone_queue_wait() call, this program could go off and
handle any other work it has to do, asynchronously from the CW library's
sending the string.
As well as the handful of applications included in Unixcw 2, the
the following sorts of programs might also use 'libcw' as their core:
o A fully graphical CW send and receive station
o 'CWbiff', announces incoming email sender in CW
o Offline CW reader program, capable of decoding CW from MP3 or other
audio file formats
o A simple Iambic keyer for an external transmitter, using the mouse
buttons as the keyer paddles
o A more comprehensive CW tutor program
o An automated Morse Code testing application
'cwlib' is coded in 'C' for easy portability and use.
Included applications
---------------------
The package comes with four basic applications:
o cw This is a CW sending 'engine', that reads characters
from stdin, sounds them on the console speaker, and
echoes them to stdout. It needs to use a device that
understands the KIOCSOUND ioctl - a good way to run it
on a system (character mode) console is with
cw -d/dev/tty
o cwgen This is a simple random character generator, that can
be used as a 'feed' for cw. Example usage:
cwgen | cw -d/dev/tty
o cwcp This is a curses-based menu program that will generate
random morse, groups of characters from selected sets,
words, and CW abbreviations randomly, sound them using
'cw', and can handle changes of WPM and pitch from the
keyboard. It owes much to CP222.EXE, by VU2ZAP.
o xcwcp This is X-based CW tutor program. This version offers
the same random and keyboard sending as 'cwcp', but in
addition, will also read CW that you send to it using
the keyboard or mouse as a keyer, so you can use it for
sending practice as well as receiving.
'cw' and 'cwgen' require only a basic 'C' compiler. 'cwcp' requires a
'C' compiler and a Curses library. 'xcwcp' requires a 'C++' compiler
and a copy of the Trolltech Qt library. This library is fairly
standard on Linux systems, since it is the basis of KDE, so relying on
this should not be too much of a problem.
Building the library and programs
---------------------------------
Please see the file INSTALLING for details on how to build Unixcw
version 2 from the distributed sources.
License
-------
Unixcw is distributed under the GNU GPL. Please see the COPYING file
for details.
Acknowlegements
---------------
Thanks to Kamal Mostafa, KA6MAL, for reviewing the cwlib API, showing
me the errors of my ways with 64-bit integers, and hounding me to add
the adaptive receive speed tracking, and to Joop Stakenborg, PA4TU,
for being a willing "guinea pig" with various snapshots of unfinished
versions of the package, and for his continued enthusiasm and interest
in maintaining Unixcw as a Debian Linux package.
Have fun
--------
Simon Baldwin, G0FRD
simonb@caldera.com
|