Fw: Re: bin/81831: [PATCH] morse(6) Farnsworth support
Stephen P. Cravey
cravey at gotbrains.org
Tue Jun 7 16:30:18 GMT 2005
The following reply was made to PR bin/81831; it has been noted by GNATS.
From: "Stephen P. Cravey" <cravey at gotbrains.org>
To: bug-followup at FreeBSD.org
Cc:
Subject: Fw: Re: bin/81831: [PATCH] morse(6) Farnsworth support
Date: Tue, 7 Jun 2005 11:28:11 -0500
Sorry, sent the last one to gnats-submit. Apologies to the gnats
maintainers.
This updated patch handles a minor idiocy in the GETOPTOPTS to group the
new 'c' flag with 'lpsw' instead of forcing it to come later in the
command line.
This is a patch to morse.c in cvs, not an additive patch to my previous
patch.
-Stephen
*** morse.c Tue Jun 7 10:50:50 2005
--- morse.c.new Tue Jun 7 10:50:40 2005
***************
*** 266,277 ****
void ttyout(const char *);
void sighandler(int);
! #define GETOPTOPTS "d:ef:lsw:"
#define USAGE \
! "usage: morse [-els] [-d device] [-w speed] [-f frequency] [string
...]\n"
! static int pflag, lflag, sflag, eflag;
! static int wpm = 20; /* words per minute */
#define FREQUENCY 600
static int freq = FREQUENCY;
static char *device; /* for tty-controlled generator */
--- 266,278 ----
void ttyout(const char *);
void sighandler(int);
! #define GETOPTOPTS "d:ef:lswc:"
#define USAGE \
! "usage: morse [-els] [-d device] [-w speed] [-c speed] [-f frequency]
[string ...]\n"
! static int pflag, lflag, sflag, eflag, cflag;
! static int wpm = 20; /* effective words per minute */
! static int cpm = 20; /* effective words per minute between
characters */ #define FREQUENCY 600
static int freq = FREQUENCY;
static char *device; /* for tty-controlled generator */
***************
*** 280,285 ****
--- 281,287 ----
#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,296 ****
#ifdef SPEAKER
tone_t sound;
#undef GETOPTOPTS
! #define GETOPTOPTS "d:ef:lpsw:"
#undef USAGE
#define USAGE \
! "usage: morse [-elps] [-d device] [-w speed] [-f frequency] [string
...]\n" #endif
static const struct morsetab *hightab;
--- 289,298 ----
#ifdef SPEAKER
tone_t sound;
#undef GETOPTOPTS
! #define GETOPTOPTS "d:ef:lpswc:"
#undef USAGE
#define USAGE \
! "usage: morse [-elps] [-d device] [-w speed] [-c speed] [-f frequency]
[string ...]\n" #endif
static const struct morsetab *hightab;
***************
*** 327,332 ****
--- 329,338 ----
case 'w':
wpm = atoi(optarg);
break;
+ case 'c':
+ cflag = 1;
+ cpm = atoi(optarg);
+ break;
case '?':
default:
fputs(USAGE, stderr);
***************
*** 340,346 ****
fputs("morse: only one of -p, -d and -l, -s allowed\n",
stderr); exit(1);
}
! if ((pflag || device) && ((wpm < 1) || (wpm > 60))) {
fputs("morse: insane speed\n", stderr);
exit(1);
}
--- 346,352 ----
fputs("morse: only one of -p, -d and -l, -s allowed\n",
stderr); exit(1);
}
! if ((pflag || device) && ((wpm < 1) || (wpm > 60) || (cpm < 1)
|| (cpm > 60))) {
fputs("morse: insane speed\n", stderr);
exit(1);
}
***************
*** 385,390 ****
--- 391,405 ----
dot_clock = dot_clock / 2; /* dot_clock runs at twice */
/* the dot rate */
dot_clock = dot_clock * 100; /* scale for ioctl */
+
+ if (cflag) {
+ 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 */
+ } else
+ cdot_clock = dot_clock;
}
argc -= optind;
***************
*** 492,498 ****
break;
case ' ':
sound.frequency = 0;
! sound.duration = dot_clock * WORD_SPACE;
break;
default:
sound.duration = 0;
--- 507,513 ----
break;
case ' ':
sound.frequency = 0;
! sound.duration = cdot_clock * WORD_SPACE;
break;
default:
sound.duration = 0;
***************
*** 511,517 ****
}
}
sound.frequency = 0;
! sound.duration = dot_clock * CHAR_SPACE;
ioctl(spkr, SPKRTONE, &sound);
#endif
}
--- 526,532 ----
}
}
sound.frequency = 0;
! sound.duration = cdot_clock * CHAR_SPACE;
ioctl(spkr, SPKRTONE, &sound);
#endif
}
***************
*** 534,540 ****
break;
case ' ':
on = 0;
! duration = dot_clock * WORD_SPACE;
break;
default:
on = 0;
--- 549,555 ----
break;
case ' ':
on = 0;
! duration = cdot_clock * WORD_SPACE;
break;
default:
on = 0;
***************
*** 554,560 ****
duration = dot_clock * 10000;
usleep(duration);
}
! duration = dot_clock * CHAR_SPACE * 10000;
usleep(duration);
}
--- 569,575 ----
duration = dot_clock * 10000;
usleep(duration);
}
! duration = cdot_clock * CHAR_SPACE * 10000;
usleep(duration);
}
More information about the freebsd-bugs
mailing list