mirror of
https://github.com/freebsd/freebsd-src.git
synced 2024-11-30 10:52:50 +00:00
Add Farnsworth support to morse(6).
(For those interested: this is intented to extend the space between characters to help people learning morse code by giving the brain some extra time for acoustical pattern recognition.) Note: I slightly cleaned up the submitted patch for minor stylistic issues, and changed the default for the new -c option to be identical to -w. Submitted by: "Stephen P. Cravey" <cravey@gotbrains.org> N5UUU MFC after: 2 weeks PR: bin/81831
This commit is contained in:
parent
a8d23252b6
commit
bc48d6e6c9
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=147110
@ -33,7 +33,7 @@
|
||||
.\" @(#)bcd.6 8.1 (Berkeley) 5/31/93
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd May 11, 2004
|
||||
.Dd June 7, 2005
|
||||
.Dt MORSE 6
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -44,6 +44,7 @@
|
||||
.Op Fl elps
|
||||
.Op Fl d Ar device
|
||||
.Op Fl w Ar speed
|
||||
.Op Fl c Ar speed
|
||||
.Op Fl f Ar frequency
|
||||
.Op Ar string ...
|
||||
.Sh DESCRIPTION
|
||||
@ -73,6 +74,14 @@ support.
|
||||
Set the sending speed in words per minute.
|
||||
If not specified, the default
|
||||
speed of 20 WPM is used.
|
||||
.It Fl c Ar speed
|
||||
Farnsworth support.
|
||||
Set the spacing between characters in words per minute.
|
||||
This is independent of the speed
|
||||
that the individual characters are sent.
|
||||
If not specified, defaults to the effective value of the
|
||||
.Fl w
|
||||
option.
|
||||
.It Fl f Ar frequency
|
||||
Set the sidetone frequency to something other than the default 600 Hz.
|
||||
.It Fl d Ar device
|
||||
@ -91,6 +100,8 @@ or
|
||||
.Pp
|
||||
The
|
||||
.Fl w
|
||||
,
|
||||
.Fl c
|
||||
and
|
||||
.Fl f
|
||||
flags only work in conjunction with either the
|
||||
@ -176,6 +187,11 @@ added by
|
||||
Ability to key an external device added by
|
||||
.An J\(:org Wunsch
|
||||
(DL8DTL).
|
||||
.Pp
|
||||
Farnsworth support for
|
||||
.Nm
|
||||
added by
|
||||
.An Stephen Cravey (N5UUU).
|
||||
.Sh BUGS
|
||||
Only understands a few European characters
|
||||
(German and French),
|
||||
|
@ -266,12 +266,14 @@ void show(const char *), play(const char *), morse(char);
|
||||
void ttyout(const char *);
|
||||
void sighandler(int);
|
||||
|
||||
#define GETOPTOPTS "d:ef:lsw:"
|
||||
#define GETOPTOPTS "c:d:ef:lsw:"
|
||||
#define USAGE \
|
||||
"usage: morse [-els] [-d device] [-w speed] [-f frequency] [string ...]\n"
|
||||
"usage: morse [-els] [-d device] [-w speed] [-c speed] [-f frequency] [string ...]\n"
|
||||
|
||||
static int pflag, lflag, sflag, eflag;
|
||||
static int wpm = 20; /* words per minute */
|
||||
static int wpm = 20; /* effective words per minute */
|
||||
static int cpm; /* effective words per minute between
|
||||
* characters */
|
||||
#define FREQUENCY 600
|
||||
static int freq = FREQUENCY;
|
||||
static char *device; /* for tty-controlled generator */
|
||||
@ -280,6 +282,7 @@ static char *device; /* for tty-controlled generator */
|
||||
#define CHAR_SPACE 3
|
||||
#define WORD_SPACE (7 - CHAR_SPACE - 1)
|
||||
static float dot_clock;
|
||||
static float cdot_clock;
|
||||
int spkr, line;
|
||||
struct termios otty, ntty;
|
||||
int olflags;
|
||||
@ -287,10 +290,10 @@ int olflags;
|
||||
#ifdef SPEAKER
|
||||
tone_t sound;
|
||||
#undef GETOPTOPTS
|
||||
#define GETOPTOPTS "d:ef:lpsw:"
|
||||
#define GETOPTOPTS "c:d:ef:lpsw:"
|
||||
#undef USAGE
|
||||
#define USAGE \
|
||||
"usage: morse [-elps] [-d device] [-w speed] [-f frequency] [string ...]\n"
|
||||
"usage: morse [-elps] [-d device] [-w speed] [-c speed] [-f frequency] [string ...]\n"
|
||||
#endif
|
||||
|
||||
static const struct morsetab *hightab;
|
||||
@ -303,6 +306,9 @@ main(int argc, char **argv)
|
||||
|
||||
while ((ch = getopt(argc, argv, GETOPTOPTS)) != -1)
|
||||
switch ((char) ch) {
|
||||
case 'c':
|
||||
cpm = atoi(optarg);
|
||||
break;
|
||||
case 'd':
|
||||
device = optarg;
|
||||
break;
|
||||
@ -340,7 +346,9 @@ main(int argc, char **argv)
|
||||
fputs("morse: only one of -p, -d and -l, -s allowed\n", stderr);
|
||||
exit(1);
|
||||
}
|
||||
if ((pflag || device) && ((wpm < 1) || (wpm > 60))) {
|
||||
if (cpm == 0)
|
||||
cpm = wpm;
|
||||
if ((pflag || device) && ((wpm < 1) || (wpm > 60) || (cpm < 1) || (cpm > 60))) {
|
||||
fputs("morse: insane speed\n", stderr);
|
||||
exit(1);
|
||||
}
|
||||
@ -385,6 +393,12 @@ main(int argc, char **argv)
|
||||
dot_clock = dot_clock / 2; /* dot_clock runs at twice */
|
||||
/* the dot rate */
|
||||
dot_clock = dot_clock * 100; /* scale for ioctl */
|
||||
|
||||
cdot_clock = cpm / 2.4; /* dots/sec */
|
||||
cdot_clock = 1 / cdot_clock; /* duration of a dot */
|
||||
cdot_clock = cdot_clock / 2; /* dot_clock runs at twice */
|
||||
/* the dot rate */
|
||||
cdot_clock = cdot_clock * 100; /* scale for ioctl */
|
||||
}
|
||||
|
||||
argc -= optind;
|
||||
@ -492,7 +506,7 @@ play(const char *s)
|
||||
break;
|
||||
case ' ':
|
||||
sound.frequency = 0;
|
||||
sound.duration = dot_clock * WORD_SPACE;
|
||||
sound.duration = cdot_clock * WORD_SPACE;
|
||||
break;
|
||||
default:
|
||||
sound.duration = 0;
|
||||
@ -511,7 +525,7 @@ play(const char *s)
|
||||
}
|
||||
}
|
||||
sound.frequency = 0;
|
||||
sound.duration = dot_clock * CHAR_SPACE;
|
||||
sound.duration = cdot_clock * CHAR_SPACE;
|
||||
ioctl(spkr, SPKRTONE, &sound);
|
||||
#endif
|
||||
}
|
||||
@ -534,7 +548,7 @@ ttyout(const char *s)
|
||||
break;
|
||||
case ' ':
|
||||
on = 0;
|
||||
duration = dot_clock * WORD_SPACE;
|
||||
duration = cdot_clock * WORD_SPACE;
|
||||
break;
|
||||
default:
|
||||
on = 0;
|
||||
@ -554,7 +568,7 @@ ttyout(const char *s)
|
||||
duration = dot_clock * 10000;
|
||||
usleep(duration);
|
||||
}
|
||||
duration = dot_clock * CHAR_SPACE * 10000;
|
||||
duration = cdot_clock * CHAR_SPACE * 10000;
|
||||
usleep(duration);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user